brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.0 KiB · 29bd58a Raw
177 lines · plain
1// RUN: mlir-opt %s --transform-interpreter -allow-unregistered-dialect --split-input-file -verify-diagnostics2 3module {4  func.func private @func_with_reverse_order_no_result_no_calls(%arg0: memref<1xi8, 1>, %arg1: memref<2xi8, 1>, %arg2: memref<3xi8, 1>) {5    %c0 = arith.constant 0 : index6    %view = memref.view %arg0[%c0][] : memref<1xi8, 1> to memref<1xi8, 1>7    %view0 = memref.view %arg1[%c0][] : memref<2xi8, 1> to memref<2xi8, 1>8    %view1 = memref.view %arg2[%c0][] : memref<3xi8, 1> to memref<3xi8, 1>9    return10  }11}12 13module attributes {transform.with_named_sequence} {14  transform.named_sequence @__transform_main(%arg0: !transform.any_op {transform.readonly}) {15    %func = transform.structured.match ops{["func.func"]} in %arg0 : (!transform.any_op) -> !transform.any_op16    %module = transform.get_parent_op %func : (!transform.any_op) -> !transform.any_op17    // expected-error @+1 {{function with name '@func_not_in_module' not found}}18    transform.func.replace_func_signature @func_not_in_module args_interchange = [0, 2, 1] results_interchange = [] at %module : (!transform.any_op) -> (!transform.any_op, !transform.any_op)19    transform.yield20  }21}22 23// -----24 25module {26  func.func private @func_with_reverse_order_no_result_no_calls(%arg0: memref<1xi8, 1>, %arg1: memref<2xi8, 1>, %arg2: memref<3xi8, 1>) {27    %c0 = arith.constant 0 : index28    %view = memref.view %arg0[%c0][] : memref<1xi8, 1> to memref<1xi8, 1>29    %view0 = memref.view %arg1[%c0][] : memref<2xi8, 1> to memref<2xi8, 1>30    %view1 = memref.view %arg2[%c0][] : memref<3xi8, 1> to memref<3xi8, 1>31    return32  }33}34 35module attributes {transform.with_named_sequence} {36  transform.named_sequence @__transform_main(%arg0: !transform.any_op {transform.readonly}) {37    %func = transform.structured.match ops{["func.func"]} in %arg0 : (!transform.any_op) -> !transform.any_op38    %module = transform.get_parent_op %func : (!transform.any_op) -> !transform.any_op39    // expected-error @+1 {{function with name '@func_with_reverse_order_no_result_no_calls' has 3 arguments, but 2 args interchange were given}}40    transform.func.replace_func_signature @func_with_reverse_order_no_result_no_calls args_interchange = [0, 2] results_interchange = [] at %module : (!transform.any_op) -> (!transform.any_op, !transform.any_op)41    transform.yield42  }43}44 45// -----46 47module {48  func.func private @func_with_reverse_order_no_result_no_calls(%arg0: memref<1xi8, 1>, %arg1: memref<2xi8, 1>, %arg2: memref<3xi8, 1>) {49    %c0 = arith.constant 0 : index50    %view = memref.view %arg0[%c0][] : memref<1xi8, 1> to memref<1xi8, 1>51    %view0 = memref.view %arg1[%c0][] : memref<2xi8, 1> to memref<2xi8, 1>52    %view1 = memref.view %arg2[%c0][] : memref<3xi8, 1> to memref<3xi8, 1>53    return54  }55}56 57module attributes {transform.with_named_sequence} {58  transform.named_sequence @__transform_main(%arg0: !transform.any_op {transform.readonly}) {59    %func = transform.structured.match ops{["func.func"]} in %arg0 : (!transform.any_op) -> !transform.any_op60    %module = transform.get_parent_op %func : (!transform.any_op) -> !transform.any_op61    // expected-error @+1 {{function with name '@func_with_reverse_order_no_result_no_calls' has 0 results, but 1 results interchange were given}}62    transform.func.replace_func_signature @func_with_reverse_order_no_result_no_calls args_interchange = [0, 2, 1] results_interchange = [0] at %module : (!transform.any_op) -> (!transform.any_op, !transform.any_op)63    transform.yield64  }65}66 67// -----68 69module {70  func.func private @func_with_reverse_order_no_result_no_calls(%arg0: memref<1xi8, 1>, %arg1: memref<2xi8, 1>, %arg2: memref<3xi8, 1>) {71    %c0 = arith.constant 0 : index72    %view = memref.view %arg0[%c0][] : memref<1xi8, 1> to memref<1xi8, 1>73    %view0 = memref.view %arg1[%c0][] : memref<2xi8, 1> to memref<2xi8, 1>74    %view1 = memref.view %arg2[%c0][] : memref<3xi8, 1> to memref<3xi8, 1>75    return76  }77}78 79module attributes {transform.with_named_sequence} {80  transform.named_sequence @__transform_main(%arg0: !transform.any_op {transform.readonly}) {81    %func = transform.structured.match ops{["func.func"]} in %arg0 : (!transform.any_op) -> !transform.any_op82    %module = transform.get_parent_op %func : (!transform.any_op) -> !transform.any_op83    // expected-error @+1 {{args interchange must be unique}}84    transform.func.replace_func_signature @func_with_reverse_order_no_result_no_calls args_interchange = [0, 2, 2] results_interchange = [] at %module : (!transform.any_op) -> (!transform.any_op, !transform.any_op)85    transform.yield86  }87}88 89// -----90 91func.func private @func_with_no_duplicate_args(%arg0: memref<1xi8, 1>, %arg1: memref<2xi8, 1>, %arg2: memref<3xi8, 1>) {92  %c0 = arith.constant 0 : index93  %view = memref.view %arg0[%c0][] : memref<1xi8, 1> to memref<1xi8, 1>94  %view0 = memref.view %arg1[%c0][] : memref<2xi8, 1> to memref<2xi8, 1>95  %view1 = memref.view %arg2[%c0][] : memref<3xi8, 1> to memref<3xi8, 1>96  return97}98 99func.func @func_with_no_duplicate_args_caller(%arg0: memref<1xi8, 1>, %arg1: memref<2xi8, 1>, %arg2: memref<3xi8, 1>) {100  call @func_with_no_duplicate_args(%arg0, %arg1, %arg2) : (memref<1xi8, 1>, memref<2xi8, 1>, memref<3xi8, 1>) -> ()101  return102}103 104module attributes {transform.with_named_sequence} {105  transform.named_sequence @__transform_main(%module: !transform.any_op) {106    // expected-error @+1 {{failed to deduplicate function arguments of function func_with_no_duplicate_args}}107    transform.func.deduplicate_func_args @func_with_no_duplicate_args at %module : (!transform.any_op) -> (!transform.any_op, !transform.any_op)108    transform.yield109  }110}111 112// -----113 114func.func private @func_not_found(%arg0: memref<1xi8, 1>, %arg1: memref<2xi8, 1>, %arg2: memref<3xi8, 1>) {115  %c0 = arith.constant 0 : index116  %view = memref.view %arg0[%c0][] : memref<1xi8, 1> to memref<1xi8, 1>117  %view0 = memref.view %arg1[%c0][] : memref<2xi8, 1> to memref<2xi8, 1>118  %view1 = memref.view %arg2[%c0][] : memref<3xi8, 1> to memref<3xi8, 1>119  return120}121 122module attributes {transform.with_named_sequence} {123  transform.named_sequence @__transform_main(%module: !transform.any_op) {124    // expected-error @+1 {{function with name '@non_existent_func' is not found}}125    transform.func.deduplicate_func_args @non_existent_func at %module : (!transform.any_op) -> (!transform.any_op, !transform.any_op)126    transform.yield127  }128}129 130// -----131 132func.func private @func_with_multiple_calls(%arg0: memref<1xi8, 1>, %arg1: memref<1xi8, 1>) {133  %c0 = arith.constant 0 : index134  %view = memref.view %arg0[%c0][] : memref<1xi8, 1> to memref<1xi8, 1>135  %view0 = memref.view %arg1[%c0][] : memref<1xi8, 1> to memref<1xi8, 1>136  return137}138 139func.func @func_with_multiple_calls_caller1(%arg0: memref<1xi8, 1>, %arg1: memref<2xi8, 1>) {140  call @func_with_multiple_calls(%arg0, %arg0) : (memref<1xi8, 1>, memref<1xi8, 1>) -> ()141  return142}143 144func.func @func_with_multiple_calls_caller2(%arg0: memref<1xi8, 1>, %arg1: memref<2xi8, 1>) {145  call @func_with_multiple_calls(%arg0, %arg0) : (memref<1xi8, 1>, memref<1xi8, 1>) -> ()146  return147}148 149module attributes {transform.with_named_sequence} {150  transform.named_sequence @__transform_main(%module: !transform.any_op) {151    // expected-error @+1 {{failed to deduplicate function arguments of function func_with_multiple_calls}}152    transform.func.deduplicate_func_args @func_with_multiple_calls at %module : (!transform.any_op) -> (!transform.any_op, !transform.any_op)153    transform.yield154  }155}156 157// -----158 159func.func private @func_with_no_calls(%arg0: memref<1xi8, 1>, %arg1: memref<1xi8, 1>) {160  %c0 = arith.constant 0 : index161  %view = memref.view %arg0[%c0][] : memref<1xi8, 1> to memref<1xi8, 1>162  %view0 = memref.view %arg1[%c0][] : memref<1xi8, 1> to memref<1xi8, 1>163  return164}165 166func.func @some_other_func() {167  return168}169 170module attributes {transform.with_named_sequence} {171  transform.named_sequence @__transform_main(%module: !transform.any_op) {172    // expected-error @+1 {{failed to deduplicate function arguments of function func_with_no_calls}}173    transform.func.deduplicate_func_args @func_with_no_calls at %module : (!transform.any_op) -> (!transform.any_op, !transform.any_op)174    transform.yield175  }176}177