[llvm] [instCombine][bugfix] Fix crash caused by using of cast in instCombineSVECmpNE (PR #102472)
Paul Walker via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 15 03:23:26 PDT 2024
paulwalker-arm wrote:
> > Fix looks good but the test case can be significantly reduced. It looks like you can just add to `llvm/test/Transforms/InstCombine/AArch64/sve-intrinsic-opts-cmpne.ll` by cloning `dupq_b_0` as `dupq_b_idx` whereby it takes an `%idx` function parameter that it uses when calling `sve.dupq.lane`.
>
> Thank you for your review! I have simplified the case in 'sve-inst-combine-cmpne.ll'. But it can't be merged into sve-intrinsic-opts-cmpne.ll, because the compile command of my new test case must contain '-mtriple=aarch64-unknown-linux-gnu' and '-O2'.
Are you sure? `sve-intrinsic-opts-cmpne.ll` already contains a `target triple` line and I think the only reason you need `-O2` is because you're relying on function inlining? I've just tried my suggestion on the current main branch and adding the following to `sve-intrinsic-opts-cmpne.ll` triggers the original failure for me. Do you not see the same?
```
define <vscale x 16 x i1> @dupq_b_idx(i64 %idx) #0 {
%1 = tail call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)
%2 = tail call <vscale x 16 x i8> @llvm.vector.insert.nxv16i8.v16i8(<vscale x 16 x i8> undef,
<16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0,
i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, i64 0)
%3 = tail call <vscale x 16 x i8> @llvm.aarch64.sve.dupq.lane.nxv16i8(<vscale x 16 x i8> %2 , i64 %idx)
%4 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.dup.x.nxv2i64(i64 0)
%5 = tail call <vscale x 16 x i1> @llvm.aarch64.sve.cmpne.wide.nxv16i8(<vscale x 16 x i1> %1, <vscale x 16 x i8> %3, <vscale x 2 x i64> %4)
ret <vscale x 16 x i1> %5
}
```
https://github.com/llvm/llvm-project/pull/102472
More information about the llvm-commits
mailing list