139 lines · plain
1// RUN: mlir-opt %s | mlir-opt | FileCheck %s2 3// CHECK: transform.sequence4// CHECK: ^{{.+}}(%{{.+}}: !transform.any_op):5transform.sequence failures(propagate) {6^bb0(%arg0: !transform.any_op):7 // CHECK: sequence %{{.+}} : !transform.any_op8 // 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_patterns15// CHECK: ^{{.+}}(%[[ARG:.+]]: !transform.any_op):16transform.with_pdl_patterns {17^bb0(%arg0: !transform.any_op):18 // CHECK: sequence %[[ARG]] : !transform.any_op19 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.sequence26// CHECK: %[[V:.+]] = sequence %{{.*}} : !transform.any_op -> !transform.any_op27// 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_op34 }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.sequence71transform.sequence failures(propagate) {72^bb0(%op0: !transform.any_op, %val0: !transform.any_value, %par0: !transform.any_param):73 // CHECK: foreach %{{.*}} : !transform.any_op74 transform.foreach %op0 : !transform.any_op {75 ^bb1(%op1: !transform.any_op):76 }77 // CHECK: foreach %{{.*}} : !transform.any_op, !transform.any_value, !transform.any_param78 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_op82 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_op85 }86 // CHECK: foreach %{{.*}} : !transform.any_op, !transform.any_value, !transform.any_param -> !transform.any_param, !transform.any_value87 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_value90 }91}92 93// CHECK: transform.sequence94transform.sequence failures(propagate) {95^bb0(%arg0: !transform.any_op):96 // CHECK: cast %{{.*}} : !transform.any_op to !transform.any_op97 %0 = cast %arg0: !transform.any_op to !transform.any_op98 // 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.sequence103// CHECK-COUNT-9: print104transform.sequence failures(propagate) {105^bb0(%arg0: !transform.any_op):106 transform.print %arg0 : !transform.any_op107 transform.print108 transform.print %arg0 {name = "test"} : !transform.any_op109 transform.print {name = "test"}110 transform.print {name = "test", assume_verified}111 transform.print %arg0 {assume_verified} : !transform.any_op112 transform.print %arg0 {use_local_scope} : !transform.any_op113 transform.print %arg0 {skip_regions} : !transform.any_op114 transform.print %arg0 {assume_verified, use_local_scope, skip_regions} : !transform.any_op115}116 117// CHECK: transform.sequence118// 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_op122 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.sequence126// 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_op130 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.sequence134// CHECK: transform.param.constant "example_string135transform.sequence failures(propagate) {136^bb0(%arg1: !transform.any_op):137 transform.param.constant "example_string" -> !transform.any_param138}139