|
4 | 4 | @A = common global [1024 x i64] zeroinitializer, align 16
|
5 | 5 | @B = common global [1024 x i64] zeroinitializer, align 16
|
6 | 6 |
|
7 |
| -; FIXME: The exit condition of the inner loop is incorrect when vectorizing. |
8 | 7 | define void @inner_latch_header_first_successor(i64 %N, i32 %c, i64 %M) {
|
9 | 8 | ; CHECK-LABEL: define void @inner_latch_header_first_successor(
|
10 | 9 | ; CHECK-SAME: i64 [[N:%.*]], i32 [[C:%.*]], i64 [[M:%.*]]) {
|
@@ -35,8 +34,9 @@ define void @inner_latch_header_first_successor(i64 %N, i32 %c, i64 %M) {
|
35 | 34 | ; CHECK-NEXT: [[TMP3]] = add nsw <4 x i64> [[TMP2]], [[VEC_PHI4]]
|
36 | 35 | ; CHECK-NEXT: [[TMP4]] = add nuw nsw <4 x i64> [[VEC_PHI]], splat (i64 1)
|
37 | 36 | ; CHECK-NEXT: [[TMP5:%.*]] = icmp ne <4 x i64> [[TMP4]], [[BROADCAST_SPLAT2]]
|
38 |
| -; CHECK-NEXT: [[TMP6:%.*]] = extractelement <4 x i1> [[TMP5]], i32 0 |
39 |
| -; CHECK-NEXT: br i1 [[TMP6]], label %[[VECTOR_LATCH]], label %[[INNER3]] |
| 37 | +; CHECK-NEXT: [[TMP6:%.*]] = xor <4 x i1> [[TMP5]], splat (i1 true) |
| 38 | +; CHECK-NEXT: [[TMP9:%.*]] = extractelement <4 x i1> [[TMP6]], i32 0 |
| 39 | +; CHECK-NEXT: br i1 [[TMP9]], label %[[VECTOR_LATCH]], label %[[INNER3]] |
40 | 40 | ; CHECK: [[VECTOR_LATCH]]:
|
41 | 41 | ; CHECK-NEXT: [[VEC_PHI6:%.*]] = phi <4 x i64> [ [[TMP3]], %[[INNER3]] ]
|
42 | 42 | ; CHECK-NEXT: call void @llvm.masked.scatter.v4i64.v4p0(<4 x i64> [[VEC_PHI6]], <4 x ptr> [[TMP0]], i32 4, <4 x i1> splat (i1 true))
|
|
0 commit comments