diff options
| author | 2015-03-31 09:39:06 +0000 | |
|---|---|---|
| committer | 2015-03-31 09:39:07 +0000 | |
| commit | 8eeecbc50b5f6f569b4d6d1a141624f0018ffb2d (patch) | |
| tree | d362e568c8d0261e8a0db3b543d767a35c54a0a7 /compiler/optimizing | |
| parent | e684224201233ed35e15c3df8944bd3444984edf (diff) | |
| parent | 2846b6810e196a1b25bf2d1b5cbe73dee4a2b286 (diff) | |
Merge "ART: General-case negation in boolean simplifier"
Diffstat (limited to 'compiler/optimizing')
| -rw-r--r-- | compiler/optimizing/boolean_simplifier.cc | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/compiler/optimizing/boolean_simplifier.cc b/compiler/optimizing/boolean_simplifier.cc index ab77505b6f..be432c5a20 100644 --- a/compiler/optimizing/boolean_simplifier.cc +++ b/compiler/optimizing/boolean_simplifier.cc @@ -59,7 +59,8 @@ static HInstruction* GetOppositeCondition(HInstruction* cond) { return new (allocator) HGreaterThan(lhs, rhs); } else if (cond->IsGreaterThan()) { return new (allocator) HLessThanOrEqual(lhs, rhs); - } else if (cond->IsGreaterThanOrEqual()) { + } else { + DCHECK(cond->IsGreaterThanOrEqual()); return new (allocator) HLessThan(lhs, rhs); } } else if (cond->IsIntConstant()) { @@ -70,10 +71,11 @@ static HInstruction* GetOppositeCondition(HInstruction* cond) { DCHECK(int_const->IsOne()); return graph->GetIntConstant(0); } + } else { + // General case when 'cond' is another instruction of type boolean. + // Negate with 'cond == 0'. + return new (allocator) HEqual(cond, graph->GetIntConstant(0)); } - - // TODO: b/19992954 - return nullptr; } void HBooleanSimplifier::Run() { @@ -105,10 +107,6 @@ void HBooleanSimplifier::Run() { HInstruction* replacement; if (NegatesCondition(true_value, false_value)) { replacement = GetOppositeCondition(if_condition); - if (replacement == nullptr) { - // Something we could not handle. - continue; - } if (replacement->GetBlock() == nullptr) { block->InsertInstructionBefore(replacement, if_instruction); } |