Handle "if ((x|y) != 0)" for ints like we do for bools. Fixes missed

optimization opportunity pointed out by Chris Lattner.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31118 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Nick Lewycky
2006-10-22 21:36:41 +00:00
parent 96f5362ff2
commit 5062250f36
2 changed files with 34 additions and 10 deletions
+13 -10
View File
@@ -334,32 +334,35 @@ namespace {
if (V1 == ConstantBool::getFalse())
add(Opcode, BO->getOperand(0), BO->getOperand(1), true);
break;
case Instruction::And:
if (V1 == ConstantBool::getTrue()) {
case Instruction::And: {
ConstantIntegral *CI = dyn_cast<ConstantIntegral>(V1);
if (CI && CI->isAllOnesValue()) {
add(Opcode, V1, BO->getOperand(0), false);
add(Opcode, V1, BO->getOperand(1), false);
}
break;
case Instruction::Or:
if (V1 == ConstantBool::getFalse()) {
} break;
case Instruction::Or: {
ConstantIntegral *CI = dyn_cast<ConstantIntegral>(V1);
if (CI && CI->isNullValue()) {
add(Opcode, V1, BO->getOperand(0), false);
add(Opcode, V1, BO->getOperand(1), false);
}
break;
case Instruction::Xor:
if (V1 == ConstantBool::getTrue()) {
} break;
case Instruction::Xor: {
ConstantIntegral *CI = dyn_cast<ConstantIntegral>(V1);
if (CI->isAllOnesValue()) {
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::getFalse()) {
if (CI->isNullValue()) {
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;
} break;
default:
break;
}