1
- // RUN: mlir-opt %s - loop-invariant-code-motion -split-input-file | FileCheck %s
1
+ // RUN: mlir-opt %s -split-input-file - loop-invariant-code-motion | FileCheck %s
2
2
3
3
func @nested_loops_both_having_invariant_code () {
4
4
%m = alloc () : memref <10 xf32 >
@@ -25,6 +25,8 @@ func @nested_loops_both_having_invariant_code() {
25
25
return
26
26
}
27
27
28
+ // -----
29
+
28
30
func @nested_loops_code_invariant_to_both () {
29
31
%m = alloc () : memref <10 xf32 >
30
32
%cf7 = constant 7.0 : f32
@@ -44,6 +46,8 @@ func @nested_loops_code_invariant_to_both() {
44
46
return
45
47
}
46
48
49
+ // -----
50
+
47
51
func @single_loop_nothing_invariant () {
48
52
%m1 = alloc () : memref <10 xf32 >
49
53
%m2 = alloc () : memref <10 xf32 >
@@ -65,6 +69,8 @@ func @single_loop_nothing_invariant() {
65
69
return
66
70
}
67
71
72
+ // -----
73
+
68
74
func @invariant_code_inside_affine_if () {
69
75
%m = alloc () : memref <10 xf32 >
70
76
%cf8 = constant 8.0 : f32
@@ -81,7 +87,7 @@ func @invariant_code_inside_affine_if() {
81
87
// CHECK: %0 = alloc() : memref<10xf32>
82
88
// CHECK-NEXT: %cst = constant 8.000000e+00 : f32
83
89
// CHECK-NEXT: affine.for %arg0 = 0 to 10 {
84
- // CHECK-NEXT: %1 = affine.apply #map3 (%arg0)
90
+ // CHECK-NEXT: %1 = affine.apply #map0 (%arg0)
85
91
// CHECK-NEXT: affine.if #set0(%arg0, %1) {
86
92
// CHECK-NEXT: %2 = addf %cst, %cst : f32
87
93
// CHECK-NEXT: affine.store %2, %0[%arg0] : memref<10xf32>
@@ -91,6 +97,8 @@ func @invariant_code_inside_affine_if() {
91
97
return
92
98
}
93
99
100
+ // -----
101
+
94
102
func @invariant_affine_if () {
95
103
%m = alloc () : memref <10 xf32 >
96
104
%cf8 = constant 8.0 : f32
@@ -114,6 +122,8 @@ func @invariant_affine_if() {
114
122
return
115
123
}
116
124
125
+ // -----
126
+
117
127
func @invariant_affine_if2 () {
118
128
%m = alloc () : memref <10 xf32 >
119
129
%cf8 = constant 8.0 : f32
@@ -139,6 +149,8 @@ func @invariant_affine_if2() {
139
149
return
140
150
}
141
151
152
+ // -----
153
+
142
154
func @invariant_affine_nested_if () {
143
155
%m = alloc () : memref <10 xf32 >
144
156
%cf8 = constant 8.0 : f32
@@ -169,6 +181,8 @@ func @invariant_affine_nested_if() {
169
181
return
170
182
}
171
183
184
+ // -----
185
+
172
186
func @invariant_affine_nested_if_else () {
173
187
%m = alloc () : memref <10 xf32 >
174
188
%cf8 = constant 8.0 : f32
@@ -205,6 +219,8 @@ func @invariant_affine_nested_if_else() {
205
219
return
206
220
}
207
221
222
+ // -----
223
+
208
224
func @invariant_loop_dialect () {
209
225
%ci0 = constant 0 : index
210
226
%ci10 = constant 10 : index
@@ -226,6 +242,8 @@ func @invariant_loop_dialect() {
226
242
return
227
243
}
228
244
245
+ // -----
246
+
229
247
func @variant_loop_dialect () {
230
248
%ci0 = constant 0 : index
231
249
%ci10 = constant 10 : index
@@ -244,3 +262,33 @@ func @variant_loop_dialect() {
244
262
245
263
return
246
264
}
265
+
266
+ // -----
267
+
268
+ func @parallel_loop_with_invariant () {
269
+ %c0 = constant 0 : index
270
+ %c10 = constant 10 : index
271
+ %c1 = constant 1 : index
272
+ %c7 = constant 7 : i32
273
+ %c8 = constant 8 : i32
274
+ loop.parallel (%arg0 , %arg1 ) = (%c0 , %c0 ) to (%c10 , %c10 ) step (%c1 , %c1 ) {
275
+ %v0 = addi %c7 , %c8 : i32
276
+ %v3 = addi %arg0 , %arg1 : index
277
+ }
278
+
279
+ // CHECK-LABEL: func @parallel_loop_with_invariant
280
+ // CHECK: %c0 = constant 0 : index
281
+ // CHECK-NEXT: %c10 = constant 10 : index
282
+ // CHECK-NEXT: %c1 = constant 1 : index
283
+ // CHECK-NEXT: %c7_i32 = constant 7 : i32
284
+ // CHECK-NEXT: %c8_i32 = constant 8 : i32
285
+ // CHECK-NEXT: addi %c7_i32, %c8_i32 : i32
286
+ // CHECK-NEXT: loop.parallel (%arg0, %arg1) = (%c0, %c0) to (%c10, %c10) step (%c1, %c1)
287
+ // CHECK-NEXT: addi %arg0, %arg1 : index
288
+ // CHECK-NEXT: yield
289
+ // CHECK-NEXT: }
290
+ // CHECK-NEXT: return
291
+
292
+ return
293
+ }
294
+
0 commit comments