| Issue |
184300
|
| Summary |
[LV] VPlan narrowing of interleave groups created an invalid select
|
| Labels |
vectorizers,
crash-on-valid
|
| Assignees |
artagnon
|
| Reporter |
artagnon
|
The following IR:
```llvm
define void @widget(ptr %arg, fp128 %arg1) {
bb:
br label %bb2
bb2: ; preds = %bb2, %bb
%phi = phi i64 [ 0, %bb ], [ %add, %bb2 ]
%fcmp = fcmp olt fp128 %arg1, 0xL00000000000000000000000000000000
%select = select i1 %fcmp, double 0.000000e+00, double 1.000000e+00
%getelementptr = getelementptr { double, double }, ptr %arg, i64 %phi
store double %select, ptr %getelementptr, align 8
%getelementptr3 = getelementptr i8, ptr %getelementptr, i64 8
store double 0.000000e+00, ptr %getelementptr3, align 8
%add = add i64 %phi, 1
%icmp = icmp eq i64 %phi, 1
br i1 %icmp, label %bb4, label %bb2
bb4: ; preds = %bb2
ret void
}
```
when run through `opt -p loop-vectorize -enable-interleave-mem-accesses -force-vector-width=2 -S`, produces an invalid select:
```llvm
define void @widget(ptr %arg, fp128 %arg1) {
bb:
br label %vector.ph
vector.ph:
%0 = fcmp olt fp128 %arg1, 0xL00000000000000000000000000000000
%1 = select i1 %0, <2 x double> zeroinitializer, <2 x double> splat (double 1.000000e+00)
br label %vector.body
vector.body:
%2 = shufflevector <2 x double> %1, <2 x double> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
%interleaved.vec = shufflevector <4 x double> %2, <4 x double> poison, <4 x i32> <i32 0, i32 2, i32 1, i32 3>
store <4 x double> %interleaved.vec, ptr %arg, align 8
br label %middle.block
middle.block:
br label %bb4
bb4:
ret void
}
```
See https://godbolt.org/z/bhcYss5Y1
SelectionDAG obviously crashes when the invalid IR is run through llc. Blame:
```
commit bd5f9384d831c01b5f388de0be910c385562ed77
Author: Ramkumar Ramachandra <[email protected]>
Date: 5 days ago
[VPlan] Extend interleave-group-narrowing to WidenCast (#183204)
WidenCast is very similar to Widen recipes.
Fixes #128062.
```
Discovered by Linaro's buildbot on Fujitsu test cases. CC @fhahn, @s-watanabe314, @maxim-kuvyrkov.
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs