|
3 | 3 | ;; Tests that when we simplify the loop-exit branch condition, we preserve the |
4 | 4 | ;; !dbg attachment for all loop-exit branches. |
5 | 5 |
|
6 | | -define i32 @foo(i64 %a, ptr %p) { |
| 6 | +define i32 @foo(ptr %p) { |
7 | 7 | ; CHECK-LABEL: define i32 @foo( |
8 | | -; CHECK-SAME: i64 [[A:%.*]], ptr [[P:%.*]]) { |
| 8 | +; CHECK-SAME: ptr [[P:%.*]]) { |
9 | 9 | ; CHECK-NEXT: [[ENTRY:.*]]: |
10 | | -; CHECK-NEXT: [[WIDE_TRIP_COUNT:%.*]] = and i64 [[A]], 1 |
11 | | -; CHECK-NEXT: [[TMP0:%.*]] = add nuw nsw i64 [[WIDE_TRIP_COUNT]], 1 |
12 | 10 | ; CHECK-NEXT: br i1 false, label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]] |
13 | 11 | ; CHECK: [[VECTOR_PH]]: |
14 | | -; CHECK-NEXT: [[N_RND_UP:%.*]] = add i64 [[TMP0]], 1 |
15 | | -; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i64 [[N_RND_UP]], 2 |
16 | | -; CHECK-NEXT: [[N_VEC:%.*]] = sub i64 [[N_RND_UP]], [[N_MOD_VF]] |
17 | | -; CHECK-NEXT: [[TRIP_COUNT_MINUS_1:%.*]] = sub i64 [[TMP0]], 1 |
18 | | -; CHECK-NEXT: [[BROADCAST_SPLATINSERT1:%.*]] = insertelement <2 x i64> poison, i64 [[TRIP_COUNT_MINUS_1]], i64 0 |
19 | | -; CHECK-NEXT: [[BROADCAST_SPLAT2:%.*]] = shufflevector <2 x i64> [[BROADCAST_SPLATINSERT1]], <2 x i64> poison, <2 x i32> zeroinitializer |
20 | 12 | ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]] |
21 | 13 | ; CHECK: [[VECTOR_BODY]]: |
22 | | -; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_STORE_CONTINUE4:.*]] ], !dbg [[DBG3:![0-9]+]] |
23 | | -; CHECK-NEXT: [[BROADCAST_SPLATINSERT:%.*]] = insertelement <2 x i64> poison, i64 [[INDEX]], i64 0 |
24 | | -; CHECK-NEXT: [[BROADCAST_SPLAT:%.*]] = shufflevector <2 x i64> [[BROADCAST_SPLATINSERT]], <2 x i64> poison, <2 x i32> zeroinitializer |
25 | | -; CHECK-NEXT: [[VEC_IV:%.*]] = add <2 x i64> [[BROADCAST_SPLAT]], <i64 0, i64 1> |
26 | | -; CHECK-NEXT: [[TMP1:%.*]] = icmp ule <2 x i64> [[VEC_IV]], [[BROADCAST_SPLAT2]] |
27 | | -; CHECK-NEXT: [[TMP2:%.*]] = extractelement <2 x i1> [[TMP1]], i32 0 |
28 | | -; CHECK-NEXT: br i1 [[TMP2]], label %[[PRED_STORE_IF:.*]], label %[[PRED_STORE_CONTINUE:.*]] |
29 | | -; CHECK: [[PRED_STORE_IF]]: |
30 | | -; CHECK-NEXT: [[TMP3:%.*]] = trunc i64 0 to i8, !dbg [[DBG7:![0-9]+]] |
31 | | -; CHECK-NEXT: store i8 [[TMP3]], ptr [[P]], align 1, !dbg [[DBG8:![0-9]+]] |
32 | | -; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE]] |
33 | | -; CHECK: [[PRED_STORE_CONTINUE]]: |
34 | | -; CHECK-NEXT: [[TMP4:%.*]] = extractelement <2 x i1> [[TMP1]], i32 1, !dbg [[DBG8]] |
35 | | -; CHECK-NEXT: br i1 [[TMP4]], label %[[PRED_STORE_IF3:.*]], label %[[PRED_STORE_CONTINUE4]], !dbg [[DBG8]] |
36 | | -; CHECK: [[PRED_STORE_IF3]]: |
37 | | -; CHECK-NEXT: [[TMP5:%.*]] = trunc i64 0 to i8, !dbg [[DBG7]] |
38 | | -; CHECK-NEXT: store i8 [[TMP5]], ptr [[P]], align 1, !dbg [[DBG8]] |
39 | | -; CHECK-NEXT: br label %[[PRED_STORE_CONTINUE4]], !dbg [[DBG8]] |
40 | | -; CHECK: [[PRED_STORE_CONTINUE4]]: |
41 | | -; CHECK-NEXT: [[INDEX_NEXT]] = add i64 [[INDEX]], 2, !dbg [[DBG3]] |
42 | | -; CHECK-NEXT: br i1 true, label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !dbg [[DBG3]], !llvm.loop [[LOOP9:![0-9]+]] |
| 14 | +; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ], !dbg [[DBG3:![0-9]+]] |
| 15 | +; CHECK-NEXT: store i8 0, ptr [[P]], align 1, !dbg [[DBG7:![0-9]+]] |
| 16 | +; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 2, !dbg [[DBG3]] |
| 17 | +; CHECK-NEXT: br i1 true, label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !dbg [[DBG3]], !llvm.loop [[LOOP8:![0-9]+]] |
43 | 18 | ; CHECK: [[MIDDLE_BLOCK]]: |
44 | | -; CHECK-NEXT: br i1 true, label %[[EXIT:.*]], label %[[SCALAR_PH]], !dbg [[DBG12:![0-9]+]] |
| 19 | +; CHECK-NEXT: br i1 true, label %[[EXIT:.*]], label %[[SCALAR_PH]], !dbg [[DBG11:![0-9]+]] |
45 | 20 | ; CHECK: [[SCALAR_PH]]: |
46 | | -; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ [[N_VEC]], %[[MIDDLE_BLOCK]] ], [ 0, %[[ENTRY]] ], !dbg [[DBG3]] |
| 21 | +; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i64 [ 2, %[[MIDDLE_BLOCK]] ], [ 0, %[[ENTRY]] ], !dbg [[DBG3]] |
47 | 22 | ; CHECK-NEXT: br label %[[LOOP:.*]] |
48 | 23 | ; CHECK: [[LOOP]]: |
49 | 24 | ; CHECK-NEXT: [[IV:%.*]] = phi i64 [ [[IV_NEXT:%.*]], %[[LOOP]] ], [ [[BC_RESUME_VAL]], %[[SCALAR_PH]] ], !dbg [[DBG3]] |
50 | | -; CHECK-NEXT: [[CONV:%.*]] = trunc i64 0 to i8, !dbg [[DBG7]] |
51 | | -; CHECK-NEXT: store i8 [[CONV]], ptr [[P]], align 1, !dbg [[DBG8]] |
| 25 | +; CHECK-NEXT: [[CONV:%.*]] = trunc i64 0 to i8, !dbg [[DBG12:![0-9]+]] |
| 26 | +; CHECK-NEXT: store i8 [[CONV]], ptr [[P]], align 1, !dbg [[DBG7]] |
52 | 27 | ; CHECK-NEXT: [[IV_NEXT]] = add i64 [[IV]], 1, !dbg [[DBG13:![0-9]+]] |
53 | | -; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i64 [[IV]], [[WIDE_TRIP_COUNT]], !dbg [[DBG14:![0-9]+]] |
54 | | -; CHECK-NEXT: br i1 [[EXITCOND]], label %[[EXIT]], label %[[LOOP]], !dbg [[DBG12]], !llvm.loop [[LOOP15:![0-9]+]] |
| 28 | +; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i64 [[IV]], 1, !dbg [[DBG14:![0-9]+]] |
| 29 | +; CHECK-NEXT: br i1 [[EXITCOND]], label %[[EXIT]], label %[[LOOP]], !dbg [[DBG11]], !llvm.loop [[LOOP15:![0-9]+]] |
55 | 30 | ; CHECK: [[EXIT]]: |
56 | 31 | ; CHECK-NEXT: ret i32 0 |
57 | 32 | ; |
58 | 33 | entry: |
59 | | - %wide.trip.count = and i64 %a, 1 |
60 | 34 | br label %loop |
61 | 35 |
|
62 | 36 | loop: ; preds = %loop, %entry |
63 | 37 | %iv = phi i64 [ %iv.next, %loop ], [ 0, %entry ], !dbg !3 |
64 | 38 | %conv = trunc i64 0 to i8, !dbg !4 |
65 | 39 | store i8 %conv, ptr %p, align 1, !dbg !5 |
66 | 40 | %iv.next = add i64 %iv, 1, !dbg !6 |
67 | | - %exitcond = icmp eq i64 %iv, %wide.trip.count, !dbg !7 |
| 41 | + %exitcond = icmp eq i64 %iv, 1, !dbg !7 |
68 | 42 | br i1 %exitcond, label %exit, label %loop, !dbg !8 |
69 | 43 |
|
70 | 44 | exit: ; preds = %loop |
@@ -93,13 +67,13 @@ exit: ; preds = %loop |
93 | 67 | ; CHECK: [[META4]] = distinct !DISubprogram(name: "foo", scope: [[META1]], file: [[META1]], line: 11, type: [[META5:![0-9]+]], spFlags: DISPFlagDefinition, unit: [[META0]], retainedNodes: [[META6:![0-9]+]]) |
94 | 68 | ; CHECK: [[META5]] = distinct !DISubroutineType(types: [[META6]]) |
95 | 69 | ; CHECK: [[META6]] = !{} |
96 | | -; CHECK: [[DBG7]] = !DILocation(line: 5, scope: [[META4]]) |
97 | | -; CHECK: [[DBG8]] = !DILocation(line: 6, scope: [[META4]]) |
98 | | -; CHECK: [[LOOP9]] = distinct !{[[LOOP9]], [[META10:![0-9]+]], [[META11:![0-9]+]]} |
99 | | -; CHECK: [[META10]] = !{!"llvm.loop.isvectorized", i32 1} |
100 | | -; CHECK: [[META11]] = !{!"llvm.loop.unroll.runtime.disable"} |
101 | | -; CHECK: [[DBG12]] = !DILocation(line: 9, scope: [[META4]]) |
| 70 | +; CHECK: [[DBG7]] = !DILocation(line: 6, scope: [[META4]]) |
| 71 | +; CHECK: [[LOOP8]] = distinct !{[[LOOP8]], [[META9:![0-9]+]], [[META10:![0-9]+]]} |
| 72 | +; CHECK: [[META9]] = !{!"llvm.loop.isvectorized", i32 1} |
| 73 | +; CHECK: [[META10]] = !{!"llvm.loop.unroll.runtime.disable"} |
| 74 | +; CHECK: [[DBG11]] = !DILocation(line: 9, scope: [[META4]]) |
| 75 | +; CHECK: [[DBG12]] = !DILocation(line: 5, scope: [[META4]]) |
102 | 76 | ; CHECK: [[DBG13]] = !DILocation(line: 7, scope: [[META4]]) |
103 | 77 | ; CHECK: [[DBG14]] = !DILocation(line: 8, scope: [[META4]]) |
104 | | -; CHECK: [[LOOP15]] = distinct !{[[LOOP15]], [[META11]], [[META10]]} |
| 78 | +; CHECK: [[LOOP15]] = distinct !{[[LOOP15]], [[META10]], [[META9]]} |
105 | 79 | ;. |
0 commit comments