aboutsummaryrefslogtreecommitdiff
path: root/lib/Transforms/Scalar/PredicateSimplifier.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2006-09-28 23:35:22 +0000
committerChris Lattner <sabre@nondot.org>2006-09-28 23:35:22 +0000
commit47811b76ca92ddfebdd73c633d04ba8a4f5b7b59 (patch)
tree3c7b9b20902cda17bf25711def4c18f5fea2fbd0 /lib/Transforms/Scalar/PredicateSimplifier.cpp
parent850ba99cb6fe5b7c70eb81103441d1fe123d6291 (diff)
Eliminate ConstantBool::True and ConstantBool::False. Instead, provide
ConstantBool::getTrue() and ConstantBool::getFalse(). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30665 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Scalar/PredicateSimplifier.cpp')
-rw-r--r--lib/Transforms/Scalar/PredicateSimplifier.cpp73
1 files changed, 33 insertions, 40 deletions
diff --git a/lib/Transforms/Scalar/PredicateSimplifier.cpp b/lib/Transforms/Scalar/PredicateSimplifier.cpp
index 04755de79c..715818c686 100644
--- a/lib/Transforms/Scalar/PredicateSimplifier.cpp
+++ b/lib/Transforms/Scalar/PredicateSimplifier.cpp
@@ -315,51 +315,47 @@ namespace {
if (BinaryOperator *BO = dyn_cast<BinaryOperator>(V2)) {
switch (BO->getOpcode()) {
case Instruction::SetEQ:
- if (V1 == ConstantBool::True)
- add(Opcode, BO->getOperand(0), BO->getOperand(1), false);
- if (V1 == ConstantBool::False)
- add(Opcode, BO->getOperand(0), BO->getOperand(1), true);
+ if (ConstantBool *V1CB = dyn_cast<ConstantBool>(V1))
+ add(Opcode, BO->getOperand(0), BO->getOperand(1),!V1CB->getValue());
break;
case Instruction::SetNE:
- if (V1 == ConstantBool::True)
- add(Opcode, BO->getOperand(0), BO->getOperand(1), true);
- if (V1 == ConstantBool::False)
- add(Opcode, BO->getOperand(0), BO->getOperand(1), false);
+ if (ConstantBool *V1CB = dyn_cast<ConstantBool>(V1))
+ add(Opcode, BO->getOperand(0), BO->getOperand(1), V1CB->getValue());
break;
case Instruction::SetLT:
case Instruction::SetGT:
- if (V1 == ConstantBool::True)
+ if (V1 == ConstantBool::getTrue())
add(Opcode, BO->getOperand(0), BO->getOperand(1), true);
break;
case Instruction::SetLE:
case Instruction::SetGE:
- if (V1 == ConstantBool::False)
+ if (V1 == ConstantBool::getFalse())
add(Opcode, BO->getOperand(0), BO->getOperand(1), true);
break;
case Instruction::And:
- if (V1 == ConstantBool::True) {
- add(Opcode, ConstantBool::True, BO->getOperand(0), false);
- add(Opcode, ConstantBool::True, BO->getOperand(1), false);
+ if (V1 == ConstantBool::getTrue()) {
+ add(Opcode, V1, BO->getOperand(0), false);
+ add(Opcode, V1, BO->getOperand(1), false);
}
break;
case Instruction::Or:
- if (V1 == ConstantBool::False) {
- add(Opcode, ConstantBool::False, BO->getOperand(0), false);
- add(Opcode, ConstantBool::False, BO->getOperand(1), false);
+ if (V1 == ConstantBool::getFalse()) {
+ add(Opcode, V1, BO->getOperand(0), false);
+ add(Opcode, V1, BO->getOperand(1), false);
}
break;
case Instruction::Xor:
- if (V1 == ConstantBool::True) {
- if (BO->getOperand(0) == ConstantBool::True)
- add(Opcode, ConstantBool::False, BO->getOperand(1), false);
- if (BO->getOperand(1) == ConstantBool::True)
- add(Opcode, ConstantBool::False, BO->getOperand(0), false);
+ if (V1 == ConstantBool::getTrue()) {
+ if (BO->getOperand(0) == V1)
+ add(Opcode, ConstantBool::getFalse(), BO->getOperand(1), false);
+ if (BO->getOperand(1) == V1)
+ add(Opcode, ConstantBool::getFalse(), BO->getOperand(0), false);
}
- if (V1 == ConstantBool::False) {
- if (BO->getOperand(0) == ConstantBool::True)
- add(Opcode, ConstantBool::True, BO->getOperand(1), false);
- if (BO->getOperand(1) == ConstantBool::True)
- add(Opcode, ConstantBool::True, BO->getOperand(0), false);
+ if (V1 == ConstantBool::getFalse()) {
+ if (BO->getOperand(0) == ConstantBool::getTrue())
+ add(Opcode, ConstantBool::getTrue(), BO->getOperand(1), false);
+ if (BO->getOperand(1) == ConstantBool::getTrue())
+ add(Opcode, ConstantBool::getTrue(), BO->getOperand(0), false);
}
break;
default:
@@ -368,10 +364,8 @@ namespace {
} else if (SelectInst *SI = dyn_cast<SelectInst>(V2)) {
if (Opcode != EQ && Opcode != NE) return;
- ConstantBool *True = (Opcode==EQ) ? ConstantBool::True
- : ConstantBool::False,
- *False = (Opcode==EQ) ? ConstantBool::False
- : ConstantBool::True;
+ ConstantBool *True = ConstantBool::get(Opcode==EQ),
+ *False = ConstantBool::get(Opcode!=EQ);
if (V1 == SI->getTrueValue())
addEqual(SI->getCondition(), True);
@@ -525,8 +519,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 ConstantBool::getFalse();
+ case Instruction::SetNE: return ConstantBool::getTrue();
case Instruction::SetLE:
case Instruction::SetGE:
case Instruction::SetLT:
@@ -558,10 +552,9 @@ Value *PredicateSimplifier::resolve(BinaryOperator *BO,
Value *PredicateSimplifier::resolve(SelectInst *SI, const PropertySet &KP) {
Value *Condition = resolve(SI->getCondition(), KP);
- if (Condition == ConstantBool::True)
- return resolve(SI->getTrueValue(), KP);
- else if (Condition == ConstantBool::False)
- return resolve(SI->getFalseValue(), KP);
+ if (ConstantBool *CB = dyn_cast<ConstantBool>(Condition))
+ return resolve(CB->getValue() ? SI->getTrueValue() : SI->getFalseValue(),
+ KP);
return SI;
}
@@ -674,10 +667,10 @@ void PredicateSimplifier::visit(BranchInst *BI, PropertySet &KP) {
BasicBlock *TrueDest = BI->getSuccessor(0),
*FalseDest = BI->getSuccessor(1);
- if (Condition == ConstantBool::True || TrueDest == FalseDest) {
+ if (Condition == ConstantBool::getTrue() || TrueDest == FalseDest) {
proceedToSuccessors(KP, BB);
return;
- } else if (Condition == ConstantBool::False) {
+ } else if (Condition == ConstantBool::getFalse()) {
proceedToSuccessors(KP, BB);
return;
}
@@ -686,14 +679,14 @@ void PredicateSimplifier::visit(BranchInst *BI, PropertySet &KP) {
for (DTNodeType::iterator I = Node->begin(), E = Node->end(); I != E; ++I) {
if ((*I)->getBlock() == TrueDest) {
PropertySet TrueProperties(KP);
- TrueProperties.addEqual(ConstantBool::True, Condition);
+ TrueProperties.addEqual(ConstantBool::getTrue(), Condition);
proceedToSuccessor(BI, 0, KP, TrueProperties);
continue;
}
if ((*I)->getBlock() == FalseDest) {
PropertySet FalseProperties(KP);
- FalseProperties.addEqual(ConstantBool::False, Condition);
+ FalseProperties.addEqual(ConstantBool::getFalse(), Condition);
proceedToSuccessor(BI, 1, KP, FalseProperties);
continue;
}