501 lines · plain
1================================================================================2affine_map with indexing and sum3================================================================================4#inline_map_minmax_loop2 = affine_map<()[s0] -> (100, s0 + 1)>5#map0 = affine_map<(i) -> ()>6#bound_map1 = affine_map<(i, j)[s] -> (i + j + s)>7--------------------------------------------------------------------------------8 9(toplevel10 (attribute_alias_def11 (attribute_value12 (builtin_attribute13 (affine_map14 (bare_id)15 (integer_literal)16 (bare_id)17 (integer_literal)))))18 (attribute_alias_def19 (attribute_value20 (builtin_attribute21 (affine_map22 (bare_id)))))23 (attribute_alias_def24 (attribute_value25 (builtin_attribute26 (affine_map27 (bare_id)28 (bare_id)29 (bare_id)30 (bare_id)31 (bare_id)32 (bare_id))))))33 34================================================================================35affine_set expression36================================================================================37#set0 = affine_set<(i)[N, M] : (i >= 0, -i + N >= 0, N - 5 == 0, -i + M + 1 >= 0)>38--------------------------------------------------------------------------------39 40(toplevel41 (attribute_alias_def42 (attribute_value43 (builtin_attribute44 (affine_set45 (bare_id)46 (bare_id)47 (bare_id)48 (bare_id)49 (integer_literal)50 (bare_id)51 (bare_id)52 (integer_literal)53 (bare_id)54 (integer_literal)55 (integer_literal)56 (bare_id)57 (bare_id)58 (integer_literal)59 (integer_literal))))))60 61================================================================================62affine.min and affine.max with non-trivial affine maps63================================================================================64func.func @affine_min(%arg0 : index, %arg1 : index, %arg2 : index) {65 %0 = affine.min affine_map<(d0)[s0] -> (1000, d0 + 512, s0)> (%arg0)[%arg1]66 %1 = affine.min affine_map<(d0, d1)[s0] -> (d0 - d1, s0 + 512)> (%arg0, %arg1)[%arg2]67 %2 = affine.min affine_map<()[s0, s1] -> (s0 - s1, 11)> ()[%arg1, %arg2]68 %3 = affine.min affine_map<()[] -> (77, 78, 79)> ()[]69 return70}71 72func.func @affine_max(%arg0 : index, %arg1 : index, %arg2 : index) {73 %0 = affine.max affine_map<(d0)[s0] -> (1000, d0 + 512, s0)> (%arg0)[%arg1]74 %1 = affine.max affine_map<(d0, d1)[s0] -> (d0 - d1, s0 + 512)> (%arg0, %arg1)[%arg2]75 %2 = affine.max affine_map<()[s0, s1] -> (s0 - s1, 11)> ()[%arg1, %arg2]76 %3 = affine.max affine_map<()[] -> (77, 78, 79)> ()[]77 return78}79--------------------------------------------------------------------------------80 81(toplevel82 (operation83 (custom_operation84 (func_dialect85 (symbol_ref_id)86 (func_arg_list87 (value_use)88 (type89 (builtin_type90 (index_type)))91 (value_use)92 (type93 (builtin_type94 (index_type)))95 (value_use)96 (type97 (builtin_type98 (index_type))))99 (region100 (entry_block101 (operation102 (op_result103 (value_use))104 (custom_operation105 (affine_dialect106 (attribute107 (builtin_attribute108 (affine_map109 (bare_id)110 (bare_id)111 (integer_literal)112 (bare_id)113 (integer_literal)114 (bare_id))))115 (value_use)116 (value_use))))117 (operation118 (op_result119 (value_use))120 (custom_operation121 (affine_dialect122 (attribute123 (builtin_attribute124 (affine_map125 (bare_id)126 (bare_id)127 (bare_id)128 (bare_id)129 (bare_id)130 (bare_id)131 (integer_literal))))132 (value_use)133 (value_use)134 (value_use))))135 (operation136 (op_result137 (value_use))138 (custom_operation139 (affine_dialect140 (attribute141 (builtin_attribute142 (affine_map143 (bare_id)144 (bare_id)145 (bare_id)146 (bare_id)147 (integer_literal))))148 (value_use)149 (value_use))))150 (operation151 (op_result152 (value_use))153 (custom_operation154 (affine_dialect155 (attribute156 (builtin_attribute157 (affine_map158 (integer_literal)159 (integer_literal)160 (integer_literal)))))))161 (operation162 (custom_operation163 (func_dialect))))))))164 (operation165 (custom_operation166 (func_dialect167 (symbol_ref_id)168 (func_arg_list169 (value_use)170 (type171 (builtin_type172 (index_type)))173 (value_use)174 (type175 (builtin_type176 (index_type)))177 (value_use)178 (type179 (builtin_type180 (index_type))))181 (region182 (entry_block183 (operation184 (op_result185 (value_use))186 (custom_operation187 (affine_dialect188 (attribute189 (builtin_attribute190 (affine_map191 (bare_id)192 (bare_id)193 (integer_literal)194 (bare_id)195 (integer_literal)196 (bare_id))))197 (value_use)198 (value_use))))199 (operation200 (op_result201 (value_use))202 (custom_operation203 (affine_dialect204 (attribute205 (builtin_attribute206 (affine_map207 (bare_id)208 (bare_id)209 (bare_id)210 (bare_id)211 (bare_id)212 (bare_id)213 (integer_literal))))214 (value_use)215 (value_use)216 (value_use))))217 (operation218 (op_result219 (value_use))220 (custom_operation221 (affine_dialect222 (attribute223 (builtin_attribute224 (affine_map225 (bare_id)226 (bare_id)227 (bare_id)228 (bare_id)229 (integer_literal))))230 (value_use)231 (value_use))))232 (operation233 (op_result234 (value_use))235 (custom_operation236 (affine_dialect237 (attribute238 (builtin_attribute239 (affine_map240 (integer_literal)241 (integer_literal)242 (integer_literal)))))))243 (operation244 (custom_operation245 (func_dialect)))))))))246 247================================================================================248affine.dma_start and affine.dma_wait with complicated affine expressions249================================================================================250func.func @test4(%arg0 : index, %arg1 : index) {251 %0 = memref.alloc() : memref<100x100xf32>252 %1 = memref.alloc() : memref<100x100xf32, 2>253 %2 = memref.alloc() : memref<1xi32>254 %c64 = arith.constant 64 : index255 affine.for %i0 = 0 to 10 {256 affine.for %i1 = 0 to 10 {257 affine.dma_start %0[(%i0 + symbol(%arg0)) floordiv 3, %i1],258 %1[%i0, (%i1 + symbol(%arg1)) mod 9 + 7],259 %2[%i0 + %i1 + 11], %c64260 : memref<100x100xf32>, memref<100x100xf32, 2>, memref<1xi32>261 affine.dma_wait %2[%i0 + %i1 + 11], %c64 : memref<1xi32>262 }263 }264 return265}266--------------------------------------------------------------------------------267 268(toplevel269 (operation270 (custom_operation271 (func_dialect272 (symbol_ref_id)273 (func_arg_list274 (value_use)275 (type276 (builtin_type277 (index_type)))278 (value_use)279 (type280 (builtin_type281 (index_type))))282 (region283 (entry_block284 (operation285 (op_result286 (value_use))287 (custom_operation288 (memref_dialect289 (type290 (builtin_type291 (memref_type292 (dim_list293 (float_type))))))))294 (operation295 (op_result296 (value_use))297 (custom_operation298 (memref_dialect299 (type300 (builtin_type301 (memref_type302 (dim_list303 (float_type))304 (attribute_value305 (integer_literal))))))))306 (operation307 (op_result308 (value_use))309 (custom_operation310 (memref_dialect311 (type312 (builtin_type313 (memref_type314 (dim_list315 (integer_type))))))))316 (operation317 (op_result318 (value_use))319 (custom_operation320 (arith_dialect321 (integer_literal)322 (type323 (builtin_type324 (index_type))))))325 (operation326 (custom_operation327 (affine_dialect328 (value_use)329 (integer_literal)330 (integer_literal)331 (region332 (entry_block333 (operation334 (custom_operation335 (affine_dialect336 (value_use)337 (integer_literal)338 (integer_literal)339 (region340 (entry_block341 (operation342 (custom_operation343 (affine_dialect344 (value_use)345 (value_use)346 (value_use)347 (integer_literal)348 (value_use)349 (value_use)350 (value_use)351 (value_use)352 (value_use)353 (integer_literal)354 (integer_literal)355 (value_use)356 (value_use)357 (value_use)358 (integer_literal)359 (value_use)360 (type361 (builtin_type362 (memref_type363 (dim_list364 (float_type)))))365 (type366 (builtin_type367 (memref_type368 (dim_list369 (float_type))370 (attribute_value371 (integer_literal)))))372 (type373 (builtin_type374 (memref_type375 (dim_list376 (integer_type))))))))377 (operation378 (custom_operation379 (affine_dialect380 (value_use)381 (value_use)382 (value_use)383 (integer_literal)384 (value_use)385 (type386 (builtin_type387 (memref_type388 (dim_list389 (integer_type))))))))))))))))))390 (operation391 (custom_operation392 (func_dialect)))))))))393 394================================================================================395affine_map with complex affine expression396================================================================================397func.func @semiaffine_mod(%arg0: index, %arg1: index) -> index {398 %a = affine.apply affine_map<(d0)[s0] ->((-((d0 floordiv s0) * s0) + s0 * s0) mod s0)> (%arg0)[%arg1]399 return %a : index400}401 402func.func @semiaffine_floordiv(%arg0: index, %arg1: index) -> index {403 %a = affine.apply affine_map<(d0)[s0] ->((-((d0 floordiv s0) * s0) + ((2 * s0) mod (3 * s0))) floordiv s0)> (%arg0)[%arg1]404 return %a : index405}406--------------------------------------------------------------------------------407 408(toplevel409 (operation410 (custom_operation411 (func_dialect412 (symbol_ref_id)413 (func_arg_list414 (value_use)415 (type416 (builtin_type417 (index_type)))418 (value_use)419 (type420 (builtin_type421 (index_type))))422 (func_return423 (type_list_attr_parens424 (type425 (builtin_type426 (index_type)))))427 (region428 (entry_block429 (operation430 (op_result431 (value_use))432 (custom_operation433 (affine_dialect434 (attribute435 (builtin_attribute436 (affine_map437 (bare_id)438 (bare_id)439 (bare_id)440 (bare_id)441 (bare_id)442 (bare_id)443 (bare_id)444 (bare_id))))445 (value_use)446 (value_use))))447 (operation448 (custom_operation449 (func_dialect450 (value_use)451 (type452 (builtin_type453 (index_type)))))))))))454 (operation455 (custom_operation456 (func_dialect457 (symbol_ref_id)458 (func_arg_list459 (value_use)460 (type461 (builtin_type462 (index_type)))463 (value_use)464 (type465 (builtin_type466 (index_type))))467 (func_return468 (type_list_attr_parens469 (type470 (builtin_type471 (index_type)))))472 (region473 (entry_block474 (operation475 (op_result476 (value_use))477 (custom_operation478 (affine_dialect479 (attribute480 (builtin_attribute481 (affine_map482 (bare_id)483 (bare_id)484 (bare_id)485 (bare_id)486 (bare_id)487 (integer_literal)488 (bare_id)489 (integer_literal)490 (bare_id)491 (bare_id))))492 (value_use)493 (value_use))))494 (operation495 (custom_operation496 (func_dialect497 (value_use)498 (type499 (builtin_type500 (index_type))))))))))))501