| Index: src/arm/jump-target-arm.cc
|
| ===================================================================
|
| --- src/arm/jump-target-arm.cc (revision 6800)
|
| +++ src/arm/jump-target-arm.cc (working copy)
|
| @@ -76,7 +76,7 @@
|
| }
|
|
|
|
|
| -void JumpTarget::DoBranch(Condition cc, Hint ignored) {
|
| +void JumpTarget::DoBranch(Condition cond, Hint ignored) {
|
| ASSERT(cgen()->has_valid_frame());
|
|
|
| if (entry_frame_set_) {
|
| @@ -86,7 +86,7 @@
|
| ASSERT(entry_frame_.IsCompatibleWith(cgen()->frame()));
|
| }
|
| // We have an expected frame to merge to on the backward edge.
|
| - cgen()->frame()->MergeTo(&entry_frame_, cc);
|
| + cgen()->frame()->MergeTo(&entry_frame_, cond);
|
| } else {
|
| // Clone the current frame to use as the expected one at the target.
|
| set_entry_frame(cgen()->frame());
|
| @@ -98,8 +98,8 @@
|
| // frame with less precise type info branches to them.
|
| ASSERT(direction_ != FORWARD_ONLY);
|
| }
|
| - __ b(cc, &entry_label_);
|
| - if (cc == al) {
|
| + __ b(cond, &entry_label_);
|
| + if (cond == al) {
|
| cgen()->DeleteFrame();
|
| }
|
| }
|
| @@ -143,6 +143,16 @@
|
| entry_frame_set_ = true;
|
| } else {
|
| cgen()->frame()->MergeTo(&entry_frame_);
|
| + // On fall through we may have to merge both ways.
|
| + if (direction_ != FORWARD_ONLY) {
|
| + // This will not need to adjust the virtual frame entries that are
|
| + // register allocated since that was done above and they now match.
|
| + // But it does need to adjust the entry_frame_ of this jump target
|
| + // to make it potentially less optimistic. Later code can branch back
|
| + // to this jump target and we need to assert that that code does not
|
| + // have weaker assumptions about types.
|
| + entry_frame_.MergeTo(cgen()->frame());
|
| + }
|
| }
|
| } else {
|
| // If there is no current frame we must have an entry frame which we can
|
|
|