1 // RUN: mlir-opt -allow-unregistered-dialect %s | FileCheck %s
3 // Identity maps used in trivial compositions in MemRefs are optimized away.
4 #map0 = affine_map<(i, j) -> (i, j)>
5 #map1 = affine_map<(i, j)[s0] -> (i, j)>
7 // CHECK: #map{{[0-9]*}} = affine_map<() -> (0)>
8 // A map may have 0 inputs.
9 // However, an affine.apply always takes at least one input.
10 #map2 = affine_map<() -> (0)>
12 // All the maps in the following block are equivalent and are unique'd as one
13 // map. Therefore there should be only one output and we explicitly CHECK-NOT
15 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1) -> (d0 + 1, d1 * 4 + 2)>
16 #map3 = affine_map<(i, j) -> (i+1, 4*j + 2)>
17 // CHECK-NOT: #map3{{[a-z]}}
18 #map3a = affine_map<(i, j) -> (1+i, 4*j + 2)>
19 #map3b = affine_map<(i, j) -> (2 + 3 - 2*2 + i, 4*j + 2)>
20 #map3c = affine_map<(i, j) -> (i +1 + 0, 4*j + 2)>
21 #map3d = affine_map<(i, j) -> (i + 3 + 2 - 4, 4*j + 2)>
22 #map3e = affine_map<(i, j) -> (1*i+3*2-2*2-1, 4*j + 2)>
23 #map3f = affine_map<(i, j) -> (i + 1, 4*j*1 + 2)>
24 #map3g = affine_map<(i, j) -> (i + 1, 2*2*j + 2)>
25 #map3h = affine_map<(i, j) -> (i + 1, 2*j*2 + 2)>
26 #map3i = affine_map<(i, j) -> (i + 1, j*2*2 + 2)>
27 #map3j = affine_map<(i, j) -> (i + 1, j*1*4 + 2)>
28 #map3k = affine_map<(i, j) -> (i + 1, j*4*1 + 2)>
30 // The following reduction should be unique'd out too but such expression
31 // simplification is not performed for IR parsing, but only through analyses
33 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1) -> (d1 - d0 + (d0 - d1 + 1) * 2 + d1 - 1, d1 * 4 + 2)>
34 #map3l = affine_map<(i, j) -> ((j - i) + 2*(i - j + 1) + j - 1 + 0, j + j + 1 + j + j + 1)>
36 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1) -> (d0 + 2, d1)>
37 #map4 = affine_map<(i, j) -> (3+3-2*2+i, j)>
39 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1)[s0] -> (d0 + s0, d1)>
40 #map5 = affine_map<(i, j)[s0] -> (i + s0, j)>
42 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1)[s0] -> (d0 + s0, d1 + 5)>
43 #map6 = affine_map<(i, j)[s0] -> (i + s0, j + 5)>
45 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1)[s0] -> (d0 + d1 + s0, d1)>
46 #map7 = affine_map<(i, j)[s0] -> (i + j + s0, j)>
48 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1)[s0] -> (d0 + d1 + s0 + 5, d1)>
49 #map8 = affine_map<(i, j)[s0] -> (5 + i + j + s0, j)>
51 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1)[s0] -> (d0 + d1 + 5, d1)>
52 #map9 = affine_map<(i, j)[s0] -> ((i + j) + 5, j)>
54 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1)[s0] -> (d0 + d1 + 5, d1)>
55 #map10 = affine_map<(i, j)[s0] -> (i + (j + 5), j)>
57 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1)[s0] -> (d0 * 2, d1 * 3)>
58 #map11 = affine_map<(i, j)[s0] -> (2*i, 3*j)>
60 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1)[s0] -> (d0 + (d1 + s0 * 3) * 5 + 12, d1)>
61 #map12 = affine_map<(i, j)[s0] -> (i + 2*6 + 5*(j+s0*3), j)>
63 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1)[s0] -> (d0 * 5 + d1, d1)>
64 #map13 = affine_map<(i, j)[s0] -> (5*i + j, j)>
66 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1)[s0] -> (d0 + d1, d1)>
67 #map14 = affine_map<(i, j)[s0] -> ((i + j), (j))>
69 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1)[s0] -> (d0 + d1 + 7, d1 + 3)>
70 #map15 = affine_map<(i, j)[s0] -> ((i + j + 2) + 5, (j)+3)>
72 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1)[s0] -> (d0, 0)>
73 #map16 = affine_map<(i, j)[s1] -> (i, 0)>
75 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1)[s0] -> (d0, d1 * s0)>
76 #map17 = affine_map<(i, j)[s0] -> (i, s0*j)>
78 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1) -> (d0, d0 * 3 + d1)>
79 #map19 = affine_map<(i, j) -> (i, 3*i + j)>
81 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1) -> (d0, d0 + d1 * 3)>
82 #map20 = affine_map<(i, j) -> (i, i + 3*j)>
84 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1)[s0] -> (d0, d0 * ((s0 * s0) * 9) + 3)>
85 #map18 = affine_map<(i, j)[N] -> (i, 2 + N*N*9*i + 1)>
87 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1) -> (1, d0 + d1 * 3 + 5)>
88 #map21 = affine_map<(i, j) -> (1, i + 3*j + 5)>
90 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1)[s0] -> (s0 * 5, d0 + d1 * 3 + d0 * 5)>
91 #map22 = affine_map<(i, j)[s0] -> (5*s0, i + 3*j + 5*i)>
93 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1)[s0, s1] -> (d0 * (s0 * s1), d1)>
94 #map23 = affine_map<(i, j)[s0, s1] -> (i*(s0*s1), j)>
96 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1)[s0, s1] -> (d0, d1 mod 5)>
97 #map24 = affine_map<(i, j)[s0, s1] -> (i, j mod 5)>
99 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1)[s0, s1] -> (d0, d1 floordiv 5)>
100 #map25 = affine_map<(i, j)[s0, s1] -> (i, j floordiv 5)>
102 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1)[s0, s1] -> (d0, d1 ceildiv 5)>
103 #map26 = affine_map<(i, j)[s0, s1] -> (i, j ceildiv 5)>
105 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1)[s0, s1] -> (d0, d0 - d1 - 5)>
106 #map29 = affine_map<(i, j)[s0, s1] -> (i, i - j - 5)>
108 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1)[s0, s1] -> (d0, d0 - d1 * s1 + 2)>
109 #map30 = affine_map<(i, j)[M, N] -> (i, i - N*j + 2)>
111 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1)[s0, s1] -> (d0 * -5, d1 * -3, -2, -(d0 + d1), -s0)>
112 #map32 = affine_map<(i, j)[s0, s1] -> (-5*i, -3*j, -2, -1*(i+j), -1*s0)>
114 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1) -> (-4, -d0)>
115 #map33 = affine_map<(i, j) -> (-2+-5-(-3), -1*i)>
117 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1)[s0, s1] -> (d0, d1 floordiv s0, d1 mod s0)>
118 #map34 = affine_map<(i, j)[s0, s1] -> (i, j floordiv s0, j mod s0)>
120 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1, d2)[s0, s1, s2] -> ((d0 * s1) * s2 + d1 * s1 + d2)>
121 #map35 = affine_map<(i, j, k)[s0, s1, s2] -> (i*s1*s2 + j*s1 + k)>
124 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1) -> (8, 4, 1, 3, 2, 4)>
125 #map36 = affine_map<(i, j) -> (5+3, 2*2, 8-7, 100 floordiv 32, 5 mod 3, 10 ceildiv 3)>
126 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1) -> (4, 11, 512, 15)>
127 #map37 = affine_map<(i, j) -> (5 mod 3 + 2, 5*3 - 4, 128 * (500 ceildiv 128), 40 floordiv 7 * 3)>
129 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1) -> (d0 * 2 + 1, d1 + 2)>
130 #map38 = affine_map<(i, j) -> (1 + i*2, 2 + j)>
132 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1)[s0, s1] -> (d0 * s0, d0 + s0, d0 + 2, d1 * 2, s1 * 2, s0 + 2)>
133 #map39 = affine_map<(i, j)[M, N] -> (i*M, M + i, 2+i, j*2, N*2, 2 + M)>
135 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1)[s0] -> ((d0 * 5) floordiv 4, (d1 ceildiv 7) mod s0)>
136 #map43 = affine_map<(i, j) [s0] -> ( i * 5 floordiv 4, j ceildiv 7 mod s0)>
138 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1) -> (d0 - d1 * 2, (d1 * 6) floordiv 4)>
139 #map44 = affine_map<(i, j) -> (i - 2*j, j * 6 floordiv 4)>
142 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1, d2)[s0] -> (d0 + d1 + d2 + 1, d2 + d1, (d0 * s0) * 8)>
143 #map45 = affine_map<(i, j, k) [N] -> (1 + i + 3 + j - 3 + k, k + 5 + j - 5, 2*i*4*N)>
145 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1, d2) -> (0, d1, d0 * 2, 0)>
146 #map46 = affine_map<(i, j, k) -> (i*0, 1*j, i * 128 floordiv 64, j * 0 floordiv 64)>
148 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1, d2) -> (d0, d0 * 4, 0, 0, 0)>
149 #map47 = affine_map<(i, j, k) -> (i * 64 ceildiv 64, i * 512 ceildiv 128, 4 * j mod 4, 4*j*4 mod 8, k mod 1)>
151 // floordiv should resolve similarly to ceildiv and be unique'd out.
152 // CHECK-NOT: #map48{{[a-z]}}
153 #map48 = affine_map<(i, j, k) -> (i * 64 floordiv 64, i * 512 floordiv 128, 4 * j mod 4, 4*j*4 mod 8)>
155 // Simplifications for mod using known GCD's of the LHS expr.
156 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1)[s0] -> (0, 0, 0, 1)>
157 #map49 = affine_map<(i, j)[s0] -> ( (i * 4 + 8) mod 4, 32 * j * s0 * 8 mod 256, (4*i + (j * (s0 * 2))) mod 2, (4*i + 3) mod 2)>
159 // Floordiv, ceildiv divide by one.
160 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1)[s0] -> (d0 * 2 + 1, d1 + s0)>
161 #map50 = affine_map<(i, j)[s0] -> ( (i * 2 + 1) ceildiv 1, (j + s0) floordiv 1)>
163 // floordiv, ceildiv, and mod where LHS is negative.
164 // CHECK: #map{{[0-9]*}} = affine_map<(d0) -> (-2, 1, -1)>
165 #map51 = affine_map<(i) -> (-5 floordiv 3, -5 mod 3, -5 ceildiv 3)>
167 // Parenthesis elision.
168 // CHECK: #map{{[0-9]*}} = affine_map<(d0) -> (d0 * 16 - (d0 + 1) + 15)>
169 #map52 = affine_map<(d0) -> (16*d0 + ((d0 + 1) * -1) + 15)>
171 // CHECK: #map{{[0-9]*}} = affine_map<(d0) -> (d0 - (d0 + 1))>
172 #map53 = affine_map<(d0) -> (d0 - (d0 + 1))>
174 // CHECK: #map{{[0-9]*}} = affine_map<(d0)[s0] -> ((-s0) floordiv 4, d0 floordiv -1)>
175 #map54 = affine_map<(d0)[s0] -> (-s0 floordiv 4, d0 floordiv -1)>
177 // CHECK: #map{{[0-9]*}} = affine_map<() -> ()>
178 #map55 = affine_map<() -> ()>
180 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1) -> (d0, d0 * 2 + d1 * 4 + 2, 1, 2, (d0 * 4) mod 8)>
181 #map56 = affine_map<(d0, d1) -> ((4*d0 + 2) floordiv 4, (4*d0 + 8*d1 + 5) floordiv 2, (2*d0 + 4*d1 + 3) mod 2, (3*d0 - 4) mod 3, (4*d0 + 8*d1) mod 8)>
183 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1) -> (d1, d0, 0)>
184 #map57 = affine_map<(d0, d1) -> (d0 - d0 + d1, -d0 + d0 + d0, (1 + d0 + d1 floordiv 4) - (d0 + d1 floordiv 4 + 1))>
186 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1) -> (d0 * 3, (d0 + d1) * 2, d0 mod 2)>
187 #map58 = affine_map<(d0, d1) -> (4*d0 - 2*d0 + d0, (d0 + d1) + (d0 + d1), 2 * (d0 mod 2) - d0 mod 2)>
189 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1) -> (d0 mod 5, (d1 mod 35) mod 4)>
190 #map59 = affine_map<(d0, d1) -> ((d0 mod 35) mod 5, (d1 mod 35) mod 4)>
192 // Check if parser can parse affine_map with identifiers that collide with
194 #map60 = affine_map<(i0, i1) -> (i0, i1)>
196 // Check if parser can parse affine_map with identifiers that collide with
197 // reserved keywords.
198 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1)[s0, s1] -> (-d0 + s0, -d1 + s1)>
199 #map61 = affine_map<(d0, d1)[step, loc] -> (step - d0, loc - d1)>
201 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1)[s0, s1] -> (-d0 + s0 floordiv 2, -d1 + s1 mod 3)>
202 #map62 = affine_map<(d0, d1)[mod, floordiv] -> (mod floordiv 2 - d0, floordiv mod 3 - d1)>
204 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1)[s0, s1] -> (-d0 + s1 floordiv 2, -d1 + s0 mod 3)>
205 #map63 = affine_map<(d0, d1)[mod, floordiv] -> (floordiv floordiv 2 - d0, mod mod 3 - d1)>
207 // CHECK: #map{{[0-9]*}} = affine_map<(d0, d1)[s0] -> (d0 + d1 + s0)>
208 #map64 = affine_map<(i0, i1)[mod] -> (i0 + i1 + mod)>
210 // Single identity maps are removed.
211 // CHECK: @f0(memref<2x4xi8, 1>)
212 func.func private @f0(memref<2x4xi8, #map0, 1>)
214 // Single identity maps are removed.
215 // CHECK: @f1(memref<2x4xi8, 1>)
216 func.func private @f1(memref<2x4xi8, #map1, 1>)
218 // CHECK: @f2(memref<i8, #map{{[0-9]*}}, 1>)
219 func.func private @f2(memref<i8, #map2, 1>)
221 // CHECK: @f3(memref<2x4xi8, #map{{[0-9]*}}, 1>)
222 func.func private @f3(memref<2x4xi8, #map3, 1>)
223 // CHECK: @f3a(memref<2x4xi8, #map{{[0-9]*}}, 1>)
224 func.func private @f3a(memref<2x4xi8, #map3a, 1>)
225 // CHECK: @f3b(memref<2x4xi8, #map{{[0-9]*}}, 1>)
226 func.func private @f3b(memref<2x4xi8, #map3b, 1>)
227 // CHECK: @f3c(memref<2x4xi8, #map{{[0-9]*}}, 1>)
228 func.func private @f3c(memref<2x4xi8, #map3c, 1>)
229 // CHECK: @f3d(memref<2x4xi8, #map{{[0-9]*}}, 1>)
230 func.func private @f3d(memref<2x4xi8, #map3d, 1>)
231 // CHECK: @f3e(memref<2x4xi8, #map{{[0-9]*}}, 1>)
232 func.func private @f3e(memref<2x4xi8, #map3e, 1>)
233 // CHECK: @f3f(memref<2x4xi8, #map{{[0-9]*}}, 1>)
234 func.func private @f3f(memref<2x4xi8, #map3f, 1>)
235 // CHECK: @f3g(memref<2x4xi8, #map{{[0-9]*}}, 1>)
236 func.func private @f3g(memref<2x4xi8, #map3g, 1>)
237 // CHECK: @f3h(memref<2x4xi8, #map{{[0-9]*}}, 1>)
238 func.func private @f3h(memref<2x4xi8, #map3h, 1>)
239 // CHECK: @f3i(memref<2x4xi8, #map{{[0-9]*}}, 1>)
240 func.func private @f3i(memref<2x4xi8, #map3i, 1>)
241 // CHECK: @f3j(memref<2x4xi8, #map{{[0-9]*}}, 1>)
242 func.func private @f3j(memref<2x4xi8, #map3j, 1>)
243 // CHECK: @f3k(memref<2x4xi8, #map{{[0-9]*}}, 1>)
244 func.func private @f3k(memref<2x4xi8, #map3k, 1>)
245 // CHECK: @f3l(memref<2x4xi8, #map{{[0-9]*}}, 1>)
246 func.func private @f3l(memref<2x4xi8, #map3l, 1>)
248 // CHECK: @f4(memref<2x4xi8, #map{{[0-9]*}}, 1>)
249 func.func private @f4(memref<2x4xi8, #map4, 1>)
251 // CHECK: @f5(memref<2x4xi8, #map{{[0-9]*}}, 1>)
252 func.func private @f5(memref<2x4xi8, #map5, 1>)
254 // CHECK: @f6(memref<2x4xi8, #map{{[0-9]*}}, 1>)
255 func.func private @f6(memref<2x4xi8, #map6, 1>)
257 // CHECK: @f7(memref<2x4xi8, #map{{[0-9]*}}, 1>)
258 func.func private @f7(memref<2x4xi8, #map7, 1>)
260 // CHECK: @f8(memref<2x4xi8, #map{{[0-9]*}}, 1>)
261 func.func private @f8(memref<2x4xi8, #map8, 1>)
263 // CHECK: @f9(memref<2x4xi8, #map{{[0-9]*}}, 1>)
264 func.func private @f9(memref<2x4xi8, #map9, 1>)
266 // CHECK: @f10(memref<2x4xi8, #map{{[0-9]*}}, 1>)
267 func.func private @f10(memref<2x4xi8, #map10, 1>)
269 // CHECK: @f11(memref<2x4xi8, #map{{[0-9]*}}, 1>)
270 func.func private @f11(memref<2x4xi8, #map11, 1>)
272 // CHECK: @f12(memref<2x4xi8, #map{{[0-9]*}}, 1>)
273 func.func private @f12(memref<2x4xi8, #map12, 1>)
275 // CHECK: @f13(memref<2x4xi8, #map{{[0-9]*}}, 1>)
276 func.func private @f13(memref<2x4xi8, #map13, 1>)
278 // CHECK: @f14(memref<2x4xi8, #map{{[0-9]*}}, 1>)
279 func.func private @f14(memref<2x4xi8, #map14, 1>)
281 // CHECK: @f15(memref<2x4xi8, #map{{[0-9]*}}, 1>)
282 func.func private @f15(memref<2x4xi8, #map15, 1>)
284 // CHECK: @f16(memref<2x4xi8, #map{{[0-9]*}}, 1>)
285 func.func private @f16(memref<2x4xi8, #map16, 1>)
287 // CHECK: @f17(memref<2x4xi8, #map{{[0-9]*}}, 1>)
288 func.func private @f17(memref<2x4xi8, #map17, 1>)
290 // CHECK: @f19(memref<2x4xi8, #map{{[0-9]*}}, 1>)
291 func.func private @f19(memref<2x4xi8, #map19, 1>)
293 // CHECK: @f20(memref<2x4xi8, #map{{[0-9]*}}, 1>)
294 func.func private @f20(memref<2x4xi8, #map20, 1>)
296 // CHECK: @f18(memref<2x4xi8, #map{{[0-9]*}}, 1>)
297 func.func private @f18(memref<2x4xi8, #map18, 1>)
299 // CHECK: @f21(memref<2x4xi8, #map{{[0-9]*}}, 1>)
300 func.func private @f21(memref<2x4xi8, #map21, 1>)
302 // CHECK: @f22(memref<2x4xi8, #map{{[0-9]*}}, 1>)
303 func.func private @f22(memref<2x4xi8, #map22, 1>)
305 // CHECK: @f23(memref<2x4xi8, #map{{[0-9]*}}, 1>)
306 func.func private @f23(memref<2x4xi8, #map23, 1>)
308 // CHECK: @f24(memref<2x4xi8, #map{{[0-9]*}}, 1>)
309 func.func private @f24(memref<2x4xi8, #map24, 1>)
311 // CHECK: @f25(memref<2x4xi8, #map{{[0-9]*}}, 1>)
312 func.func private @f25(memref<2x4xi8, #map25, 1>)
314 // CHECK: @f26(memref<2x4xi8, #map{{[0-9]*}}, 1>)
315 func.func private @f26(memref<2x4xi8, #map26, 1>)
317 // CHECK: @f29(memref<2x4xi8, #map{{[0-9]*}}, 1>)
318 func.func private @f29(memref<2x4xi8, #map29, 1>)
320 // CHECK: @f30(memref<2x4xi8, #map{{[0-9]*}}, 1>)
321 func.func private @f30(memref<2x4xi8, #map30, 1>)
323 // CHECK: @f32(memref<2x4xi8, #map{{[0-9]*}}, 1>)
324 func.func private @f32(memref<2x4xi8, #map32, 1>)
326 // CHECK: @f33(memref<2x4xi8, #map{{[0-9]*}}, 1>)
327 func.func private @f33(memref<2x4xi8, #map33, 1>)
329 // CHECK: @f34(memref<2x4xi8, #map{{[0-9]*}}, 1>)
330 func.func private @f34(memref<2x4xi8, #map34, 1>)
332 // CHECK: @f35(memref<2x4x4xi8, #map{{[0-9]*}}, 1>)
333 func.func private @f35(memref<2x4x4xi8, #map35, 1>)
335 // CHECK: @f36(memref<2x4xi8, #map{{[0-9]*}}, 1>)
336 func.func private @f36(memref<2x4xi8, #map36, 1>)
338 // CHECK: @f37(memref<2x4xi8, #map{{[0-9]*}}, 1>)
339 func.func private @f37(memref<2x4xi8, #map37, 1>)
341 // CHECK: @f38(memref<2x4xi8, #map{{[0-9]*}}, 1>)
342 func.func private @f38(memref<2x4xi8, #map38, 1>)
344 // CHECK: @f39(memref<2x4xi8, #map{{[0-9]*}}, 1>)
345 func.func private @f39(memref<2x4xi8, #map39, 1>)
347 // CHECK: @f43(memref<2x4xi8, #map{{[0-9]*}}>)
348 func.func private @f43(memref<2x4xi8, #map43>)
350 // CHECK: @f44(memref<2x4xi8, #map{{[0-9]*}}>)
351 func.func private @f44(memref<2x4xi8, #map44>)
353 // CHECK: @f45(memref<100x100x100xi8, #map{{[0-9]*}}>)
354 func.func private @f45(memref<100x100x100xi8, #map45>)
356 // CHECK: @f46(memref<100x100x100xi8, #map{{[0-9]*}}>)
357 func.func private @f46(memref<100x100x100xi8, #map46>)
359 // CHECK: @f47(memref<100x100x100xi8, #map{{[0-9]*}}>)
360 func.func private @f47(memref<100x100x100xi8, #map47>)
362 // CHECK: @f48(memref<100x100x100xi8, #map{{[0-9]*}}>)
363 func.func private @f48(memref<100x100x100xi8, #map48>)
365 // CHECK: @f49(memref<100x100xi8, #map{{[0-9]*}}>)
366 func.func private @f49(memref<100x100xi8, #map49>)
368 // CHECK: @f50(memref<100x100xi8, #map{{[0-9]*}}>)
369 func.func private @f50(memref<100x100xi8, #map50>)
371 // CHECK: @f51(memref<1xi8, #map{{[0-9]*}}>)
372 func.func private @f51(memref<1xi8, #map51>)
374 // CHECK: @f52(memref<1xi8, #map{{[0-9]*}}>)
375 func.func private @f52(memref<1xi8, #map52>)
377 // CHECK: @f53(memref<1xi8, #map{{[0-9]*}}>)
378 func.func private @f53(memref<1xi8, #map53>)
380 // CHECK: @f54(memref<10xi32, #map{{[0-9]*}}>)
381 func.func private @f54(memref<10xi32, #map54>)
383 // CHECK: "foo.op"() {map = #map{{[0-9]*}}} : () -> ()
384 "foo.op"() {map = #map55} : () -> ()
386 // CHECK: @f56(memref<1x1xi8, #map{{[0-9]*}}>)
387 func.func private @f56(memref<1x1xi8, #map56>)
389 // CHECK: "f57"() {map = #map{{[0-9]*}}} : () -> ()
390 "f57"() {map = #map57} : () -> ()
392 // CHECK: "f58"() {map = #map{{[0-9]*}}} : () -> ()
393 "f58"() {map = #map58} : () -> ()
395 // CHECK: "f59"() {map = #map{{[0-9]*}}} : () -> ()
396 "f59"() {map = #map59} : () -> ()
398 // CHECK: "f60"() {map = #map{{[0-9]*}}} : () -> ()
399 "f60"() {map = #map60} : () -> ()
401 // CHECK: "f61"() {map = #map{{[0-9]*}}} : () -> ()
402 "f61"() {map = #map61} : () -> ()
404 // CHECK: "f62"() {map = #map{{[0-9]*}}} : () -> ()
405 "f62"() {map = #map62} : () -> ()
407 // CHECK: "f63"() {map = #map{{[0-9]*}}} : () -> ()
408 "f63"() {map = #map63} : () -> ()
410 // CHECK: "f64"() {map = #map{{[0-9]*}}} : () -> ()
411 "f64"() {map = #map64} : () -> ()