Index: runtime/vm/intermediate_language.cc |
diff --git a/runtime/vm/intermediate_language.cc b/runtime/vm/intermediate_language.cc |
index bb5720977e8c5b79a29224ec5ae37aed2cb2fca1..7911dfc09b31c6bece95fe613c81d0245bbb8dbb 100644 |
--- a/runtime/vm/intermediate_language.cc |
+++ b/runtime/vm/intermediate_language.cc |
@@ -499,12 +499,16 @@ void Value::RemoveFromUseList() { |
} |
+// True if the definition has a single input use and is used only in |
+// environments at the same instruction as that input use. |
bool Definition::HasOnlyUse(Value* use) const { |
- return (input_use_list() == use) && |
- (use->next_use() == NULL) && |
- ((env_use_list() == NULL) || |
- ((env_use_list()->instruction() == use->instruction()) && |
- (env_use_list()->next_use() == NULL))); |
+ if ((input_use_list() != use) || (use->next_use() != NULL)) return false; |
+ |
+ Instruction* target = use->instruction(); |
+ for (Value::Iterator it(env_use_list()); !it.Done(); it.Advance()) { |
+ if (it.Current()->instruction() != target) return false; |
+ } |
+ return true; |
} |
@@ -1494,6 +1498,17 @@ void PhiInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
} |
+LocationSummary* RedefinitionInstr::MakeLocationSummary() const { |
+ UNREACHABLE(); |
+ return NULL; |
+} |
+ |
+ |
+void RedefinitionInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
+ UNREACHABLE(); |
+} |
+ |
+ |
LocationSummary* ParameterInstr::MakeLocationSummary() const { |
UNREACHABLE(); |
return NULL; |