107 lines · plain
1// RUN: mlir-opt %s --transform-interpreter --split-input-file --verify-diagnostics2 3module attributes {transform.with_named_sequence} {4 transform.named_sequence @__transform_main(%arg0: !transform.any_op {transform.readonly}) {5 // expected-error@below {{provided `selected` attribute is not an element of `options` array of attributes}}6 %heads_or_tails = transform.tune.knob<"coin"> = 1 from options = [true, false] -> !transform.any_param7 transform.yield8 }9}10 11// -----12 13func.func private @f()14 15module attributes {transform.with_named_sequence} {16 transform.named_sequence @__transform_main(%arg0: !transform.any_op {transform.readonly}) {17 // expected-error@below {{non-deterministic choice "coin" is only resolved through providing a `selected` attr}}18 %heads_or_tails = transform.tune.knob<"coin"> options = [true, false] -> !transform.any_param19 transform.yield20 }21}22 23// -----24 25func.func private @f()26 27module attributes {transform.with_named_sequence} {28 transform.named_sequence @__transform_main(%arg0: !transform.any_op {transform.readonly}) {29 // expected-error@below {{'selected_region' attribute specifies region at index 2 while op has only 2 regions}}30 transform.tune.alternatives<"bifurcation"> selected_region = 2 {31 transform.yield32 }, {33 transform.yield34 }35 transform.yield36 }37}38 39// -----40 41func.func private @f()42 43module attributes {transform.with_named_sequence} {44 transform.named_sequence @__transform_main(%arg0: !transform.any_op {transform.readonly}) {45 %singleton_of_c0 = transform.param.constant [0] -> !transform.any_param46 // expected-error@below {{param should hold exactly one integer attribute, got: [0]}}47 transform.tune.alternatives<"bifurcation"> selected_region = %singleton_of_c0 : !transform.any_param {48 transform.yield49 }, {50 transform.yield51 }52 transform.yield53 }54}55 56// -----57 58func.func private @f()59 60module attributes {transform.with_named_sequence} {61 transform.named_sequence @__transform_main(%arg0: !transform.any_op {transform.readonly}) {62 %c0 = transform.param.constant 0 -> !transform.any_param63 %c1 = transform.param.constant 1 -> !transform.any_param64 %c0_and_c1 = transform.merge_handles %c0, %c1 : !transform.any_param65 // expected-error@below {{param should hold exactly one integer attribute}}66 transform.tune.alternatives<"bifurcation"> selected_region = %c0_and_c1 : !transform.any_param {67 transform.yield68 }, {69 transform.yield70 }71 transform.yield72 }73}74 75// -----76 77func.func private @f()78 79module attributes {transform.with_named_sequence} {80 transform.named_sequence @__transform_main(%arg0: !transform.any_op {transform.readonly}) {81 %c2 = transform.param.constant 2 -> !transform.any_param82 // expected-error@below {{'selected_region' attribute/param specifies region at index 2 while op has only 2 regions}}83 transform.tune.alternatives<"bifurcation"> selected_region = %c2 : !transform.any_param {84 transform.yield85 }, {86 transform.yield87 }88 transform.yield89 }90}91 92// -----93 94func.func private @f()95 96module attributes {transform.with_named_sequence} {97 transform.named_sequence @__transform_main(%arg0: !transform.any_op {transform.readonly}) {98 // expected-error@below {{non-deterministic choice "bifurcation" is only resolved through providing a `selected_region` attr/param}}99 transform.tune.alternatives<"bifurcation"> {100 transform.yield101 }, {102 transform.yield103 }104 transform.yield105 }106}107