summaryrefslogtreecommitdiff
path: root/compiler/optimizing/instruction_simplifier.cc
diff options
context:
space:
mode:
author Vladimir Marko <vmarko@google.com> 2022-04-28 15:46:40 +0100
committer Treehugger Robot <treehugger-gerrit@google.com> 2022-04-29 03:53:43 +0000
commit1fbfa9b23cd1f0b4e00fd82ea999f9530f18b609 (patch)
tree0bb71b9f32fd61621bb4b5d2e364f1ad0e9c6278 /compiler/optimizing/instruction_simplifier.cc
parent2fd8aecd8b50b4dbf4fa882e5f955f25400051f6 (diff)
Fix `CanUseKnownBootImageVarHandle()`.
The first input to `HStaticFieldGet` in not necessarily an `HLoadClass`. It can be also `HClinitCheck`. Test: Rely on TreeHugger. Bug: 191765508 Bug: 230729606 Change-Id: Ib05b0c8a74809698cb5084349959efac4e8f35a7
Diffstat (limited to 'compiler/optimizing/instruction_simplifier.cc')
-rw-r--r--compiler/optimizing/instruction_simplifier.cc7
1 files changed, 4 insertions, 3 deletions
diff --git a/compiler/optimizing/instruction_simplifier.cc b/compiler/optimizing/instruction_simplifier.cc
index 914e44a18d..4db258b1f0 100644
--- a/compiler/optimizing/instruction_simplifier.cc
+++ b/compiler/optimizing/instruction_simplifier.cc
@@ -2940,7 +2940,7 @@ bool InstructionSimplifierVisitor::CanUseKnownBootImageVarHandle(HInvoke* invoke
DCHECK(!declaring_class->IsInitialized());
return false;
}
- HLoadClass* load_class = var_handle_instruction->InputAt(0)->AsLoadClass();
+ HInstruction* load_class = var_handle_instruction->InputAt(0)->AsLoadClass();
if (kIsDebugBuild) {
bool is_in_boot_image = false;
if (Runtime::Current()->GetHeap()->ObjectIsInBootImageSpace(declaring_class)) {
@@ -2950,9 +2950,10 @@ bool InstructionSimplifierVisitor::CanUseKnownBootImageVarHandle(HInvoke* invoke
const char* descriptor = declaring_class->GetDescriptor(&storage);
is_in_boot_image = compiler_options.IsImageClass(descriptor);
}
- CHECK_EQ(is_in_boot_image, load_class->IsInBootImage());
+ CHECK_EQ(is_in_boot_image,
+ load_class->IsLoadClass() && load_class->AsLoadClass()->IsInBootImage());
}
- if (!load_class->IsInBootImage()) {
+ if (!load_class->IsLoadClass() || !load_class->AsLoadClass()->IsInBootImage()) {
return false;
}