| Issue |
184944
|
| Summary |
[LoopVectorize] Missed Loop Vectorize Regression at -O3 (trunk vs 21)
|
| Labels |
new issue
|
| Assignees |
|
| Reporter |
zxt5
|
Compiler explorer: https://godbolt.org/z/TszTYz94Y
C reproducer:
```c
_Bool c;
short d, j, k;
#define e(a, b) {__typeof__(a) f = a; __typeof__(b) g = b; f > g ?: g;}
#define h(a, b) {__typeof__(a) f = a; f;}
void l(char m, char n[][0][20][20]) {
for (;;) {
for (_Bool i = 0; i < 1; i = m)
for (short o = m; o; o = j)
;
for (char p = 0; p < 20; p = 43)
for (int q = 0; q < k; q += 4) {
c = n[0][q][2][1];
d = (e(d, (h(6 && m, ))));
}
}
}
int main() {}
```
clang-trunk -O3 fails to vectorize the loop `q`:
```
36:
%37 = phi i16 [ %60, %23 ], [ %35, %24 ], !dbg !78
#dbg_value(i8 poison, !38, !DIExpression(), !60)
br label %38
38:
%39 = phi i16 [ %14, %12 ], [ %37, %36 ]
br i1 %5, label %40, label %67, !dbg !82
40:
br i1 %18, label %24, label %41, !dbg !61
41:
%42 = phi i64 [ %61, %41 ], [ 0, %40 ]
%43 = phi i16 [ %60, %41 ], [ %39, %40 ]
%44 = phi i64 [ %62, %41 ], [ 0, %40 ]
#dbg_value(i64 %42, !48, !DIExpression(), !63)
%45 = getelementptr inbounds nuw [20 x [20 x i8]], ptr %1, i64 %42, !dbg !64
%46 = getelementptr inbounds nuw i8, ptr %45, i64 41, !dbg !64
%47 = load i8, ptr %46, align 1, !dbg !64
%48 = icmp ne i8 %47, 0, !dbg !86
%49 = zext i1 %48 to i8, !dbg !87
store i8 %49, ptr @c, align 1, !dbg !88
#dbg_value(i16 %43, !52, !DIExpression(), !71)
#dbg_value(i32 %10, !56, !DIExpression(), !71)
%50 = sext i16 %43 to i32, !dbg !72
%51 = icmp sgt i32 %50, %10, !dbg !89
%52 = or i1 %9, %51, !dbg !78
%53 = zext i1 %52 to i16, !dbg !78
store i16 %53, ptr @d, align 2, !dbg !90
#dbg_value(i64 %42, !48, !DIExpression(DW_OP_constu, 4, DW_OP_or, DW_OP_stack_value), !63)
%54 = getelementptr inbounds nuw [20 x [20 x i8]], ptr %1, i64 %42, !dbg !64
%55 = getelementptr inbounds nuw i8, ptr %54, i64 1641, !dbg !64
%56 = load i8, ptr %55, align 1, !dbg !64
%57 = icmp ne i8 %56, 0, !dbg !91
%58 = zext i1 %57 to i8, !dbg !92
store i8 %58, ptr @c, align 1, !dbg !93
#dbg_value(i16 %53, !52, !DIExpression(), !71)
%59 = or i1 %9, %51, !dbg !94
%60 = zext i1 %59 to i16, !dbg !94
store i16 %60, ptr @d, align 2, !dbg !95
%61 = add nuw nsw i64 %42, 8, !dbg !96
#dbg_value(i64 %61, !48, !DIExpression(), !63)
%62 = add i64 %44, 2, !dbg !97
%63 = icmp eq i64 %62, %19, !dbg !97
br i1 %63, label %23, label %41, !dbg !97
```
while -O2 vectorizes the loop:
```
40:
%41 = phi i64 [ %48, %40 ], [ 0, %38 ]
%42 = mul i64 %41, 1600, !dbg !67
%43 = getelementptr inbounds nuw i8, ptr %1, i64 %42, !dbg !67
%44 = getelementptr inbounds nuw i8, ptr %43, i64 11241, !dbg !67
%45 = load i8, ptr %44, align 1, !dbg !67
%46 = icmp ne i8 %45, 0
%47 = zext i1 %46 to i8
%48 = add nuw i64 %41, 8
%49 = icmp eq i64 %48, %32, !dbg !72
br i1 %49, label %50, label %40, !dbg !72
50:
store i8 %47, ptr @c, align 1, !dbg !77
store i16 1, ptr @d, align 2, !dbg !84
br i1 %34, label %51, label %52, !dbg !72
```
Bisected to [ea2f539](https://github.com/llvm/llvm-project/commit/ea2f5395b1acdc6eaf69a79b7660d7fa7d08c271), which is committed by @ArneStenkrona2.
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs