diff options
author | Reid Spencer <rspencer@reidspencer.com> | 2007-03-19 20:58:18 +0000 |
---|---|---|
committer | Reid Spencer <rspencer@reidspencer.com> | 2007-03-19 20:58:18 +0000 |
commit | 5a1e3e1a7d08b1baaf8971be69e2c8862a581985 (patch) | |
tree | d485d89ca3bb7c72ea5373fdcf95e95b7d44ee60 | |
parent | 8439bc8d69d687918831927ca34e75497a95c59a (diff) | |
download | external_llvm-5a1e3e1a7d08b1baaf8971be69e2c8862a581985.zip external_llvm-5a1e3e1a7d08b1baaf8971be69e2c8862a581985.tar.gz external_llvm-5a1e3e1a7d08b1baaf8971be69e2c8862a581985.tar.bz2 |
1. Use APInt::getSignBit to reduce clutter (patch by Sheng Zhou)
2. Replace uses of the "isPositive" utility function with APInt::isPositive
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35185 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Transforms/Scalar/InstructionCombining.cpp | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/lib/Transforms/Scalar/InstructionCombining.cpp b/lib/Transforms/Scalar/InstructionCombining.cpp index 38b05b5..e38622a 100644 --- a/lib/Transforms/Scalar/InstructionCombining.cpp +++ b/lib/Transforms/Scalar/InstructionCombining.cpp @@ -2760,7 +2760,7 @@ FoundSExt: // highest order bit set. static bool isSignBit(ConstantInt *CI) { unsigned NumBits = CI->getType()->getPrimitiveSizeInBits(); - return (CI->getZExtValue() & (~0ULL >> (64-NumBits))) == (1ULL << (NumBits-1)); + return CI->getValue() == APInt::getSignBit(NumBits); } Instruction *InstCombiner::visitSub(BinaryOperator &I) { @@ -4925,10 +4925,6 @@ Instruction *InstCombiner::visitXor(BinaryOperator &I) { return Changed ? &I : 0; } -static bool isPositive(ConstantInt *C) { - return C->getSExtValue() >= 0; -} - /// AddWithOverflow - Compute Result = In1+In2, returning true if the result /// overflowed for this type. static bool AddWithOverflow(ConstantInt *&Result, ConstantInt *In1, @@ -5707,12 +5703,12 @@ Instruction *InstCombiner::visitICmpInst(ICmpInst &I) { LoBound = Prod; LoOverflow = ProdOV; HiOverflow = ProdOV || AddWithOverflow(HiBound, LoBound, DivRHS); - } else if (isPositive(DivRHS)) { // Divisor is > 0. + } else if (DivRHS->getValue().isPositive()) { // Divisor is > 0. if (CI->isNullValue()) { // (X / pos) op 0 // Can't overflow. LoBound = cast<ConstantInt>(ConstantExpr::getNeg(SubOne(DivRHS))); HiBound = DivRHS; - } else if (isPositive(CI)) { // (X / pos) op pos + } else if (CI->getValue().isPositive()) { // (X / pos) op pos LoBound = Prod; LoOverflow = ProdOV; HiOverflow = ProdOV || AddWithOverflow(HiBound, Prod, DivRHS); @@ -5729,7 +5725,7 @@ Instruction *InstCombiner::visitICmpInst(ICmpInst &I) { HiBound = cast<ConstantInt>(ConstantExpr::getNeg(DivRHS)); if (HiBound == DivRHS) LoBound = 0; // - INTMIN = INTMIN - } else if (isPositive(CI)) { // (X / neg) op pos + } else if (CI->getValue().isPositive()) { // (X / neg) op pos HiOverflow = LoOverflow = ProdOV; if (!LoOverflow) LoOverflow = AddWithOverflow(LoBound, Prod, AddOne(DivRHS)); |