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
diff --git a/compiler/optimizing/instruction_simplifier.cc b/compiler/optimizing/instruction_simplifier.cc
index 914e44a..4db258b 100644
--- a/compiler/optimizing/instruction_simplifier.cc
+++ b/compiler/optimizing/instruction_simplifier.cc
@@ -2940,7 +2940,7 @@
     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 @@
       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;
   }