1// RUN: mlir-opt %s -transform-interpreter -verify-diagnostics -split-input-file 2 3// expected-note @below {{associated payload op}} 4module attributes {transform.with_named_sequence} { 5 transform.named_sequence @__transform_main(%arg0: !transform.any_op) { 6 // expected-remark @below {{extension absent}} 7 transform.test_check_if_test_extension_present %arg0 : !transform.any_op 8 transform.test_add_test_extension "A" 9 // expected-remark @below {{extension present, A}} 10 transform.test_check_if_test_extension_present %arg0 : !transform.any_op 11 transform.test_remove_test_extension 12 // expected-remark @below {{extension absent}} 13 transform.test_check_if_test_extension_present %arg0 : !transform.any_op 14 transform.yield 15 } 16} 17 18// ----- 19 20// expected-note @below {{associated payload op}} 21module attributes {transform.with_named_sequence} { 22 transform.named_sequence @__transform_main(%arg0: !transform.any_op) { 23 transform.test_add_test_extension "A" 24 transform.test_remove_test_extension 25 transform.test_add_test_extension "B" 26 // expected-remark @below {{extension present, B}} 27 transform.test_check_if_test_extension_present %arg0 : !transform.any_op 28 transform.yield 29 } 30} 31 32// ----- 33 34// expected-note @below {{associated payload op}} 35module attributes {transform.with_named_sequence} { 36 transform.named_sequence @__transform_main(%arg0: !transform.any_op) { 37 transform.test_add_test_extension "A" 38 // expected-remark @below {{extension present, A}} 39 transform.test_check_if_test_extension_present %arg0 : !transform.any_op 40 // expected-note @below {{associated payload op}} 41 transform.test_remap_operand_to_self %arg0 : (!transform.any_op) -> !transform.any_op 42 // expected-remark @below {{extension present, A}} 43 transform.test_check_if_test_extension_present %arg0 : !transform.any_op 44 transform.yield 45 } 46} 47 48// ----- 49 50module attributes {transform.with_named_sequence} { 51 transform.named_sequence @__transform_main(%arg0: !transform.any_op) { 52 transform.test_add_test_extension "A" 53 // This is okay because we are replacing the top-level module operation 54 // (0 results) with this operation that has _more_ (1) results. 55 %dummy = transform.test_remap_operand_to_self %arg0 : (!transform.any_op) -> !transform.any_op 56 transform.yield 57 } 58} 59 60// ----- 61 62module attributes {transform.with_named_sequence} { 63 transform.named_sequence @__transform_main(%arg0: !transform.any_op) { 64 transform.test_add_test_extension "A" 65 %dummy = transform.test_remap_operand_to_self %arg0 : (!transform.any_op) -> !transform.any_op 66 // This is still okay. Even though we are replacing the previous 67 // operation with (1 result) with this operation that has less (0) results, 68 // there is no handle to the result, hence no issue with value handle update. 69 transform.test_remap_operand_to_self %dummy : (!transform.any_op) -> !transform.any_op 70 transform.yield 71 } 72} 73 74// ----- 75 76module attributes {transform.with_named_sequence} { 77 transform.named_sequence @__transform_main(%arg0: !transform.any_op) { 78 transform.test_add_test_extension "A" 79 // expected-error @below {{cannot replace an op with another op producing fewer results while tracking handles}} 80 %dummy = transform.test_remap_operand_to_self %arg0 : (!transform.any_op) -> !transform.any_op 81 %valuehandle = transform.get_result %dummy[0] : (!transform.any_op) -> !transform.any_value 82 transform.test_remap_operand_to_self %dummy : (!transform.any_op) -> () 83 transform.yield 84 } 85} 86 87// ----- 88 89module attributes {transform.with_named_sequence} { 90 transform.named_sequence @__transform_main(%arg0: !transform.any_op) { 91 // expected-error @below {{TestTransformStateExtension missing}} 92 transform.test_remap_operand_to_self %arg0 : (!transform.any_op) -> !transform.any_op 93 transform.yield 94 } 95} 96