[llvm-bugs] [Bug 51858] New: [X86] Assertion failure in X86 shuffle combine

via llvm-bugs llvm-bugs at lists.llvm.org
Tue Sep 14 11:51:02 PDT 2021


https://bugs.llvm.org/show_bug.cgi?id=51858

            Bug ID: 51858
           Summary: [X86] Assertion failure in X86 shuffle combine
           Product: libraries
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: Backend: X86
          Assignee: unassignedbugs at nondot.org
          Reporter: nikita.ppv at gmail.com
                CC: craig.topper at gmail.com, llvm-bugs at lists.llvm.org,
                    llvm-dev at redking.me.uk, pengfei.wang at intel.com,
                    spatel+llvm at rotateright.com
            Blocks: 51236

define i8 @test(i128 %arg) {
  %vec = bitcast i128 %arg to <16 x i8>
  %red = tail call i8 @llvm.vector.reduce.mul.v16i8(<16 x i8> %vec) 
  ret i8 %red
} 

declare i8 @llvm.vector.reduce.mul.v16i8(<16 x i8>)

Not a vector MVT!
UNREACHABLE executed at
/home/nikic/llvm-project/llvm/include/llvm/Support/MachineValueType.h:686!
[...]
 #6 0x0000559214dc715c combineX86ShuffleChain(llvm::ArrayRef<llvm::SDValue>,
llvm::SDValue, llvm::ArrayRef<int>, int, bool, bool, bool, llvm::SelectionDAG&,
llvm::X86Subtarget const&) X86ISelLowering.cpp:0:0
 #7 0x0000559214e1cbbf
combineX86ShufflesRecursively(llvm::ArrayRef<llvm::SDValue>, int,
llvm::SDValue, llvm::ArrayRef<int>, llvm::ArrayRef<llvm::SDNode const*>,
unsigned int, unsigned int, bool, bool, bool, llvm::SelectionDAG&,
llvm::X86Subtarget const&) X86ISelLowering.cpp:0:0
 #8 0x0000559214e27181 combineX86ShufflesRecursively(llvm::SDValue,
llvm::SelectionDAG&, llvm::X86Subtarget const&) (.constprop.0)
X86ISelLowering.cpp:0:0
 #9 0x0000559214e2aceb combineEXTEND_VECTOR_INREG(llvm::SDNode*,
llvm::SelectionDAG&, llvm::TargetLowering::DAGCombinerInfo&, llvm::X86Subtarget
const&) X86ISelLowering.cpp:0:0

Note that the vector.reduce.mul is expanded in IR, so the actual input is this:

define i8 @test(i128 %arg) {
  %vec = bitcast i128 %arg to <16 x i8>
  %rdx.shuf = shufflevector <16 x i8> %vec, <16 x i8> poison, <16 x i32> <i32
8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef,
i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
  %bin.rdx = mul <16 x i8> %vec, %rdx.shuf
  %rdx.shuf1 = shufflevector <16 x i8> %bin.rdx, <16 x i8> poison, <16 x i32>
<i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32
undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32
undef>
  %bin.rdx2 = mul <16 x i8> %bin.rdx, %rdx.shuf1
  %rdx.shuf3 = shufflevector <16 x i8> %bin.rdx2, <16 x i8> poison, <16 x i32>
<i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32
undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32
undef, i32 undef>
  %bin.rdx4 = mul <16 x i8> %bin.rdx2, %rdx.shuf3
  %rdx.shuf5 = shufflevector <16 x i8> %bin.rdx4, <16 x i8> poison, <16 x i32>
<i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32
undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32
undef, i32 undef>
  %bin.rdx6 = mul <16 x i8> %bin.rdx4, %rdx.shuf5
  %1 = extractelement <16 x i8> %bin.rdx6, i32 0
  ret i8 %1
}


Referenced Bugs:

https://bugs.llvm.org/show_bug.cgi?id=51236
[Bug 51236] [meta] 13.0.0 Release Blockers
-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20210914/1587ce0f/attachment-0001.html>


More information about the llvm-bugs mailing list