1// RUN: mlir-opt %s | mlir-opt | FileCheck %s 2 3// CHECK: transform.sequence 4// CHECK: ^{{.+}}(%{{.+}}: !transform.any_op): 5transform.sequence failures(propagate) { 6^bb0(%arg0: !transform.any_op): 7 // CHECK: sequence %{{.+}} : !transform.any_op 8 // CHECK: ^{{.+}}(%{{.+}}: !transform.any_op): 9 sequence %arg0 : !transform.any_op failures(propagate) { 10 ^bb1(%arg1: !transform.any_op): 11 } 12} 13 14// CHECK: transform.with_pdl_patterns 15// CHECK: ^{{.+}}(%[[ARG:.+]]: !transform.any_op): 16transform.with_pdl_patterns { 17^bb0(%arg0: !transform.any_op): 18 // CHECK: sequence %[[ARG]] : !transform.any_op 19 sequence %arg0 : !transform.any_op failures(propagate) { 20 ^bb1(%arg1: !transform.any_op): 21 } 22} 23 24// Using the same value multiple times without consuming it is fine. 25// CHECK: transform.sequence 26// CHECK: %[[V:.+]] = sequence %{{.*}} : !transform.any_op -> !transform.any_op 27// CHECK: sequence %[[V]] 28// CHECK: sequence %[[V]] 29transform.sequence failures(propagate) { 30^bb0(%arg0: !transform.any_op): 31 %0 = transform.sequence %arg0 : !transform.any_op -> !transform.any_op failures(propagate) { 32 ^bb1(%arg1: !transform.any_op): 33 yield %arg1 : !transform.any_op 34 } 35 transform.sequence %0 : !transform.any_op failures(propagate) { 36 ^bb2(%arg2: !transform.any_op): 37 } 38 transform.sequence %0 : !transform.any_op failures(propagate) { 39 ^bb3(%arg3: !transform.any_op): 40 } 41} 42 43// CHECK: transform.sequence failures(propagate) 44transform.sequence failures(propagate) { 45^bb0(%arg0: !transform.any_op, %arg1: !transform.any_op, %arg2: !transform.any_op): 46 // CHECK: sequence %{{.*}}, %{{.*}}, %{{.*}} : (!transform.any_op, !transform.any_op, !transform.any_op) failures(propagate) 47 transform.sequence %arg0, %arg1, %arg2 : !transform.any_op, !transform.any_op, !transform.any_op failures(propagate) { 48 ^bb0(%arg3: !transform.any_op, %arg4: !transform.any_op, %arg5: !transform.any_op): 49 } 50} 51 52// CHECK: transform.sequence failures(propagate) 53transform.sequence failures(propagate) { 54^bb0(%arg0: !transform.any_op, %arg1: !transform.any_op, %arg2: !transform.any_op): 55 // CHECK: sequence %{{.*}}, %{{.*}}, %{{.*}} : (!transform.any_op, !transform.any_op, !transform.any_op) failures(propagate) 56 transform.sequence %arg0, %arg1, %arg2 : (!transform.any_op, !transform.any_op, !transform.any_op) failures(propagate) { 57 ^bb0(%arg3: !transform.any_op, %arg4: !transform.any_op, %arg5: !transform.any_op): 58 } 59} 60 61// CHECK: transform.sequence failures(propagate) 62transform.sequence failures(propagate) { 63^bb0(%arg0: !transform.any_op, %arg1: !transform.any_op, %arg2: !transform.any_op): 64 // CHECK: sequence %{{.*}}, %{{.*}}, %{{.*}} : (!transform.any_op, !transform.any_op, !transform.any_op) failures(propagate) 65 transform.sequence %arg0, %arg1, %arg2 : (!transform.any_op, !transform.any_op, !transform.any_op) failures(propagate) { 66 ^bb0(%arg3: !transform.any_op, %arg4: !transform.any_op, %arg5: !transform.any_op): 67 } 68} 69 70// CHECK: transform.sequence 71transform.sequence failures(propagate) { 72^bb0(%op0: !transform.any_op, %val0: !transform.any_value, %par0: !transform.any_param): 73 // CHECK: foreach %{{.*}} : !transform.any_op 74 transform.foreach %op0 : !transform.any_op { 75 ^bb1(%op1: !transform.any_op): 76 } 77 // CHECK: foreach %{{.*}} : !transform.any_op, !transform.any_value, !transform.any_param 78 transform.foreach %op0, %val0, %par0 : !transform.any_op, !transform.any_value, !transform.any_param { 79 ^bb1(%op1: !transform.any_op, %val1: !transform.any_value, %par1: !transform.any_param): 80 } 81 // CHECK: foreach %{{.*}} : !transform.any_op, !transform.any_value, !transform.any_param -> !transform.any_op 82 transform.foreach %op0, %val0, %par0 : !transform.any_op, !transform.any_value, !transform.any_param -> !transform.any_op { 83 ^bb1(%op1: !transform.any_op, %val1: !transform.any_value, %par1: !transform.any_param): 84 transform.yield %op1 : !transform.any_op 85 } 86 // CHECK: foreach %{{.*}} : !transform.any_op, !transform.any_value, !transform.any_param -> !transform.any_param, !transform.any_value 87 transform.foreach %op0, %val0, %par0 : !transform.any_op, !transform.any_value, !transform.any_param -> !transform.any_param, !transform.any_value { 88 ^bb1(%op1: !transform.any_op, %val1: !transform.any_value, %par1: !transform.any_param): 89 transform.yield %par1, %val1 : !transform.any_param, !transform.any_value 90 } 91} 92 93// CHECK: transform.sequence 94transform.sequence failures(propagate) { 95^bb0(%arg0: !transform.any_op): 96 // CHECK: cast %{{.*}} : !transform.any_op to !transform.any_op 97 %0 = cast %arg0: !transform.any_op to !transform.any_op 98 // CHECK: cast %{{.*}} : !transform.any_op to !transform.op<"builtin.module"> 99 %1 = cast %0: !transform.any_op to !transform.op<"builtin.module"> 100} 101 102// CHECK: transform.sequence 103// CHECK-COUNT-9: print 104transform.sequence failures(propagate) { 105^bb0(%arg0: !transform.any_op): 106 transform.print %arg0 : !transform.any_op 107 transform.print 108 transform.print %arg0 {name = "test"} : !transform.any_op 109 transform.print {name = "test"} 110 transform.print {name = "test", assume_verified} 111 transform.print %arg0 {assume_verified} : !transform.any_op 112 transform.print %arg0 {use_local_scope} : !transform.any_op 113 transform.print %arg0 {skip_regions} : !transform.any_op 114 transform.print %arg0 {assume_verified, use_local_scope, skip_regions} : !transform.any_op 115} 116 117// CHECK: transform.sequence 118// CHECK: transform.structured.tile_using_for %0 tile_sizes [4, 4, [4]] 119transform.sequence failures(propagate) { 120^bb0(%arg1: !transform.any_op): 121 %0 = transform.structured.match ops{["linalg.matmul"]} in %arg1 : (!transform.any_op) -> !transform.any_op 122 transform.structured.tile_using_for %0 tile_sizes [4, 4, [4]] : (!transform.any_op) -> (!transform.any_op, !transform.any_op, !transform.any_op, !transform.any_op) 123} 124 125// CHECK: transform.sequence 126// CHECK: transform.structured.tile_using_for %0 tile_sizes {{\[}}[2], 4, 8] 127transform.sequence failures(propagate) { 128^bb0(%arg1: !transform.any_op): 129 %0 = transform.structured.match ops{["linalg.matmul"]} in %arg1 : (!transform.any_op) -> !transform.any_op 130 transform.structured.tile_using_for %0 tile_sizes [[2], 4, 8] : (!transform.any_op) -> (!transform.any_op, !transform.any_op, !transform.any_op, !transform.any_op) 131} 132 133// CHECK: transform.sequence 134// CHECK: transform.param.constant "example_string 135transform.sequence failures(propagate) { 136^bb0(%arg1: !transform.any_op): 137 transform.param.constant "example_string" -> !transform.any_param 138} 139