@@ -64,6 +64,79 @@ func.func @rank_reducing_empty_tensor_extract(%sz : index, %idx : index) -> tens
64
64
return %r: tensor <2 xf32 >
65
65
}
66
66
67
+ func.func @pack_empty (%arg0: tensor <8 x8 x32 x32 xf32 >) -> tensor <8 x8 x32 x32 xf32 > {
68
+ %empty_unpacked = tensor.empty () : tensor <256 x256 xf32 >
69
+ %packed = tensor.pack %empty_unpacked
70
+ inner_dims_pos = [0 , 1 ] inner_tiles = [32 , 32 ]
71
+ into %arg0 : tensor <256 x256 xf32 > -> tensor <8 x8 x32 x32 xf32 >
72
+ return %packed : tensor <8 x8 x32 x32 xf32 >
73
+ }
74
+
75
+ // CHECK-LABEL: func.func @pack_empty(
76
+ // CHECK-SAME: %[[T:.+]]: tensor<8x8x32x32xf32>
77
+ // CHECK-NOT: tensor.pack
78
+ // CHECK: return %[[T]] : tensor<8x8x32x32xf32>
79
+
80
+ func.func @pack_empty_dynamic (%arg0: tensor <?x?x?x?xf32 >, %dim0: index , %dim1: index ) -> tensor <?x?x?x?xf32 > {
81
+ %empty_unpacked = tensor.empty (%dim0 , %dim1 ) : tensor <?x?xf32 >
82
+ %packed = tensor.pack %empty_unpacked
83
+ inner_dims_pos = [0 , 1 ] inner_tiles = [32 , 32 ]
84
+ into %arg0 : tensor <?x?xf32 > -> tensor <?x?x?x?xf32 >
85
+ return %packed : tensor <?x?x?x?xf32 >
86
+ }
87
+
88
+ // CHECK-LABEL: func.func @pack_empty_dynamic(
89
+ // CHECK-SAME: %[[T:.+]]: tensor<?x?x?x?xf32>,
90
+ // CHECK-SAME: %[[DIM0:[a-zA-Z0-9_]+]]: index,
91
+ // CHECK-SAME: %[[DIM1:[a-zA-Z0-9_]+]]: index
92
+ // CHECK-NOT: tensor.pack
93
+ // CHECK: return %[[T]] : tensor<?x?x?x?xf32>
94
+
95
+ func.func @unpack_empty (%arg0: tensor <256 x256 xf32 >) -> tensor <256 x256 xf32 > {
96
+ %empty_packed = tensor.empty () : tensor <8 x8 x32 x32 xf32 >
97
+ %unpacked = tensor.unpack %empty_packed
98
+ inner_dims_pos = [0 , 1 ] inner_tiles = [32 , 32 ]
99
+ into %arg0 : tensor <8 x8 x32 x32 xf32 > -> tensor <256 x256 xf32 >
100
+ return %unpacked : tensor <256 x256 xf32 >
101
+ }
102
+
103
+ // CHECK-LABEL: func.func @unpack_empty(
104
+ // CHECK-SAME: %[[T:.+]]: tensor<256x256xf32>
105
+ // CHECK-NOT: tensor.unpack
106
+ // CHECK: return %[[T]] : tensor<256x256xf32>
107
+
108
+ func.func @unpack_empty_dynamic (%arg0: tensor <?x?xf32 >, %dim0: index , %dim1: index , %dim2: index , %dim3: index ) -> tensor <?x?xf32 > {
109
+ %empty_packed = tensor.empty (%dim0 , %dim1 , %dim2 , %dim3 ) : tensor <?x?x?x?xf32 >
110
+ %unpacked = tensor.unpack %empty_packed
111
+ inner_dims_pos = [0 , 1 ] inner_tiles = [32 , 32 ]
112
+ into %arg0 : tensor <?x?x?x?xf32 > -> tensor <?x?xf32 >
113
+ return %unpacked : tensor <?x?xf32 >
114
+ }
115
+
116
+ // CHECK-LABEL: func.func @unpack_empty_dynamic(
117
+ // CHECK-SAME: %[[T:.+]]: tensor<?x?xf32>,
118
+ // CHECK-SAME: %[[DIM0:[a-zA-Z0-9_]+]]: index,
119
+ // CHECK-SAME: %[[DIM1:[a-zA-Z0-9_]+]]: index,
120
+ // CHECK-SAME: %[[DIM2:[a-zA-Z0-9_]+]]: index,
121
+ // CHECK-SAME: %[[DIM3:[a-zA-Z0-9_]+]]: index
122
+ // CHECK-NOT: tensor.unpack
123
+ // CHECK: return %[[T]] : tensor<?x?xf32>
124
+
125
+ func.func @pack_padded_empty (%arg0: tensor <8 x8 x32 x32 xf32 >) -> tensor <8 x8 x32 x32 xf32 > {
126
+ %pad = arith.constant 1.0 : f32
127
+ %empty_unpacked = tensor.empty () : tensor <256 x256 xf32 >
128
+ %packed = tensor.pack %empty_unpacked
129
+ padding_value (%pad : f32 )
130
+ inner_dims_pos = [0 , 1 ] inner_tiles = [32 , 32 ]
131
+ into %arg0 : tensor <256 x256 xf32 > -> tensor <8 x8 x32 x32 xf32 >
132
+ return %packed : tensor <8 x8 x32 x32 xf32 >
133
+ }
134
+
135
+ // CHECK-LABEL: func.func @pack_padded_empty(
136
+ // CHECK-SAME: %[[T:.+]]: tensor<8x8x32x32xf32>
137
+ // CHECK: %[[PACK:.+]] = tensor.pack
138
+ // CHECK: return %[[PACK]] : tensor<8x8x32x32xf32>
139
+
67
140
// -----
68
141
69
142
module attributes {transform.with_named_sequence } {
0 commit comments