Combine not (not X) -> X

llvm-svn: 2493
This commit is contained in:
Chris Lattner 2002-05-06 17:03:21 +00:00
parent 679da03275
commit 5d6bec5e26
1 changed files with 14 additions and 1 deletions

View File

@ -57,7 +57,7 @@ namespace {
// I - Change was made, I is still valid
// otherwise - Change was made, replace I with returned instruction
//
Instruction *visitNot(UnaryOperator *I);
Instruction *visitAdd(BinaryOperator *I);
Instruction *visitSub(BinaryOperator *I);
Instruction *visitMul(BinaryOperator *I);
@ -78,6 +78,19 @@ namespace {
}
Instruction *InstCombiner::visitNot(UnaryOperator *I) {
if (I->use_empty()) return 0; // Don't fix dead instructions...
// not (not X) = X
if (Instruction *Op = dyn_cast<Instruction>(I->getOperand(0)))
if (Op->getOpcode() == Instruction::Not) {
AddUsesToWorkList(I); // Add all modified instrs to worklist
I->replaceAllUsesWith(Op->getOperand(0));
return I;
}
return 0;
}
// Make sure that this instruction has a constant on the right hand side if it
// has any constant arguments. If not, fix it an return true.