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