brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.7 KiB · a7cd8e9 Raw
191 lines · plain
1// RUN: mlir-opt %s --transform-interpreter --split-input-file --verify-diagnostics2 3// Silenceable diagnostics suppressed.4module attributes { transform.with_named_sequence } {5  func.func @test_loop_peeling_not_beneficial() {6    %lb = arith.constant 0 : index7    %ub = arith.constant 40 : index8    %step = arith.constant 5 : index9    scf.for %i = %lb to %ub step %step {10      arith.addi %i, %i : index11    }12    return13  }14 15  transform.named_sequence @peel(%arg0: !transform.op<"scf.for"> {transform.consumed}) {16    transform.loop.peel %arg0 : (!transform.op<"scf.for">) -> (!transform.any_op, !transform.any_op)17    transform.yield18  }19  transform.named_sequence @match_for(%arg0: !transform.any_op {transform.readonly}) -> !transform.any_op {20    transform.match.operation_name %arg0 ["scf.for"] : !transform.any_op21    transform.yield %arg0 : !transform.any_op22  }23  transform.named_sequence @__transform_main(%root: !transform.any_op) {24    transform.sequence  %root : !transform.any_op failures(suppress) {25    ^bb0(%arg0: !transform.any_op):26      transform.foreach_match in %arg027          @match_for -> @peel28          : (!transform.any_op) -> !transform.any_op29      transform.yield30    }31    transform.yield32  }33}34 35// -----36 37// Silenceable diagnostics propagated.38module attributes { transform.with_named_sequence } {39  func.func @test_loop_peeling_not_beneficial() {40    %lb = arith.constant 0 : index41    %ub = arith.constant 40 : index42    %step = arith.constant 5 : index43    // expected-note @below {{when applied to this matching payload}}44    scf.for %i = %lb to %ub step %step {45      arith.addi %i, %i : index46    }47    return48  }49 50  // expected-note @below {{failed to peel the last iteration}}51  transform.named_sequence @peel(%arg0: !transform.op<"scf.for"> {transform.consumed}) {52    transform.loop.peel %arg0 : (!transform.op<"scf.for">) -> (!transform.any_op, !transform.any_op)53    transform.yield54  }55  transform.named_sequence @match_for(%arg0: !transform.any_op {transform.readonly}) -> !transform.any_op {56    transform.match.operation_name %arg0 ["scf.for"] : !transform.any_op57    transform.yield %arg0 : !transform.any_op58  }59  transform.named_sequence @main_suppress(%root: !transform.any_op) {60    transform.sequence  %root : !transform.any_op failures(suppress) {61    ^bb0(%arg0: !transform.any_op):62      transform.foreach_match in %arg063          @match_for -> @peel64          : (!transform.any_op) -> !transform.any_op65      transform.yield66    }67    transform.yield68  }69  transform.named_sequence @__transform_main(%root: !transform.any_op) {70    transform.sequence  %root : !transform.any_op failures(propagate) {71    ^bb0(%arg0: !transform.any_op):72      // expected-error @below {{actions failed}}73      transform.foreach_match in %arg074          @match_for -> @peel75          : (!transform.any_op) -> !transform.any_op76      transform.yield77    }78    transform.yield79  }80}81 82// -----83 84// expected-remark @below {{op from within the matcher}}85module attributes { transform.with_named_sequence } {86  // expected-remark @below {{returned root}}87  func.func @foo() {88    return89  }90 91  transform.named_sequence @match_fail(92      %op: !transform.any_op {transform.readonly},93      %root: !transform.any_op {transform.readonly},94      %param: !transform.param<i64> {transform.readonly}) -> (!transform.any_op, !transform.param<i64>) {95    transform.test_succeed_if_operand_of_op_kind %op, "test.impossible_to_match" : !transform.any_op96    transform.yield %root, %param : !transform.any_op, !transform.param<i64>97  }98 99  transform.named_sequence @match_succeed(100      %op: !transform.any_op {transform.readonly},101      %root: !transform.any_op {transform.readonly},102      %param: !transform.param<i64> {transform.readonly}) -> (!transform.any_op, !transform.param<i64>) {103    transform.debug.emit_remark_at %root, "op from within the matcher" : !transform.any_op104    // expected-remark @below {{param from within the matcher 42}}105    transform.debug.emit_param_as_remark %param, "param from within the matcher" : !transform.param<i64>106    transform.yield %root, %param : !transform.any_op, !transform.param<i64>107  }108 109  transform.named_sequence @return(110      %root: !transform.any_op {transform.readonly},111      %param: !transform.param<i64> {transform.readonly}) -> (!transform.param<i64>, !transform.param<i64>, !transform.any_op) {112    %func = transform.structured.match ops{["func.func"]} in %root : (!transform.any_op) -> !transform.any_op113    transform.yield %param, %param, %func : !transform.param<i64>, !transform.param<i64>, !transform.any_op114  }115 116  transform.named_sequence @__transform_main(%root: !transform.any_op) {117    %param = transform.param.constant 42 : i64 -> !transform.param<i64>118    %func = transform.structured.match ops{["func.func"]} in %root : (!transform.any_op) -> !transform.any_op119    %func2, %yielded:3 = transform.foreach_match restrict_root in %func, %root, %param120      @match_fail -> @return,121      @match_succeed -> @return122      : (!transform.any_op, !transform.any_op, !transform.param<i64>) -> (!transform.any_op, !transform.param<i64>, !transform.param<i64>, !transform.any_op)123    transform.debug.emit_remark_at %yielded#2, "returned root" : !transform.any_op124    // expected-remark @below {{42 : i64, 42 : i64}}125    transform.debug.emit_param_as_remark %yielded#0: !transform.param<i64>126    %num_roots = transform.num_associations %yielded#2 : (!transform.any_op) -> !transform.param<i64>127    // expected-remark @below {{2 : i64}}128    transform.debug.emit_param_as_remark %num_roots : !transform.param<i64>129    transform.yield130  }131}132 133// -----134 135module attributes { transform.with_named_sequence } {136  func.func private @foo()137  func.func private @bar()138 139  transform.named_sequence @match(140      %op: !transform.any_op {transform.readonly},141      %func: !transform.any_op {transform.readonly}) -> (!transform.any_op) {142    transform.yield %func : !transform.any_op143  }144 145  transform.named_sequence @return(146      %func: !transform.any_op {transform.readonly}) -> (!transform.any_op) {147    transform.yield %func : !transform.any_op148  }149 150  transform.named_sequence @__transform_main(%root: !transform.any_op) {151    %func = transform.structured.match ops{["func.func"]} in %root : (!transform.any_op) -> !transform.any_op152    %func2, %yielded = transform.foreach_match flatten_results restrict_root in %func, %func153      @match -> @return154      : (!transform.any_op, !transform.any_op) -> (!transform.any_op, !transform.any_op)155    %num = transform.num_associations %yielded : (!transform.any_op) -> !transform.param<i64>156    // 2 funcs are yielded for each of the 2 funcs = 4:157    // expected-remark @below {{4 : i64}}158    transform.debug.emit_param_as_remark %num : !transform.param<i64>159    transform.yield160  }161}162 163// -----164 165 166module attributes { transform.with_named_sequence } {167  func.func private @foo()168  func.func private @bar()169 170  transform.named_sequence @match(171      %op: !transform.any_op {transform.readonly},172      %func: !transform.any_op {transform.readonly}) -> (!transform.any_op) {173    transform.yield %func : !transform.any_op174  }175 176  transform.named_sequence @return(177      %func: !transform.any_op {transform.readonly}) -> (!transform.any_op) {178    transform.yield %func : !transform.any_op179  }180 181  transform.named_sequence @__transform_main(%root: !transform.any_op) {182    %func = transform.structured.match ops{["func.func"]} in %root : (!transform.any_op) -> !transform.any_op183    // expected-error @below {{action @return has results associated with multiple payload entities, but flattening was not requested}}184    %func2, %yielded = transform.foreach_match restrict_root in %func, %func185      @match -> @return186      : (!transform.any_op, !transform.any_op) -> (!transform.any_op, !transform.any_op)187    %num = transform.num_associations %yielded : (!transform.any_op) -> !transform.param<i64>188    transform.yield189  }190}191