Changes in directory llvm/lib/Transforms/Scalar:
PredicateSimplifier.cpp updated: 1.44 -> 1.45 --- Log message: Clean up logic after ConstantBool removal. --- Diffs of the changes: (+14 -20) PredicateSimplifier.cpp | 34 ++++++++++++++-------------------- 1 files changed, 14 insertions(+), 20 deletions(-) Index: llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp diff -u llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp:1.44 llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp:1.45 --- llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp:1.44 Thu Jan 11 12:21:29 2007 +++ llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp Thu Jan 11 18:02:12 2007 @@ -432,11 +432,8 @@ NodeMap.insert(std::lower_bound(NodeMap.begin(), NodeMap.end(), MapEntry), MapEntry); -#if 1 - // This is the missing piece to turn on VRP. if (Constant *C = dyn_cast<Constant>(V)) initializeConstant(C, MapEntry.index); -#endif return MapEntry.index; } @@ -1127,14 +1124,12 @@ Value *RHS = Op1; if (!isa<Constant>(LHS)) std::swap(LHS, RHS); - ConstantInt *CB, *A; - if ((CB = dyn_cast<ConstantInt>(Canonical)) && - CB->getType() == Type::Int1Ty) { - if ((A = dyn_cast<ConstantInt>(LHS)) && - A->getType() == Type::Int1Ty) - add(RHS, ConstantInt::get(A->getBoolValue() ^ - CB->getBoolValue()), - ICmpInst::ICMP_EQ, NewContext); + if (ConstantInt *CI = dyn_cast<ConstantInt>(Canonical)) { + if (ConstantInt *Arg = dyn_cast<ConstantInt>(LHS)) { + add(RHS, ConstantInt::get(CI->getType(), CI->getZExtValue() ^ + Arg->getZExtValue()), + ICmpInst::ICMP_EQ, NewContext); + } } if (Canonical == LHS) { if (isa<ConstantInt>(Canonical)) @@ -1238,21 +1233,18 @@ case Instruction::Or: case Instruction::Add: case Instruction::Sub: - add(Unknown, Constant::getNullValue(Ty), ICmpInst::ICMP_EQ, NewContext); + add(Unknown, Constant::getNullValue(Ty), ICmpInst::ICMP_EQ, + NewContext); break; case Instruction::UDiv: case Instruction::SDiv: if (Unknown == Op0) break; // otherwise, fallthrough case Instruction::And: case Instruction::Mul: - Constant *One = NULL; - if (isa<ConstantInt>(Unknown)) - One = ConstantInt::get(Ty, 1); - else if (isa<ConstantInt>(Unknown) && - Unknown->getType() == Type::Int1Ty) - One = ConstantInt::getTrue(); - - if (One) add(Unknown, One, ICmpInst::ICMP_EQ, NewContext); + if (isa<ConstantInt>(Unknown)) { + Constant *One = ConstantInt::get(Ty, 1); + add(Unknown, One, ICmpInst::ICMP_EQ, NewContext); + } break; } } @@ -1274,6 +1266,8 @@ add(IC, ConstantInt::getFalse(), ICmpInst::ICMP_EQ, NewContext); } + // TODO: "bool %x s<u> %y" implies %x = true and %y = false. + // TODO: make the predicate more strict, if possible. } else if (SelectInst *SI = dyn_cast<SelectInst>(I)) { _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits