@@ -139,6 +139,83 @@ module attributes {transform.with_named_sequence} {
139139
140140// -----
141141
142+ func.func private @external (%arg0: tensor <?xf32 >)
143+ func.func private @external_lb (%arg0: tensor <100 xf32 >)
144+ func.func private @external_ub (%arg0: tensor <3 xf32 >)
145+ func.func private @external_2d (%arg0: tensor <?x20 xf32 >)
146+
147+ // CHECK-LABEL: func.func @call_external
148+ func.func @call_external (%arg0: index ,
149+ %input_2d: tensor <?x20 xf32 >,
150+ %input_lb: tensor <100 xf32 >,
151+ %input_ub: tensor <3 xf32 >) {
152+ %0 = util.assume.int %arg0 <umin = 12 , umax = 16 , udiv = 1 > : index
153+ %input = tensor.empty (%0 ) : tensor <?xf32 >
154+ // CHECK: call @external
155+ // CHECK-SAME: match_status = "both_matched"
156+ func.call @external (%input ) {match_status = " unmatched" } : (tensor <?xf32 >) -> ()
157+ // CHECK: call @external_2d
158+ // CHECK-SAME: match_status = "dim1_matched"
159+ func.call @external_2d (%input_2d ) {match_status = " unmatched" } : (tensor <?x20 xf32 >) -> ()
160+ // CHECK: call @external_lb
161+ // CHECK-SAME: match_status = "lb_matched"
162+ func.call @external_lb (%input_lb ) {match_status = " unmatched" } : (tensor <100 xf32 >) -> ()
163+ // CHECK: call @external_ub
164+ // CHECK-SAME: match_status = "ub_matched"
165+ func.call @external_ub (%input_ub ) {match_status = " unmatched" } : (tensor <3 xf32 >) -> ()
166+ return
167+ }
168+
169+ module attributes {transform.with_named_sequence } {
170+ transform.named_sequence @dim1_match (%call: !transform.any_op {transform.readonly }) -> (!transform.any_op , !transform.any_param ) {
171+ transform.match.operation_name %call [" func.call" ] : !transform.any_op
172+ %in0 = transform.get_operand %call [0 ] : (!transform.any_op ) -> !transform.any_value
173+ transform.iree.match.dim_bounds %in0 [1 ], umin = 20 , umax = 20 : !transform.any_value
174+ %0 = transform.param.constant " dim1_matched" -> !transform.any_param
175+ transform.yield %call , %0 : !transform.any_op , !transform.any_param
176+ }
177+ transform.named_sequence @both_match (%call: !transform.any_op {transform.readonly }) -> (!transform.any_op , !transform.any_param ) {
178+ transform.match.operation_name %call [" func.call" ] : !transform.any_op
179+ %in0 = transform.get_operand %call [0 ] : (!transform.any_op ) -> !transform.any_value
180+ transform.iree.match.dim_bounds %in0 [0 ], umin = 5 , umax = 20 : !transform.any_value
181+ %0 = transform.param.constant " both_matched" -> !transform.any_param
182+ transform.yield %call , %0 : !transform.any_op , !transform.any_param
183+ }
184+ transform.named_sequence @lb_match (%call: !transform.any_op {transform.readonly }) -> (!transform.any_op , !transform.any_param ) {
185+ transform.match.operation_name %call [" func.call" ] : !transform.any_op
186+ %in0 = transform.get_operand %call [0 ] : (!transform.any_op ) -> !transform.any_value
187+ transform.iree.match.dim_bounds %in0 [0 ], umin = 75 , none : !transform.any_value
188+ %0 = transform.param.constant " lb_matched" -> !transform.any_param
189+ transform.yield %call , %0 : !transform.any_op , !transform.any_param
190+ }
191+ transform.named_sequence @ub_match (%call: !transform.any_op {transform.readonly }) -> (!transform.any_op , !transform.any_param ) {
192+ transform.match.operation_name %call [" func.call" ] : !transform.any_op
193+ %in0 = transform.get_operand %call [0 ] : (!transform.any_op ) -> !transform.any_value
194+ transform.iree.match.dim_bounds %in0 [0 ], none , umax = 4 : !transform.any_value
195+ %0 = transform.param.constant " ub_matched" -> !transform.any_param
196+ transform.yield %call , %0 : !transform.any_op , !transform.any_param
197+ }
198+
199+ transform.named_sequence @annotate (%call: !transform.any_op {transform.readonly },
200+ %note: !transform.any_param {transform.readonly }) {
201+ transform.annotate %call " match_status" = %note : !transform.any_op , !transform.any_param
202+ transform.yield
203+ }
204+
205+ transform.named_sequence @__transform_main (%module: !transform.any_op ) {
206+ %func = transform.structured.match ops {[" func.func" ]} in %module : (!transform.any_op ) -> !transform.any_op
207+ transform.foreach_match in %module
208+ @dim1_match -> @annotate ,
209+ @both_match -> @annotate ,
210+ @lb_match -> @annotate ,
211+ @ub_match -> @annotate
212+ : (!transform.any_op ) -> (!transform.any_op )
213+ transform.yield
214+ }
215+ }
216+
217+ // -----
218+
142219module attributes {transform.with_named_sequence } {
143220
144221 // CHECK: func.func @matmul_repeated_operand
0 commit comments