Fix `CanUseKnownBootImageVarHandle()`.

The first input to `HStaticFieldGet` in not necessarily an
`HLoadClass`. It can be also `HClinitCheck`.

(cherry picked from commit 1fbfa9b23cd1f0b4e00fd82ea999f9530f18b609)

Test: Rely on TreeHugger.
Bug: 191765508
Bug: 230729606
Merged-In: Ib05b0c8a74809698cb5084349959efac4e8f35a7
Change-Id: I4b0867befed15b82fed736cf07d8cb8d630b9cdd
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;
   }