summaryrefslogtreecommitdiff
path: root/compiler/optimizing/instruction_simplifier.cc
diff options
context:
space:
mode:
author Vladimir Marko <vmarko@google.com> 2019-11-15 14:07:19 +0000
committer Vladimir Marko <vmarko@google.com> 2019-11-15 17:42:51 +0000
commit56f1332113c3b8b1844c04683b9cb9dc5a0bd346 (patch)
tree849942dca13874ef8e86f6ad9cce76ad5152b429 /compiler/optimizing/instruction_simplifier.cc
parent3e20d0a7748c8810bff9fe99298758930fbe5300 (diff)
Fix pruning invoke environment for StringBuilder append pattern.
Test: Extra test in 697-checker-string-append Test: testrunner.py --host --optimizing Bug: 19575890 Bug: 144300699 Change-Id: I3934eb01a62dbbed8b8f9f94ce3ba02051538bb0
Diffstat (limited to 'compiler/optimizing/instruction_simplifier.cc')
-rw-r--r--compiler/optimizing/instruction_simplifier.cc10
1 files changed, 6 insertions, 4 deletions
diff --git a/compiler/optimizing/instruction_simplifier.cc b/compiler/optimizing/instruction_simplifier.cc
index 63c5965415..d272bfaec9 100644
--- a/compiler/optimizing/instruction_simplifier.cc
+++ b/compiler/optimizing/instruction_simplifier.cc
@@ -2630,10 +2630,12 @@ static bool TryReplaceStringBuilderAppend(HInvoke* invoke) {
block->InsertInstructionBefore(append, invoke);
invoke->ReplaceWith(append);
// Copy environment, except for the StringBuilder uses.
- for (size_t i = 0, size = invoke->GetEnvironment()->Size(); i != size; ++i) {
- if (invoke->GetEnvironment()->GetInstructionAt(i) == sb) {
- invoke->GetEnvironment()->RemoveAsUserOfInput(i);
- invoke->GetEnvironment()->SetRawEnvAt(i, nullptr);
+ for (HEnvironment* env = invoke->GetEnvironment(); env != nullptr; env = env->GetParent()) {
+ for (size_t i = 0, size = env->Size(); i != size; ++i) {
+ if (env->GetInstructionAt(i) == sb) {
+ env->RemoveAsUserOfInput(i);
+ env->SetRawEnvAt(i, /*instruction=*/ nullptr);
+ }
}
}
append->CopyEnvironmentFrom(invoke->GetEnvironment());