summaryrefslogtreecommitdiff
path: root/compiler/optimizing/code_generator_arm.cc
diff options
context:
space:
mode:
authorVladimir Marko <vmarko@google.com>2016-09-12 18:11:28 +0100
committerVladimir Marko <vmarko@google.com>2016-09-12 18:42:19 +0100
commita60a7053cd9a25c89dedc810b8a539cad3d56b36 (patch)
treebd01f1c185885e719776d67f510820f437d55dd7 /compiler/optimizing/code_generator_arm.cc
parent6ee9a333553b7e7268b5bdab14974475ff385106 (diff)
Remove custom CheckCast slow path caller saves for Baker CC.
For Baker CC, CheckCast has both a read-barrier marking slow path and a pCheckCast slow path. When the latter is known to leave the method, i.e. known to throw outside a try-block, we do not need to save live registers for retrieval for the exception delivery and since the read-barrier marking does not need to save any registers either we were setting the custom slow path caller saves to empty to avoid reserving unnecessary spill space. Hovewer, this also leads to marking live references in caller-save registers in the register mask and while the read-barrier marking entrypoint doesn't care, it causes a stack walk for the pCheckCast to try and retrieve an unsaved register. For the time being, revert to the default caller saves. This is a partial revert of https://android-review.googlesource.com/254920 Test: Run ART test suite on host and Nexus 9. Bug: 29231980 Bug: 30212852 Change-Id: I4e22125f3d8903c97506aa2e6e66bea8e8e6baef
Diffstat (limited to 'compiler/optimizing/code_generator_arm.cc')
-rw-r--r--compiler/optimizing/code_generator_arm.cc5
1 files changed, 0 insertions, 5 deletions
diff --git a/compiler/optimizing/code_generator_arm.cc b/compiler/optimizing/code_generator_arm.cc
index 4c41ac89e7..40c2b9c1ec 100644
--- a/compiler/optimizing/code_generator_arm.cc
+++ b/compiler/optimizing/code_generator_arm.cc
@@ -5738,7 +5738,6 @@ void LocationsBuilderARM::VisitCheckCast(HCheckCast* instruction) {
bool throws_into_catch = instruction->CanThrowIntoCatchBlock();
TypeCheckKind type_check_kind = instruction->GetTypeCheckKind();
- bool baker_read_barrier_slow_path = false;
switch (type_check_kind) {
case TypeCheckKind::kExactCheck:
case TypeCheckKind::kAbstractClassCheck:
@@ -5747,7 +5746,6 @@ void LocationsBuilderARM::VisitCheckCast(HCheckCast* instruction) {
call_kind = (throws_into_catch || kEmitCompilerReadBarrier) ?
LocationSummary::kCallOnSlowPath :
LocationSummary::kNoCall; // In fact, call on a fatal (non-returning) slow path.
- baker_read_barrier_slow_path = kUseBakerReadBarrier && !throws_into_catch;
break;
case TypeCheckKind::kArrayCheck:
case TypeCheckKind::kUnresolvedCheck:
@@ -5757,9 +5755,6 @@ void LocationsBuilderARM::VisitCheckCast(HCheckCast* instruction) {
}
LocationSummary* locations = new (GetGraph()->GetArena()) LocationSummary(instruction, call_kind);
- if (baker_read_barrier_slow_path) {
- locations->SetCustomSlowPathCallerSaves(RegisterSet()); // No caller-save registers.
- }
locations->SetInAt(0, Location::RequiresRegister());
locations->SetInAt(1, Location::RequiresRegister());
// Note that TypeCheckSlowPathARM uses this "temp" register too.