From 3ac9e109b24eaae482eb914d970ba7980f462925 Mon Sep 17 00:00:00 2001 From: Nick Lewycky Date: Sat, 12 Jul 2008 05:04:38 +0000 Subject: Enhance analysis of srem. Remove dead code analyzing urem. 'urem' of power-of-2 is canonicalized to an 'and' instruction. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53506 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Scalar/InstructionCombining.cpp | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) (limited to 'lib/Transforms') diff --git a/lib/Transforms/Scalar/InstructionCombining.cpp b/lib/Transforms/Scalar/InstructionCombining.cpp index 5864a62677..20580e30ab 100644 --- a/lib/Transforms/Scalar/InstructionCombining.cpp +++ b/lib/Transforms/Scalar/InstructionCombining.cpp @@ -1254,6 +1254,9 @@ bool InstCombiner::SimplifyDemandedBits(Value *V, APInt DemandedMask, if (ConstantInt *Rem = dyn_cast(I->getOperand(1))) { APInt RA = Rem->getValue(); if (RA.isPowerOf2() || (-RA).isPowerOf2()) { + if (DemandedMask.ule(RA)) // srem won't affect demanded bits + return UpdateValueUsesWith(I, I->getOperand(0)); + APInt LowBits = RA.isStrictlyPositive() ? (RA - 1) : ~RA; APInt Mask2 = LowBits | APInt::getSignBit(BitWidth); if (SimplifyDemandedBits(I->getOperand(0), Mask2, @@ -1273,21 +1276,6 @@ bool InstCombiner::SimplifyDemandedBits(Value *V, APInt DemandedMask, } break; case Instruction::URem: { - if (ConstantInt *Rem = dyn_cast(I->getOperand(1))) { - APInt RA = Rem->getValue(); - if (RA.isPowerOf2()) { - APInt LowBits = (RA - 1); - APInt Mask2 = LowBits & DemandedMask; - KnownZero |= ~LowBits & DemandedMask; - if (SimplifyDemandedBits(I->getOperand(0), Mask2, - KnownZero, KnownOne, Depth+1)) - return true; - - assert((KnownZero & KnownOne) == 0&&"Bits known to be one AND zero?"); - break; - } - } - APInt KnownZero2(BitWidth, 0), KnownOne2(BitWidth, 0); APInt AllOnes = APInt::getAllOnesValue(BitWidth); if (SimplifyDemandedBits(I->getOperand(0), AllOnes, -- cgit v1.2.3-70-g09d2