@@ -977,3 +977,32 @@ module {
977977// CHECK-DAG: %[[T3:.+]] = arith.addf %[[T2]], %[[B1]]
978978// CHECK: linalg.yield %[[T3]] : f32
979979// CHECK: return %[[GENERIC]]
980+
981+ // -----
982+
983+ #map = affine_map <(d0 , d1 , d2 ) -> (d1 , d2 )>
984+ #map1 = affine_map <(d0 , d1 , d2 ) -> (d0 , d1 , d2 )>
985+ #map2 = affine_map <(d0 , d1 ) -> (d0 , d1 floordiv 4 , d1 mod 4 )>
986+ #map3 = affine_map <(d0 , d1 ) -> (d0 , d1 )>
987+
988+ // CHECK-DAG: [[$MAP0:#[a-zA-Z0-9_]*]] = affine_map<(d0, d1) -> (d0, d1)>
989+ // CHECK-DAG: [[$MAP1:#[a-zA-Z0-9_]*]] = affine_map<(d0) -> (d0 floordiv 4)>
990+
991+ func.func @fuse_and_collapse (%arg0: tensor <3 x4 xindex >) -> tensor <2 x12 xindex > {
992+ %1 = tensor.empty () : tensor <2 x3 x4 xindex >
993+ // CHECK: linalg.generic {
994+ // CHECK: %[[INDEX1:[a-zA-Z0-9_]+]] = linalg.index 1 : index
995+ // CHECK-NEXT: %[[MAP:[a-zA-Z0-9_]+]] = affine.apply #map1(%[[INDEX1]])
996+ // CHECK-NEXT: linalg.yield %[[MAP]] : index
997+ %2 = linalg.generic {index ing_maps = [#map , #map1 ], iterator_types = [" parallel" , " parallel" , " parallel" ]} ins (%arg0: tensor <3 x4 xindex >) outs (%1 : tensor <2 x3 x4 xindex >) {
998+ ^bb0 (%in: index , %out: index ):
999+ %3 = linalg.index 1 : index
1000+ linalg.yield %3: index
1001+ } -> tensor <2 x3 x4 xindex >
1002+ %7 = tensor.empty () : tensor <2 x12 xindex >
1003+ %8 = linalg.generic {index ing_maps = [#map2 , #map3 ], iterator_types = [" parallel" , " parallel" ]} ins (%2 : tensor <2 x3 x4 xindex >) outs (%7 : tensor <2 x12 xindex >) {
1004+ ^bb0 (%in: index , %out: index ):
1005+ linalg.yield %in : index
1006+ } -> tensor <2 x12 xindex >
1007+ return %8 : tensor <2 x12 xindex >
1008+ }
0 commit comments