[llvm] r320270 - [InstCombine] Fix SimplifyDemandedUseBits SHL handling (PR35515)

Davide Italiano via llvm-commits llvm-commits at lists.llvm.org
Sat Dec 9 18:08:52 PST 2017


On Sat, Dec 9, 2017 at 3:42 PM, Simon Pilgrim via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
> Author: rksimon
> Date: Sat Dec  9 15:42:56 2017
> New Revision: 320270
>
> URL: http://llvm.org/viewvc/llvm-project?rev=320270&view=rev
> Log:
> [InstCombine] Fix SimplifyDemandedUseBits SHL handling (PR35515)
>
> Don't assume that the pattern matched SRL can be cast to an Instruction (might be ConstExpr etc.)
>
> Added:
>     llvm/trunk/test/Transforms/InstCombine/pr35515.ll
> Modified:
>     llvm/trunk/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp
>
> Modified: llvm/trunk/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp?rev=320270&r1=320269&r2=320270&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp (original)
> +++ llvm/trunk/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp Sat Dec  9 15:42:56 2017
> @@ -435,12 +435,11 @@ Value *InstCombiner::SimplifyDemandedUse
>      const APInt *SA;
>      if (match(I->getOperand(1), m_APInt(SA))) {
>        const APInt *ShrAmt;
> -      if (match(I->getOperand(0), m_Shr(m_Value(), m_APInt(ShrAmt)))) {
> -        Instruction *Shr = cast<Instruction>(I->getOperand(0));
> -        if (Value *R = simplifyShrShlDemandedBits(
> -                Shr, *ShrAmt, I, *SA, DemandedMask, Known))
> -          return R;
> -      }
> +      if (match(I->getOperand(0), m_Shr(m_Value(), m_APInt(ShrAmt))))
> +        if (Instruction *Shr = dyn_cast<Instruction>(I->getOperand(0)))
> +          if (Value *R = simplifyShrShlDemandedBits(Shr, *ShrAmt, I, *SA,
> +                                                    DemandedMask, Known))
> +            return R;
>
>        uint64_t ShiftAmt = SA->getLimitedValue(BitWidth-1);
>        APInt DemandedMaskIn(DemandedMask.lshr(ShiftAmt));
>
> Added: llvm/trunk/test/Transforms/InstCombine/pr35515.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/pr35515.ll?rev=320270&view=auto
> ==============================================================================
> --- llvm/trunk/test/Transforms/InstCombine/pr35515.ll (added)
> +++ llvm/trunk/test/Transforms/InstCombine/pr35515.ll Sat Dec  9 15:42:56 2017
> @@ -0,0 +1,20 @@
> +; RUN: opt -S -instcombine < %s | FileCheck %s
> +
> + at g_40 = external global i8, align 2
> + at g_461 = external global [6 x i8], align 2
> + at g_49 = external local_unnamed_addr global { i8, i8, i8, i8, i8 }, align 2
> +
> +; CHECK-LABEL: @func_24(

May want to add the output of opt for this in case somebody changes
this pattern in the future, but, really, up to you.

--
Davide


More information about the llvm-commits mailing list