|
2 | 2 | ; RUN: opt %s -S --passes="loop-mssa(simple-loop-unswitch<nontrivial>)" -o - \
|
3 | 3 | ; RUN: | FileCheck %s
|
4 | 4 |
|
5 |
| -;; The important thing here is that the instructions duplicated from |
6 |
| -;; LOOP_HEADER into ENTRY, and those duplicated from LOOP_LATCH into |
7 |
| -;; LOOP_LATCH_US, get remapped atom numbers. |
| 5 | +;; Unswitch from: |
| 6 | +;; +- noclobber -+ |
| 7 | +;; | v |
| 8 | +;; entry -> loop.header loop.latch -> exit. |
| 9 | +;; ^ | ^ | |
| 10 | +;; | +- clobber ---+ | |
| 11 | +;; +--------------------------------+ |
| 12 | +;; |
| 13 | +;; To (unswitched loop unconditionally branches to noclobber.us): |
| 14 | +;; +---------------------------------------------+ |
| 15 | +;; V | |
| 16 | +;; +- entry.split.us -> loop.header.us -> noclobber.us -> loop.latch.us -> exit.split.us -+ |
| 17 | +;; | | |
| 18 | +;; entry | |
| 19 | +;; | v |
| 20 | +;; +- entry.split -> loop.header -> noclobber -> loop.latch -> exit.split --------------> exit. |
| 21 | +;; ^ | ^ | |
| 22 | +;; | +--> clobber -----+ | |
| 23 | +;; +------------------------------------+ |
| 24 | +;; |
| 25 | +;; Check the duplicated instructions get remapped source atoms. Note some |
| 26 | +;; instructions get duplicated from loop.header into entry too. |
8 | 27 |
|
9 |
| -define i32 @partial_unswitch_true_successor_hoist_invariant(ptr %ptr, i32 %N) !dbg !5 { |
10 | 28 | ; CHECK-LABEL: define i32 @partial_unswitch_true_successor_hoist_invariant(
|
11 | 29 | ; CHECK-SAME: ptr [[PTR:%.*]], i32 [[N:%.*]]) !dbg [[DBG5:![0-9]+]] {
|
12 | 30 | ; CHECK-NEXT: [[ENTRY:.*:]]
|
@@ -48,7 +66,8 @@ define i32 @partial_unswitch_true_successor_hoist_invariant(ptr %ptr, i32 %N) !d
|
48 | 66 | ; CHECK-NEXT: br label %[[EXIT]], !dbg [[DBG33:![0-9]+]]
|
49 | 67 | ; CHECK: [[EXIT]]:
|
50 | 68 | ; CHECK-NEXT: ret i32 10, !dbg [[DBG33]]
|
51 |
| -; |
| 69 | + |
| 70 | +define i32 @partial_unswitch_true_successor_hoist_invariant(ptr %ptr, i32 %N) !dbg !5 { |
52 | 71 | entry:
|
53 | 72 | br label %loop.header, !dbg !8
|
54 | 73 |
|
@@ -89,49 +108,42 @@ declare void @clobber()
|
89 | 108 | !5 = distinct !DISubprogram(name: "partial_unswitch_true_successor_hoist_invariant", linkageName: "partial_unswitch_true_successor_hoist_invariant", scope: null, file: !1, line: 1, type: !6, scopeLine: 1, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0)
|
90 | 109 | !6 = !DISubroutineType(types: !7)
|
91 | 110 | !7 = !{}
|
92 |
| -!8 = !DILocation(line: 1, column: 1, scope: !5, atomGroup: 1, atomRank: 1) |
93 |
| -!9 = !DILocation(line: 2, column: 1, scope: !5, atomGroup: 2, atomRank: 1) |
94 |
| -!10 = !DILocation(line: 3, column: 1, scope: !5, atomGroup: 3, atomRank: 1) |
95 |
| -!11 = !DILocation(line: 4, column: 1, scope: !5, atomGroup: 4, atomRank: 1) |
96 |
| -!12 = !DILocation(line: 5, column: 1, scope: !5, atomGroup: 5, atomRank: 1) |
97 |
| -!13 = !DILocation(line: 6, column: 1, scope: !5, atomGroup: 6, atomRank: 1) |
98 |
| -!14 = !DILocation(line: 7, column: 1, scope: !5, atomGroup: 7, atomRank: 1) |
99 |
| -!15 = !DILocation(line: 8, column: 1, scope: !5, atomGroup: 8, atomRank: 1) |
100 |
| -!16 = !DILocation(line: 9, column: 1, scope: !5, atomGroup: 9, atomRank: 1) |
101 |
| -!17 = !DILocation(line: 10, column: 1, scope: !5, atomGroup: 10, atomRank: 1) |
102 |
| -!18 = !DILocation(line: 11, column: 1, scope: !5, atomGroup: 11, atomRank: 1) |
103 |
| -!19 = !DILocation(line: 12, column: 1, scope: !5, atomGroup: 12, atomRank: 1) |
104 |
| -!20 = !DILocation(line: 13, column: 1, scope: !5, atomGroup: 13, atomRank: 1) |
| 111 | +!8 = !DILocation(line: 1, scope: !5, atomGroup: 1, atomRank: 1) |
| 112 | +!9 = !DILocation(line: 2, scope: !5, atomGroup: 2, atomRank: 1) |
| 113 | +!10 = !DILocation(line: 3, scope: !5, atomGroup: 3, atomRank: 1) |
| 114 | +!11 = !DILocation(line: 4, scope: !5, atomGroup: 4, atomRank: 1) |
| 115 | +!12 = !DILocation(line: 5, scope: !5, atomGroup: 5, atomRank: 1) |
| 116 | +!13 = !DILocation(line: 6, scope: !5, atomGroup: 6, atomRank: 1) |
| 117 | +!14 = !DILocation(line: 7, scope: !5, atomGroup: 7, atomRank: 1) |
| 118 | +!15 = !DILocation(line: 8, scope: !5, atomGroup: 8, atomRank: 1) |
| 119 | +!16 = !DILocation(line: 9, scope: !5, atomGroup: 9, atomRank: 1) |
| 120 | +!17 = !DILocation(line: 10, scope: !5, atomGroup: 10, atomRank: 1) |
| 121 | +!18 = !DILocation(line: 11, scope: !5, atomGroup: 11, atomRank: 1) |
| 122 | +!19 = !DILocation(line: 12, scope: !5, atomGroup: 12, atomRank: 1) |
| 123 | +!20 = !DILocation(line: 13, scope: !5, atomGroup: 13, atomRank: 1) |
105 | 124 | ;.
|
106 |
| -; CHECK: [[META0:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C, file: [[META1:![0-9]+]], producer: "debugify", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug) |
107 |
| -; CHECK: [[META1]] = !DIFile(filename: "test.ll", directory: {{.*}}) |
108 |
| -; CHECK: [[DBG5]] = distinct !DISubprogram(name: "partial_unswitch_true_successor_hoist_invariant", linkageName: "partial_unswitch_true_successor_hoist_invariant", scope: null, file: [[META1]], line: 1, type: [[META6:![0-9]+]], scopeLine: 1, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: [[META0]]) |
109 |
| -; CHECK: [[META6]] = !DISubroutineType(types: [[META7:![0-9]+]]) |
110 |
| -; CHECK: [[META7]] = !{} |
111 |
| -; CHECK: [[DBG8]] = !DILocation(line: 3, column: 1, scope: [[DBG5]], atomGroup: 25, atomRank: 1) |
112 |
| -; CHECK: [[DBG9]] = !DILocation(line: 4, column: 1, scope: [[DBG5]], atomGroup: 26, atomRank: 1) |
113 |
| -; CHECK: [[DBG10]] = !DILocation(line: 5, column: 1, scope: [[DBG5]], atomGroup: 27, atomRank: 1) |
114 |
| -; CHECK: [[DBG11]] = !DILocation(line: 1, column: 1, scope: [[DBG5]], atomGroup: 14, atomRank: 1) |
115 |
| -; CHECK: [[DBG12]] = !DILocation(line: 2, column: 1, scope: [[DBG5]], atomGroup: 15, atomRank: 1) |
116 |
| -; CHECK: [[DBG13]] = !DILocation(line: 6, column: 1, scope: [[DBG5]], atomGroup: 19, atomRank: 1) |
117 |
| -; CHECK: [[DBG14]] = !DILocation(line: 7, column: 1, scope: [[DBG5]], atomGroup: 20, atomRank: 1) |
118 |
| -; CHECK: [[DBG15]] = !DILocation(line: 10, column: 1, scope: [[DBG5]], atomGroup: 21, atomRank: 1) |
119 |
| -; CHECK: [[DBG16]] = !DILocation(line: 11, column: 1, scope: [[DBG5]], atomGroup: 22, atomRank: 1) |
120 |
| -; CHECK: [[DBG17]] = !DILocation(line: 12, column: 1, scope: [[DBG5]], atomGroup: 23, atomRank: 1) |
121 |
| -; CHECK: [[DBG18]] = !DILocation(line: 13, column: 1, scope: [[DBG5]], atomGroup: 24, atomRank: 1) |
122 |
| -; CHECK: [[DBG19]] = !DILocation(line: 1, column: 1, scope: [[DBG5]], atomGroup: 1, atomRank: 1) |
123 |
| -; CHECK: [[DBG20]] = !DILocation(line: 2, column: 1, scope: [[DBG5]], atomGroup: 2, atomRank: 1) |
124 |
| -; CHECK: [[DBG21]] = !DILocation(line: 3, column: 1, scope: [[DBG5]], atomGroup: 3, atomRank: 1) |
125 |
| -; CHECK: [[DBG22]] = !DILocation(line: 4, column: 1, scope: [[DBG5]], atomGroup: 4, atomRank: 1) |
126 |
| -; CHECK: [[DBG23]] = !DILocation(line: 5, column: 1, scope: [[DBG5]], atomGroup: 5, atomRank: 1) |
127 |
| -; CHECK: [[DBG24]] = !DILocation(line: 6, column: 1, scope: [[DBG5]], atomGroup: 6, atomRank: 1) |
128 |
| -; CHECK: [[DBG25]] = !DILocation(line: 7, column: 1, scope: [[DBG5]], atomGroup: 7, atomRank: 1) |
129 |
| -; CHECK: [[DBG26]] = !DILocation(line: 8, column: 1, scope: [[DBG5]], atomGroup: 8, atomRank: 1) |
130 |
| -; CHECK: [[DBG27]] = !DILocation(line: 9, column: 1, scope: [[DBG5]], atomGroup: 9, atomRank: 1) |
131 |
| -; CHECK: [[DBG28]] = !DILocation(line: 10, column: 1, scope: [[DBG5]], atomGroup: 10, atomRank: 1) |
132 |
| -; CHECK: [[DBG29]] = !DILocation(line: 11, column: 1, scope: [[DBG5]], atomGroup: 11, atomRank: 1) |
133 |
| -; CHECK: [[DBG30]] = !DILocation(line: 12, column: 1, scope: [[DBG5]], atomGroup: 12, atomRank: 1) |
134 |
| -; CHECK: [[LOOP31]] = distinct !{[[LOOP31]], [[META32:![0-9]+]]} |
135 |
| -; CHECK: [[META32]] = !{!"llvm.loop.unswitch.partial.disable"} |
136 |
| -; CHECK: [[DBG33]] = !DILocation(line: 13, column: 1, scope: [[DBG5]], atomGroup: 13, atomRank: 1) |
| 125 | +; CHECK: [[DBG8]] = !DILocation(line: 3{{.*}}, atomGroup: 25, atomRank: 1) |
| 126 | +; CHECK: [[DBG9]] = !DILocation(line: 4{{.*}}, atomGroup: 26, atomRank: 1) |
| 127 | +; CHECK: [[DBG10]] = !DILocation(line: 5{{.*}}, atomGroup: 27, atomRank: 1) |
| 128 | +; CHECK: [[DBG11]] = !DILocation(line: 1{{.*}}, atomGroup: 14, atomRank: 1) |
| 129 | +; CHECK: [[DBG12]] = !DILocation(line: 2{{.*}}, atomGroup: 15, atomRank: 1) |
| 130 | +; CHECK: [[DBG13]] = !DILocation(line: 6{{.*}}, atomGroup: 19, atomRank: 1) |
| 131 | +; CHECK: [[DBG14]] = !DILocation(line: 7{{.*}}, atomGroup: 20, atomRank: 1) |
| 132 | +; CHECK: [[DBG15]] = !DILocation(line: 10{{.*}}, atomGroup: 21, atomRank: 1) |
| 133 | +; CHECK: [[DBG16]] = !DILocation(line: 11{{.*}}, atomGroup: 22, atomRank: 1) |
| 134 | +; CHECK: [[DBG17]] = !DILocation(line: 12{{.*}}, atomGroup: 23, atomRank: 1) |
| 135 | +; CHECK: [[DBG18]] = !DILocation(line: 13{{.*}}, atomGroup: 24, atomRank: 1) |
| 136 | +; CHECK: [[DBG19]] = !DILocation(line: 1{{.*}}, atomGroup: 1, atomRank: 1) |
| 137 | +; CHECK: [[DBG20]] = !DILocation(line: 2{{.*}}, atomGroup: 2, atomRank: 1) |
| 138 | +; CHECK: [[DBG21]] = !DILocation(line: 3{{.*}}, atomGroup: 3, atomRank: 1) |
| 139 | +; CHECK: [[DBG22]] = !DILocation(line: 4{{.*}}, atomGroup: 4, atomRank: 1) |
| 140 | +; CHECK: [[DBG23]] = !DILocation(line: 5{{.*}}, atomGroup: 5, atomRank: 1) |
| 141 | +; CHECK: [[DBG24]] = !DILocation(line: 6{{.*}}, atomGroup: 6, atomRank: 1) |
| 142 | +; CHECK: [[DBG25]] = !DILocation(line: 7{{.*}}, atomGroup: 7, atomRank: 1) |
| 143 | +; CHECK: [[DBG26]] = !DILocation(line: 8{{.*}}, atomGroup: 8, atomRank: 1) |
| 144 | +; CHECK: [[DBG27]] = !DILocation(line: 9{{.*}}, atomGroup: 9, atomRank: 1) |
| 145 | +; CHECK: [[DBG28]] = !DILocation(line: 10{{.*}}, atomGroup: 10, atomRank: 1) |
| 146 | +; CHECK: [[DBG29]] = !DILocation(line: 11{{.*}}, atomGroup: 11, atomRank: 1) |
| 147 | +; CHECK: [[DBG30]] = !DILocation(line: 12{{.*}}, atomGroup: 12, atomRank: 1) |
| 148 | +; CHECK: [[DBG33]] = !DILocation(line: 13{{.*}}, atomGroup: 13, atomRank: 1) |
137 | 149 | ;.
|
0 commit comments