|
1 |
| -; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 |
| 1 | +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals none --version 5 |
2 | 2 | ; RUN: opt < %s --prefer-predicate-over-epilogue=predicate-dont-vectorize --passes=loop-vectorize -mcpu=sifive-p470 -mattr=+v,+f -force-tail-folding-style=data-with-evl -S | FileCheck %s
|
3 | 3 | ; Generated from issue #109468.
|
4 | 4 | ; In this test case, the vector store with tail mask will transfer to the vp intrinsic with EVL.
|
@@ -27,40 +27,40 @@ define void @lshift_significand(i32 %n, ptr nocapture writeonly %dst) {
|
27 | 27 | ; CHECK-NEXT: [[N_VEC:%.*]] = sub i64 [[N_RND_UP]], [[N_MOD_VF]]
|
28 | 28 | ; CHECK-NEXT: [[TMP8:%.*]] = call i64 @llvm.vscale.i64()
|
29 | 29 | ; CHECK-NEXT: [[TMP9:%.*]] = mul i64 [[TMP8]], 2
|
30 |
| -; CHECK-NEXT: [[IND_END:%.*]] = add i64 [[SPEC_SELECT]], [[N_VEC]] |
| 30 | +; CHECK-NEXT: [[TMP10:%.*]] = add i64 [[SPEC_SELECT]], [[N_VEC]] |
31 | 31 | ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]]
|
32 | 32 | ; CHECK: [[VECTOR_BODY]]:
|
33 | 33 | ; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
|
34 | 34 | ; CHECK-NEXT: [[EVL_BASED_IV:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_EVL_NEXT:%.*]], %[[VECTOR_BODY]] ]
|
35 |
| -; CHECK-NEXT: [[TMP10:%.*]] = sub i64 [[TMP0]], [[EVL_BASED_IV]] |
36 |
| -; CHECK-NEXT: [[TMP11:%.*]] = call i32 @llvm.experimental.get.vector.length.i64(i64 [[TMP10]], i32 2, i1 true) |
| 35 | +; CHECK-NEXT: [[AVL:%.*]] = sub i64 [[TMP0]], [[EVL_BASED_IV]] |
| 36 | +; CHECK-NEXT: [[TMP11:%.*]] = call i32 @llvm.experimental.get.vector.length.i64(i64 [[AVL]], i32 2, i1 true) |
37 | 37 | ; CHECK-NEXT: [[OFFSET_IDX:%.*]] = add i64 [[SPEC_SELECT]], [[EVL_BASED_IV]]
|
38 |
| -; CHECK-NEXT: [[TMP12:%.*]] = add i64 [[OFFSET_IDX]], 0 |
39 |
| -; CHECK-NEXT: [[TMP13:%.*]] = sub nuw nsw i64 1, [[TMP12]] |
40 |
| -; CHECK-NEXT: [[TMP14:%.*]] = getelementptr i64, ptr [[DST]], i64 [[TMP13]] |
| 38 | +; CHECK-NEXT: [[IV:%.*]] = add i64 [[OFFSET_IDX]], 0 |
| 39 | +; CHECK-NEXT: [[TMP23:%.*]] = sub nuw nsw i64 1, [[IV]] |
| 40 | +; CHECK-NEXT: [[ARRAYIDX13:%.*]] = getelementptr i64, ptr [[DST]], i64 [[TMP23]] |
41 | 41 | ; CHECK-NEXT: [[TMP15:%.*]] = zext i32 [[TMP11]] to i64
|
42 |
| -; CHECK-NEXT: [[TMP17:%.*]] = mul i64 0, [[TMP15]] |
43 |
| -; CHECK-NEXT: [[TMP18:%.*]] = sub i64 1, [[TMP15]] |
44 |
| -; CHECK-NEXT: [[TMP19:%.*]] = getelementptr i64, ptr [[TMP14]], i64 [[TMP17]] |
45 |
| -; CHECK-NEXT: [[TMP20:%.*]] = getelementptr i64, ptr [[TMP19]], i64 [[TMP18]] |
| 42 | +; CHECK-NEXT: [[TMP16:%.*]] = mul i64 0, [[TMP15]] |
| 43 | +; CHECK-NEXT: [[TMP17:%.*]] = sub i64 1, [[TMP15]] |
| 44 | +; CHECK-NEXT: [[TMP18:%.*]] = getelementptr i64, ptr [[ARRAYIDX13]], i64 [[TMP16]] |
| 45 | +; CHECK-NEXT: [[TMP19:%.*]] = getelementptr i64, ptr [[TMP18]], i64 [[TMP17]] |
46 | 46 | ; CHECK-NEXT: [[VP_REVERSE:%.*]] = call <vscale x 2 x i64> @llvm.experimental.vp.reverse.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> splat (i1 true), i32 [[TMP11]])
|
47 |
| -; CHECK-NEXT: call void @llvm.vp.store.nxv2i64.p0(<vscale x 2 x i64> [[VP_REVERSE]], ptr align 8 [[TMP20]], <vscale x 2 x i1> splat (i1 true), i32 [[TMP11]]) |
48 |
| -; CHECK-NEXT: [[TMP21:%.*]] = zext i32 [[TMP11]] to i64 |
49 |
| -; CHECK-NEXT: [[INDEX_EVL_NEXT]] = add i64 [[TMP21]], [[EVL_BASED_IV]] |
| 47 | +; CHECK-NEXT: call void @llvm.vp.store.nxv2i64.p0(<vscale x 2 x i64> [[VP_REVERSE]], ptr align 8 [[TMP19]], <vscale x 2 x i1> splat (i1 true), i32 [[TMP11]]) |
| 48 | +; CHECK-NEXT: [[TMP20:%.*]] = zext i32 [[TMP11]] to i64 |
| 49 | +; CHECK-NEXT: [[INDEX_EVL_NEXT]] = add i64 [[TMP20]], [[EVL_BASED_IV]] |
50 | 50 | ; CHECK-NEXT: [[INDEX_NEXT]] = add i64 [[INDEX]], [[TMP9]]
|
51 |
| -; CHECK-NEXT: [[TMP22:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]] |
52 |
| -; CHECK-NEXT: br i1 [[TMP22]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]] |
| 51 | +; CHECK-NEXT: [[TMP21:%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]] |
| 52 | +; CHECK-NEXT: br i1 [[TMP21]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]] |
53 | 53 | ; CHECK: [[MIDDLE_BLOCK]]:
|
54 | 54 | ; CHECK-NEXT: br i1 true, label %[[EXIT:.*]], label %[[SCALAR_PH]]
|
55 | 55 | ; CHECK: [[SCALAR_PH]]:
|
56 |
| -; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ [[IND_END]], %[[MIDDLE_BLOCK]] ], [ [[SPEC_SELECT]], %[[ENTRY]] ] |
| 56 | +; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ [[TMP10]], %[[MIDDLE_BLOCK]] ], [ [[SPEC_SELECT]], %[[ENTRY]] ] |
57 | 57 | ; CHECK-NEXT: br label %[[LOOP:.*]]
|
58 | 58 | ; CHECK: [[LOOP]]:
|
59 |
| -; CHECK-NEXT: [[IV:%.*]] = phi i64 [ [[BC_RESUME_VAL]], %[[SCALAR_PH]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ] |
60 |
| -; CHECK-NEXT: [[TMP23:%.*]] = sub nuw nsw i64 1, [[IV]] |
61 |
| -; CHECK-NEXT: [[ARRAYIDX13:%.*]] = getelementptr i64, ptr [[DST]], i64 [[TMP23]] |
62 |
| -; CHECK-NEXT: store i64 0, ptr [[ARRAYIDX13]], align 8 |
63 |
| -; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i64 [[IV]], 1 |
| 59 | +; CHECK-NEXT: [[IV1:%.*]] = phi i64 [ [[BC_RESUME_VAL]], %[[SCALAR_PH]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ] |
| 60 | +; CHECK-NEXT: [[TMP22:%.*]] = sub nuw nsw i64 1, [[IV1]] |
| 61 | +; CHECK-NEXT: [[ARRAYIDX14:%.*]] = getelementptr i64, ptr [[DST]], i64 [[TMP22]] |
| 62 | +; CHECK-NEXT: store i64 0, ptr [[ARRAYIDX14]], align 8 |
| 63 | +; CHECK-NEXT: [[IV_NEXT]] = add nuw nsw i64 [[IV1]], 1 |
64 | 64 | ; CHECK-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i64 [[IV_NEXT]], 3
|
65 | 65 | ; CHECK-NEXT: br i1 [[EXITCOND_NOT]], label %[[EXIT]], label %[[LOOP]], !llvm.loop [[LOOP3:![0-9]+]]
|
66 | 66 | ; CHECK: [[EXIT]]:
|
|
83 | 83 | exit:
|
84 | 84 | ret void
|
85 | 85 | }
|
86 |
| -;. |
87 |
| -; CHECK: [[LOOP0]] = distinct !{[[LOOP0]], [[META1:![0-9]+]], [[META2:![0-9]+]]} |
88 |
| -; CHECK: [[META1]] = !{!"llvm.loop.isvectorized", i32 1} |
89 |
| -; CHECK: [[META2]] = !{!"llvm.loop.unroll.runtime.disable"} |
90 |
| -; CHECK: [[LOOP3]] = distinct !{[[LOOP3]], [[META2]], [[META1]]} |
91 |
| -;. |
0 commit comments