[llvm] [SLP]Initial support for (masked)loads + compress and (masked)interleaved (PR #132099)

Alexander Kornienko via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 15 10:08:14 PDT 2025


alexfh wrote:

I managed to find a reproducer that's not as problematic as the one I mentioned in the previous comment. 

https://gcc.godbolt.org/z/cT75Pb4Ea
```
$ cat reduced.ll
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32"
target triple = "aarch64-unknown-linux-gnu"

define i1 @f(ptr align 8 dereferenceable(104) %0) {
  %2 = getelementptr i8, ptr %0, i64 56
  %3 = load float, ptr %2, align 8
  %4 = fcmp une float %3, 0.000000e+00
  %5 = zext i1 %4 to i8
  %6 = getelementptr i8, ptr %0, i64 60
  %7 = load float, ptr %6, align 4
  %8 = fcmp une float %7, 0.000000e+00
  %9 = zext i1 %8 to i8
  %10 = add i8 %5, %9
  %11 = getelementptr i8, ptr %0, i64 72
  %12 = load float, ptr %11, align 8
  %13 = fcmp une float %12, 0.000000e+00
  %14 = zext i1 %13 to i8
  %15 = add i8 %10, %14
  %16 = getelementptr i8, ptr %0, i64 76
  %17 = load float, ptr %16, align 4
  %18 = fcmp une float %17, 0.000000e+00
  %19 = zext i1 %18 to i8
  %20 = add i8 %15, %19
  store i8 %20, ptr %0, align 1
  %21 = load ptr, ptr %0, align 8
  %22 = call i1 %21(ptr null, ptr %2, i64 0)
  ret i1 false
}
$ ./clang-bad --target=aarch64-grtev4-linux-gnu  -mcpu=neoverse-n1 -mtune=generic -O3 -o /dev/null -c reduced.ll
assert.h assertion failed at llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:7183 in SDValue llvm::SelectionDAG::getNode(unsigned int, const SDLoc &, EVT, SDValue, SDValue, const SDNodeFlags): VT == MVT::Other && N1.getValueType() == MVT::Other && N2.getValueType() == MVT::Other && "Invalid token factor!"
```

The assertion failure happens elsewhere, but the issue is triggered by this commit.

https://github.com/llvm/llvm-project/pull/132099


More information about the llvm-commits mailing list