Revert "ART: Try to statically evaluate some conditions."
CL has an unwanted 10-15% compile-time impact.
This reverts commit 1de1e11ac90db9fad8916ac43d43714ccb8d978f.
Change-Id: I76b45aa95bbd24dd025d2ee6cf37d77fe17b8497
diff --git a/compiler/optimizing/instruction_simplifier.cc b/compiler/optimizing/instruction_simplifier.cc
index 4c98d83..4c18e16 100644
--- a/compiler/optimizing/instruction_simplifier.cc
+++ b/compiler/optimizing/instruction_simplifier.cc
@@ -994,27 +994,6 @@
instruction->GetBlock()->SwapSuccessors();
RecordSimplification();
}
- HInstruction* input = instruction->InputAt(0);
-
- // If a condition 'cond' is evaluated in an HIf instruction then in the successors of the
- // IF_BLOCK we statically know the value of the condition (TRUE in TRUE_SUCC, FALSE in
- // FALSE_SUCC). Using that we can replace another evaluation (use) EVAL of the same 'cond'
- // with TRUE value (FALSE value) if every path from the ENTRY_BLOCK to EVAL_BLOCK contains the
- // edge HIF_BLOCK->TRUE_SUCC (HIF_BLOCK->FALSE_SUCC).
- if (!input->IsConstant()) {
- HBasicBlock* true_succ = instruction->IfTrueSuccessor();
- HBasicBlock* false_succ = instruction->IfFalseSuccessor();
-
- DCHECK_EQ(true_succ->GetPredecessors().size(), 1u);
- input->ReplaceUsesDominatedBy(
- true_succ->GetFirstInstruction(), GetGraph()->GetIntConstant(1), /* strictly */ false);
- RecordSimplification();
-
- DCHECK_EQ(false_succ->GetPredecessors().size(), 1u);
- input->ReplaceUsesDominatedBy(
- false_succ->GetFirstInstruction(), GetGraph()->GetIntConstant(0), /* strictly */ false);
- RecordSimplification();
- }
}
void InstructionSimplifierVisitor::VisitArrayLength(HArrayLength* instruction) {
diff --git a/compiler/optimizing/nodes.cc b/compiler/optimizing/nodes.cc
index dda0243..fa580d9 100644
--- a/compiler/optimizing/nodes.cc
+++ b/compiler/optimizing/nodes.cc
@@ -1110,10 +1110,10 @@
return true;
}
-bool HInstruction::Dominates(HInstruction* other_instruction, bool strictly) const {
+bool HInstruction::StrictlyDominates(HInstruction* other_instruction) const {
if (other_instruction == this) {
// An instruction does not strictly dominate itself.
- return !strictly;
+ return false;
}
HBasicBlock* block = GetBlock();
HBasicBlock* other_block = other_instruction->GetBlock();
@@ -1147,10 +1147,6 @@
}
}
-bool HInstruction::StrictlyDominates(HInstruction* other_instruction) const {
- return Dominates(other_instruction, /* strictly */ true);
-}
-
void HInstruction::RemoveEnvironment() {
RemoveEnvironmentUses(this);
environment_ = nullptr;
@@ -1173,16 +1169,14 @@
DCHECK(env_uses_.empty());
}
-void HInstruction::ReplaceUsesDominatedBy(HInstruction* dominator,
- HInstruction* replacement,
- bool strictly) {
+void HInstruction::ReplaceUsesDominatedBy(HInstruction* dominator, HInstruction* replacement) {
const HUseList<HInstruction*>& uses = GetUses();
for (auto it = uses.begin(), end = uses.end(); it != end; /* ++it below */) {
HInstruction* user = it->GetUser();
size_t index = it->GetIndex();
// Increment `it` now because `*it` may disappear thanks to user->ReplaceInput().
++it;
- if (dominator->Dominates(user, strictly)) {
+ if (dominator->StrictlyDominates(user)) {
user->ReplaceInput(replacement, index);
}
}
diff --git a/compiler/optimizing/nodes.h b/compiler/optimizing/nodes.h
index 07ab325..66d5bfe 100644
--- a/compiler/optimizing/nodes.h
+++ b/compiler/optimizing/nodes.h
@@ -2098,13 +2098,9 @@
return IsRemovable() && !HasUses();
}
- // Does this instruction dominate (strictly or in regular sense depending on 'strictly')
- // `other_instruction`?
- // Returns '!strictly' if this instruction and `other_instruction` are the same.
+ // Does this instruction strictly dominate `other_instruction`?
+ // Returns false if this instruction and `other_instruction` are the same.
// Aborts if this instruction and `other_instruction` are both phis.
- bool Dominates(HInstruction* other_instruction, bool strictly) const;
-
- // Return 'Dominates(other_instruction, /*strictly*/ true)'.
bool StrictlyDominates(HInstruction* other_instruction) const;
int GetId() const { return id_; }
@@ -2165,13 +2161,7 @@
void SetLocations(LocationSummary* locations) { locations_ = locations; }
void ReplaceWith(HInstruction* instruction);
-
- // Replace all uses of the instruction which are dominated by 'dominator' with 'replacement'.
- // 'strictly' determines whether strict or regular domination relation should be checked.
- void ReplaceUsesDominatedBy(HInstruction* dominator,
- HInstruction* replacement,
- bool strictly = true);
-
+ void ReplaceUsesDominatedBy(HInstruction* dominator, HInstruction* replacement);
void ReplaceInput(HInstruction* replacement, size_t index);
// This is almost the same as doing `ReplaceWith()`. But in this helper, the