ARM/MIPS: Avoid dead dex cache arrays base for intrinsics.

Test: Run ART test suite on host and Nexus 6.
Change-Id: Ie2ad70f1e3f125eae5dad53a6384d405e0311505
diff --git a/compiler/optimizing/pc_relative_fixups_mips.cc b/compiler/optimizing/pc_relative_fixups_mips.cc
index c6acc45..c6d297d 100644
--- a/compiler/optimizing/pc_relative_fixups_mips.cc
+++ b/compiler/optimizing/pc_relative_fixups_mips.cc
@@ -115,7 +115,8 @@
         return;
       }
 
-      if (has_extra_input && !WillHaveCallFreeIntrinsicsCodeGen(invoke)) {
+      if (has_extra_input &&
+          !IsCallFreeIntrinsic<IntrinsicLocationsBuilderMIPS>(invoke, codegen_)) {
         InitializePCRelativeBasePointer();
         // Add the extra parameter base_.
         invoke_static_or_direct->AddSpecialInput(base_);
@@ -123,22 +124,6 @@
     }
   }
 
-  bool WillHaveCallFreeIntrinsicsCodeGen(HInvoke* invoke) {
-    if (invoke->GetIntrinsic() != Intrinsics::kNone) {
-      // This invoke may have intrinsic code generation defined. However, we must
-      // now also determine if this code generation is truly there and call-free
-      // (not unimplemented, no bail on instruction features, or call on slow path).
-      // This is done by actually calling the locations builder on the instruction
-      // and clearing out the locations once result is known. We assume this
-      // call only has creating locations as side effects!
-      IntrinsicLocationsBuilderMIPS builder(codegen_);
-      bool success = builder.TryDispatch(invoke) && !invoke->GetLocations()->CanCall();
-      invoke->SetLocations(nullptr);
-      return success;
-    }
-    return false;
-  }
-
   CodeGeneratorMIPS* codegen_;
 
   // The generated HMipsComputeBaseMethodAddress in the entry block needed as an