[llvm] r354144 - [InstCombine] fix crash while trying to narrow a binop of shuffles (PR40734)

Hans Wennborg via llvm-commits llvm-commits at lists.llvm.org
Mon Feb 18 02:22:44 PST 2019


Merged to release_80 in r354252.

On Fri, Feb 15, 2019 at 5:31 PM Sanjay Patel via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
>
> Author: spatel
> Date: Fri Feb 15 08:31:55 2019
> New Revision: 354144
>
> URL: http://llvm.org/viewvc/llvm-project?rev=354144&view=rev
> Log:
> [InstCombine] fix crash while trying to narrow a binop of shuffles (PR40734)
>
> https://bugs.llvm.org/show_bug.cgi?id=40734
>
> Modified:
>     llvm/trunk/lib/Transforms/InstCombine/InstructionCombining.cpp
>     llvm/trunk/test/Transforms/InstCombine/vec_shuffle.ll
>
> Modified: llvm/trunk/lib/Transforms/InstCombine/InstructionCombining.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstructionCombining.cpp?rev=354144&r1=354143&r2=354144&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Transforms/InstCombine/InstructionCombining.cpp (original)
> +++ llvm/trunk/lib/Transforms/InstCombine/InstructionCombining.cpp Fri Feb 15 08:31:55 2019
> @@ -1375,7 +1375,8 @@ Instruction *InstCombiner::foldVectorBin
>    if (match(LHS, m_ShuffleVector(m_Value(L0), m_Value(L1), m_Constant(Mask))) &&
>        match(RHS, m_ShuffleVector(m_Value(R0), m_Value(R1), m_Specific(Mask))) &&
>        LHS->hasOneUse() && RHS->hasOneUse() &&
> -      cast<ShuffleVectorInst>(LHS)->isConcat()) {
> +      cast<ShuffleVectorInst>(LHS)->isConcat() &&
> +      cast<ShuffleVectorInst>(RHS)->isConcat()) {
>      // This transform does not have the speculative execution constraint as
>      // below because the shuffle is a concatenation. The new binops are
>      // operating on exactly the same elements as the existing binop.
>
> Modified: llvm/trunk/test/Transforms/InstCombine/vec_shuffle.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/vec_shuffle.ll?rev=354144&r1=354143&r2=354144&view=diff
> ==============================================================================
> --- llvm/trunk/test/Transforms/InstCombine/vec_shuffle.ll (original)
> +++ llvm/trunk/test/Transforms/InstCombine/vec_shuffle.ll Fri Feb 15 08:31:55 2019
> @@ -1125,3 +1125,18 @@ define <2 x float> @frem_splat_constant1
>    ret <2 x float> %r
>  }
>
> +; Equivalent shuffle masks, but only one is a narrowing op.
> +
> +define <2 x i1> @PR40734(<1 x i1> %x, <4 x i1> %y) {
> +; CHECK-LABEL: @PR40734(
> +; CHECK-NEXT:    [[WIDEN:%.*]] = shufflevector <1 x i1> zeroinitializer, <1 x i1> [[X:%.*]], <2 x i32> <i32 0, i32 1>
> +; CHECK-NEXT:    [[NARROW:%.*]] = shufflevector <4 x i1> [[Y:%.*]], <4 x i1> undef, <2 x i32> <i32 0, i32 1>
> +; CHECK-NEXT:    [[R:%.*]] = and <2 x i1> [[WIDEN]], [[NARROW]]
> +; CHECK-NEXT:    ret <2 x i1> [[R]]
> +;
> +  %widen = shufflevector <1 x i1> zeroinitializer, <1 x i1> %x, <2 x i32> <i32 0, i32 1>
> +  %narrow = shufflevector <4 x i1> %y, <4 x i1> undef, <2 x i32> <i32 0, i32 1>
> +  %r = and <2 x i1> %widen, %narrow
> +  ret <2 x i1> %r
> +}
> +
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list