From: Chris Lattner Date: Thu, 18 Jan 2007 22:16:33 +0000 (+0000) Subject: Fix InstCombine/2007-01-18-VectorInfLoop.ll, a case where instcombine X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=696ee0ab15bf300444423bc3a6b29313a94232c3;p=oota-llvm.git Fix InstCombine/2007-01-18-VectorInfLoop.ll, a case where instcombine infinitely loops. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33343 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/Scalar/InstructionCombining.cpp b/lib/Transforms/Scalar/InstructionCombining.cpp index 48eaef59e72..324ec8aac04 100644 --- a/lib/Transforms/Scalar/InstructionCombining.cpp +++ b/lib/Transforms/Scalar/InstructionCombining.cpp @@ -3062,10 +3062,16 @@ Instruction *InstCombiner::visitAnd(BinaryOperator &I) { // See if we can simplify any instructions used by the instruction whose sole // purpose is to compute bits we don't care about. uint64_t KnownZero, KnownOne; - if (!isa(I.getType()) && - SimplifyDemandedBits(&I, I.getType()->getIntegerTypeMask(), - KnownZero, KnownOne)) + if (!isa(I.getType())) { + if (SimplifyDemandedBits(&I, I.getType()->getIntegerTypeMask(), + KnownZero, KnownOne)) return &I; + } else { + if (ConstantPacked *CP = dyn_cast(Op1)) { + if (CP->isAllOnesValue()) + return ReplaceInstUsesWith(I, I.getOperand(0)); + } + } if (ConstantInt *AndRHS = dyn_cast(Op1)) { uint64_t AndRHSMask = AndRHS->getZExtValue();