| # RUN: toyc-ch3 %s -emit=mlir 2>&1 | FileCheck %s |
| |
| # User defined generic function that operates on unknown shaped arguments |
| def multiply_transpose(a, b) { |
| return a * transpose(b); |
| } |
| |
| def main() { |
| var a<2, 3> = [[1, 2, 3], [4, 5, 6]]; |
| var b<2, 3> = [1, 2, 3, 4, 5, 6]; |
| var c = multiply_transpose(a, b); |
| var d = multiply_transpose(b, a); |
| print(d); |
| } |
| |
| # CHECK-LABEL: func @multiply_transpose(%arg0: !toy.array, %arg1: !toy.array) |
| # CHECK-NEXT: attributes {toy.generic: true} { |
| # CHECK-NEXT: %0 = "toy.transpose"(%arg1) : (!toy.array) -> !toy.array |
| # CHECK-NEXT: %1 = "toy.mul"(%arg0, %0) : (!toy.array, !toy.array) -> !toy.array |
| # CHECK-NEXT: "toy.return"(%1) : (!toy.array) -> () |
| # CHECK-NEXT: } |
| |
| # CHECK-LABEL: func @main() { |
| # CHECK-NEXT: %0 = "toy.constant"() {value: dense<tensor<2x3xf64>, {{\[\[}}1.000000e+00, 2.000000e+00, 3.000000e+00], [4.000000e+00, 5.000000e+00, 6.000000e+00]]>} : () -> !toy.array<2, 3> |
| # CHECK-NEXT: %1 = "toy.reshape"(%0) : (!toy.array<2, 3>) -> !toy.array<2, 3> |
| # CHECK-NEXT: %2 = "toy.constant"() {value: dense<tensor<6xf64>, [1.000000e+00, 2.000000e+00, 3.000000e+00, 4.000000e+00, 5.000000e+00, 6.000000e+00]>} : () -> !toy.array<6> |
| # CHECK-NEXT: %3 = "toy.reshape"(%2) : (!toy.array<6>) -> !toy.array<2, 3> |
| # CHECK-NEXT: %4 = "toy.generic_call"(%1, %3) {callee: "multiply_transpose"} : (!toy.array<2, 3>, !toy.array<2, 3>) -> !toy.array |
| # CHECK-NEXT: %5 = "toy.generic_call"(%3, %1) {callee: "multiply_transpose"} : (!toy.array<2, 3>, !toy.array<2, 3>) -> !toy.array |
| # CHECK-NEXT: "toy.print"(%5) : (!toy.array) -> () |
| # CHECK-NEXT: "toy.return"() : () -> () |
| |