================================================================================ affine_map with indexing and sum ================================================================================ #inline_map_minmax_loop2 = affine_map<()[s0] -> (100, s0 + 1)> #map0 = affine_map<(i) -> ()> #bound_map1 = affine_map<(i, j)[s] -> (i + j + s)> -------------------------------------------------------------------------------- (toplevel (attribute_alias_def (attribute_value (builtin_attribute (affine_map (bare_id) (integer_literal) (bare_id) (integer_literal))))) (attribute_alias_def (attribute_value (builtin_attribute (affine_map (bare_id))))) (attribute_alias_def (attribute_value (builtin_attribute (affine_map (bare_id) (bare_id) (bare_id) (bare_id) (bare_id) (bare_id)))))) ================================================================================ affine_set expression ================================================================================ #set0 = affine_set<(i)[N, M] : (i >= 0, -i + N >= 0, N - 5 == 0, -i + M + 1 >= 0)> -------------------------------------------------------------------------------- (toplevel (attribute_alias_def (attribute_value (builtin_attribute (affine_set (bare_id) (bare_id) (bare_id) (bare_id) (integer_literal) (bare_id) (bare_id) (integer_literal) (bare_id) (integer_literal) (integer_literal) (bare_id) (bare_id) (integer_literal) (integer_literal)))))) ================================================================================ affine.min and affine.max with non-trivial affine maps ================================================================================ func.func @affine_min(%arg0 : index, %arg1 : index, %arg2 : index) { %0 = affine.min affine_map<(d0)[s0] -> (1000, d0 + 512, s0)> (%arg0)[%arg1] %1 = affine.min affine_map<(d0, d1)[s0] -> (d0 - d1, s0 + 512)> (%arg0, %arg1)[%arg2] %2 = affine.min affine_map<()[s0, s1] -> (s0 - s1, 11)> ()[%arg1, %arg2] %3 = affine.min affine_map<()[] -> (77, 78, 79)> ()[] return } func.func @affine_max(%arg0 : index, %arg1 : index, %arg2 : index) { %0 = affine.max affine_map<(d0)[s0] -> (1000, d0 + 512, s0)> (%arg0)[%arg1] %1 = affine.max affine_map<(d0, d1)[s0] -> (d0 - d1, s0 + 512)> (%arg0, %arg1)[%arg2] %2 = affine.max affine_map<()[s0, s1] -> (s0 - s1, 11)> ()[%arg1, %arg2] %3 = affine.max affine_map<()[] -> (77, 78, 79)> ()[] return } -------------------------------------------------------------------------------- (toplevel (operation (custom_operation (func_dialect (symbol_ref_id) (func_arg_list (value_use) (type (builtin_type (index_type))) (value_use) (type (builtin_type (index_type))) (value_use) (type (builtin_type (index_type)))) (region (entry_block (operation (op_result (value_use)) (custom_operation (affine_dialect (attribute (builtin_attribute (affine_map (bare_id) (bare_id) (integer_literal) (bare_id) (integer_literal) (bare_id)))) (value_use) (value_use)))) (operation (op_result (value_use)) (custom_operation (affine_dialect (attribute (builtin_attribute (affine_map (bare_id) (bare_id) (bare_id) (bare_id) (bare_id) (bare_id) (integer_literal)))) (value_use) (value_use) (value_use)))) (operation (op_result (value_use)) (custom_operation (affine_dialect (attribute (builtin_attribute (affine_map (bare_id) (bare_id) (bare_id) (bare_id) (integer_literal)))) (value_use) (value_use)))) (operation (op_result (value_use)) (custom_operation (affine_dialect (attribute (builtin_attribute (affine_map (integer_literal) (integer_literal) (integer_literal))))))) (operation (custom_operation (func_dialect)))))))) (operation (custom_operation (func_dialect (symbol_ref_id) (func_arg_list (value_use) (type (builtin_type (index_type))) (value_use) (type (builtin_type (index_type))) (value_use) (type (builtin_type (index_type)))) (region (entry_block (operation (op_result (value_use)) (custom_operation (affine_dialect (attribute (builtin_attribute (affine_map (bare_id) (bare_id) (integer_literal) (bare_id) (integer_literal) (bare_id)))) (value_use) (value_use)))) (operation (op_result (value_use)) (custom_operation (affine_dialect (attribute (builtin_attribute (affine_map (bare_id) (bare_id) (bare_id) (bare_id) (bare_id) (bare_id) (integer_literal)))) (value_use) (value_use) (value_use)))) (operation (op_result (value_use)) (custom_operation (affine_dialect (attribute (builtin_attribute (affine_map (bare_id) (bare_id) (bare_id) (bare_id) (integer_literal)))) (value_use) (value_use)))) (operation (op_result (value_use)) (custom_operation (affine_dialect (attribute (builtin_attribute (affine_map (integer_literal) (integer_literal) (integer_literal))))))) (operation (custom_operation (func_dialect))))))))) ================================================================================ affine.dma_start and affine.dma_wait with complicated affine expressions ================================================================================ func.func @test4(%arg0 : index, %arg1 : index) { %0 = memref.alloc() : memref<100x100xf32> %1 = memref.alloc() : memref<100x100xf32, 2> %2 = memref.alloc() : memref<1xi32> %c64 = arith.constant 64 : index affine.for %i0 = 0 to 10 { affine.for %i1 = 0 to 10 { affine.dma_start %0[(%i0 + symbol(%arg0)) floordiv 3, %i1], %1[%i0, (%i1 + symbol(%arg1)) mod 9 + 7], %2[%i0 + %i1 + 11], %c64 : memref<100x100xf32>, memref<100x100xf32, 2>, memref<1xi32> affine.dma_wait %2[%i0 + %i1 + 11], %c64 : memref<1xi32> } } return } -------------------------------------------------------------------------------- (toplevel (operation (custom_operation (func_dialect (symbol_ref_id) (func_arg_list (value_use) (type (builtin_type (index_type))) (value_use) (type (builtin_type (index_type)))) (region (entry_block (operation (op_result (value_use)) (custom_operation (memref_dialect (type (builtin_type (memref_type (dim_list (float_type)))))))) (operation (op_result (value_use)) (custom_operation (memref_dialect (type (builtin_type (memref_type (dim_list (float_type)) (attribute_value (integer_literal)))))))) (operation (op_result (value_use)) (custom_operation (memref_dialect (type (builtin_type (memref_type (dim_list (integer_type)))))))) (operation (op_result (value_use)) (custom_operation (arith_dialect (integer_literal) (type (builtin_type (index_type)))))) (operation (custom_operation (affine_dialect (value_use) (integer_literal) (integer_literal) (region (entry_block (operation (custom_operation (affine_dialect (value_use) (integer_literal) (integer_literal) (region (entry_block (operation (custom_operation (affine_dialect (value_use) (value_use) (value_use) (integer_literal) (value_use) (value_use) (value_use) (value_use) (value_use) (integer_literal) (integer_literal) (value_use) (value_use) (value_use) (integer_literal) (value_use) (type (builtin_type (memref_type (dim_list (float_type))))) (type (builtin_type (memref_type (dim_list (float_type)) (attribute_value (integer_literal))))) (type (builtin_type (memref_type (dim_list (integer_type)))))))) (operation (custom_operation (affine_dialect (value_use) (value_use) (value_use) (integer_literal) (value_use) (type (builtin_type (memref_type (dim_list (integer_type)))))))))))))))))) (operation (custom_operation (func_dialect))))))))) ================================================================================ affine_map with complex affine expression ================================================================================ func.func @semiaffine_mod(%arg0: index, %arg1: index) -> index { %a = affine.apply affine_map<(d0)[s0] ->((-((d0 floordiv s0) * s0) + s0 * s0) mod s0)> (%arg0)[%arg1] return %a : index } func.func @semiaffine_floordiv(%arg0: index, %arg1: index) -> index { %a = affine.apply affine_map<(d0)[s0] ->((-((d0 floordiv s0) * s0) + ((2 * s0) mod (3 * s0))) floordiv s0)> (%arg0)[%arg1] return %a : index } -------------------------------------------------------------------------------- (toplevel (operation (custom_operation (func_dialect (symbol_ref_id) (func_arg_list (value_use) (type (builtin_type (index_type))) (value_use) (type (builtin_type (index_type)))) (func_return (type_list_attr_parens (type (builtin_type (index_type))))) (region (entry_block (operation (op_result (value_use)) (custom_operation (affine_dialect (attribute (builtin_attribute (affine_map (bare_id) (bare_id) (bare_id) (bare_id) (bare_id) (bare_id) (bare_id) (bare_id)))) (value_use) (value_use)))) (operation (custom_operation (func_dialect (value_use) (type (builtin_type (index_type))))))))))) (operation (custom_operation (func_dialect (symbol_ref_id) (func_arg_list (value_use) (type (builtin_type (index_type))) (value_use) (type (builtin_type (index_type)))) (func_return (type_list_attr_parens (type (builtin_type (index_type))))) (region (entry_block (operation (op_result (value_use)) (custom_operation (affine_dialect (attribute (builtin_attribute (affine_map (bare_id) (bare_id) (bare_id) (bare_id) (bare_id) (integer_literal) (bare_id) (integer_literal) (bare_id) (bare_id)))) (value_use) (value_use)))) (operation (custom_operation (func_dialect (value_use) (type (builtin_type (index_type))))))))))))