diff options
author | Nick Lewycky <nicholas@mxc.ca> | 2006-09-20 23:02:24 +0000 |
---|---|---|
committer | Nick Lewycky <nicholas@mxc.ca> | 2006-09-20 23:02:24 +0000 |
commit | af2f1fe94e3d2b2769550740db02b613ec24e43d (patch) | |
tree | 3eaa1c2e6882d5c436f4f2284434181e31b1c0ed /lib/Transforms/Scalar/PredicateSimplifier.cpp | |
parent | f824868ed9d2cc756a797f6dbd67732f75e31cd6 (diff) |
Once we're down to "setcc type constant1, constant2", at least come up
with the right answer.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30550 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Scalar/PredicateSimplifier.cpp')
-rw-r--r-- | lib/Transforms/Scalar/PredicateSimplifier.cpp | 32 |
1 files changed, 14 insertions, 18 deletions
diff --git a/lib/Transforms/Scalar/PredicateSimplifier.cpp b/lib/Transforms/Scalar/PredicateSimplifier.cpp index 8dc1a4d7d0..f57c0d94d2 100644 --- a/lib/Transforms/Scalar/PredicateSimplifier.cpp +++ b/lib/Transforms/Scalar/PredicateSimplifier.cpp @@ -524,6 +524,9 @@ Value *PredicateSimplifier::resolve(SetCondInst *SCI, const PropertySet &KP) { // Attempt to resolve the SetCondInst to a boolean. + static ConstantBool *True = ConstantBool::True, + *False = ConstantBool::False; + Value *SCI0 = resolve(SCI->getOperand(0), KP), *SCI1 = resolve(SCI->getOperand(1), KP); @@ -536,10 +539,8 @@ Value *PredicateSimplifier::resolve(SetCondInst *SCI, if (NE != KP.Properties.end()) { switch (SCI->getOpcode()) { - case Instruction::SetEQ: - return ConstantBool::False; - case Instruction::SetNE: - return ConstantBool::True; + case Instruction::SetEQ: return False; + case Instruction::SetNE: return True; case Instruction::SetLE: case Instruction::SetGE: case Instruction::SetLT: @@ -553,25 +554,20 @@ Value *PredicateSimplifier::resolve(SetCondInst *SCI, return SCI; } + uint64_t I1 = CI1->getRawValue(), I2 = CI2->getRawValue(); switch(SCI->getOpcode()) { - case Instruction::SetLE: - case Instruction::SetGE: - case Instruction::SetEQ: - if (CI1->getRawValue() == CI2->getRawValue()) - return ConstantBool::True; - else - return ConstantBool::False; - case Instruction::SetLT: - case Instruction::SetGT: - case Instruction::SetNE: - if (CI1->getRawValue() == CI2->getRawValue()) - return ConstantBool::False; - else - return ConstantBool::True; + case Instruction::SetLE: if (I1 <= I2) return True; else return False; + case Instruction::SetGE: if (I1 >= I2) return True; else return False; + case Instruction::SetEQ: if (I1 == I2) return True; else return False; + case Instruction::SetLT: if (I1 < I2) return True; else return False; + case Instruction::SetGT: if (I1 > I2) return True; else return False; + case Instruction::SetNE: if (I1 != I2) return True; else return False; default: assert(0 && "Unknown opcode in SetContInst."); break; } + + return SCI; } Value *PredicateSimplifier::resolve(BinaryOperator *BO, |