Index: runtime/vm/intermediate_language.cc |
diff --git a/runtime/vm/intermediate_language.cc b/runtime/vm/intermediate_language.cc |
index 2d281be8aa6fd37190bfb34bfde86ed5d8f95714..8cc93e3e980e69d44179ac9d65a0f14058d86dec 100644 |
--- a/runtime/vm/intermediate_language.cc |
+++ b/runtime/vm/intermediate_language.cc |
@@ -170,11 +170,14 @@ void CreateArrayComp::SetInputAt(intptr_t i, Value* value) { |
intptr_t BranchInstr::InputCount() const { |
- return 1; |
+ return is_fused_with_comparison() ? fused_with_comparison_->InputCount() : 1; |
} |
Value* BranchInstr::InputAt(intptr_t i) const { |
+ if (is_fused_with_comparison()) { |
+ return fused_with_comparison_->InputAt(i); |
+ } |
if (i == 0) return value(); |
UNREACHABLE(); |
return NULL; |
@@ -182,6 +185,7 @@ Value* BranchInstr::InputAt(intptr_t i) const { |
void BranchInstr::SetInputAt(intptr_t i, Value* value) { |
+ ASSERT(!is_fused_with_comparison()); |
if (i == 0) { |
value_ = value; |
return; |
@@ -985,17 +989,13 @@ void ReThrowInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
LocationSummary* BranchInstr::MakeLocationSummary() const { |
if (is_fused_with_comparison()) { |
- return LocationSummary::Make(0, |
- Location::NoLocation(), |
- LocationSummary::kNoCall, |
- LocationSummary::kBranch); |
+ return fused_with_comparison_->locs(); |
} else { |
const int kNumInputs = 1; |
const int kNumTemps = 0; |
LocationSummary* locs = new LocationSummary(kNumInputs, |
kNumTemps, |
- LocationSummary::kNoCall, |
- LocationSummary::kBranch); |
+ LocationSummary::kNoCall); |
locs->set_in(0, Location::RequiresRegister()); |
return locs; |
} |
@@ -1003,8 +1003,9 @@ LocationSummary* BranchInstr::MakeLocationSummary() const { |
void BranchInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
- // If branch was fused with a comparision then no code needs to be emitted. |
- if (!is_fused_with_comparison()) { |
+ if (is_fused_with_comparison()) { |
+ fused_with_comparison_->EmitNativeCode(compiler); |
+ } else { |
Register value = locs()->in(0).reg(); |
__ CompareObject(value, compiler->bool_true()); |
EmitBranchOnCondition(compiler, EQUAL); |
@@ -1081,8 +1082,7 @@ LocationSummary* StrictCompareComp::MakeLocationSummary() const { |
const intptr_t kNumTemps = 0; |
LocationSummary* locs = new LocationSummary(kNumInputs, |
kNumTemps, |
- LocationSummary::kNoCall, |
- LocationSummary::kBranch); |
+ LocationSummary::kNoCall); |
locs->set_in(0, Location::RequiresRegister()); |
locs->set_in(1, Location::RequiresRegister()); |
return locs; |