summaryrefslogtreecommitdiffstats
path: root/mlir/test/Examples/Toy
diff options
context:
space:
mode:
authorMehdi Amini <aminim@google.com>2019-04-02 10:02:07 -0700
committerMehdi Amini <joker.eph@gmail.com>2019-04-02 13:40:06 -0700
commit38b71d6b8468c436f5dcdb88f937fa0f4e62c22e (patch)
tree77db19b84ad9758370a6c821ad399ab336ccc9ba /mlir/test/Examples/Toy
parent7c1fc9e795e479accb9614cf2a9686b5eae855fa (diff)
downloadbcm5719-llvm-38b71d6b8468c436f5dcdb88f937fa0f4e62c22e.tar.gz
bcm5719-llvm-38b71d6b8468c436f5dcdb88f937fa0f4e62c22e.zip
Initial version for chapter 1 of the Toy tutorial
-- PiperOrigin-RevId: 241549247
Diffstat (limited to 'mlir/test/Examples/Toy')
-rw-r--r--mlir/test/Examples/Toy/Ch1/ast.toy71
1 files changed, 71 insertions, 0 deletions
diff --git a/mlir/test/Examples/Toy/Ch1/ast.toy b/mlir/test/Examples/Toy/Ch1/ast.toy
new file mode 100644
index 00000000000..e8c8fe0cfa3
--- /dev/null
+++ b/mlir/test/Examples/Toy/Ch1/ast.toy
@@ -0,0 +1,71 @@
+# RUN: toyc-ch1 %s -emit=ast 2>&1 | FileCheck %s
+
+
+# User defined generic function that operates solely on
+def multiply_transpose(a, b) {
+ return a * transpose(b);
+}
+
+def main() {
+ # Define a variable `a` with shape <2, 3>, initialized with the literal value
+ var a<2, 3> = [[1, 2, 3], [4, 5, 6]];
+ var b<2, 3> = [1, 2, 3, 4, 5, 6];
+ # This call will specialize `multiply_transpose` with <2, 3> for both
+ # arguments and deduce a return type of <2, 2> in initialization of `c`.
+ var c = multiply_transpose(a, b);
+ # A second call to `multiply_transpose` with <2, 3> for both arguments will
+ # reuse the previously specialized and inferred version and return `<2, 2>`
+ var d = multiply_transpose(b, a);
+ # A new call with `<2, 2>` for both dimension will trigger another
+ # specialization of `multiply_transpose`.
+ var e = multiply_transpose(b, c);
+ # Finally, calling into `multiply_transpose` with incompatible shape will
+ # trigger a shape inference error.
+ var e = multiply_transpose(transpose(a), c);
+}
+
+
+# CHECK: Module:
+# CHECK-NEXT: Function
+# CHECK-NEXT: Proto 'multiply_transpose'
+# CHECK-NEXT: Params: [a, b]
+# CHECK-NEXT: Block {
+# CHECK-NEXT: Retur
+# CHECK-NEXT: BinOp: *
+# CHECK-NEXT: var: a
+# CHECK-NEXT: Call 'transpose' [
+# CHECK-NEXT: var: b
+# CHECK-NEXT: ]
+# CHECK-NEXT: } // Block
+# CHECK-NEXT: Function
+# CHECK-NEXT: Proto 'main'
+# CHECK-NEXT: Params: []
+# CHECK-NEXT: Block {
+# CHECK-NEXT: VarDecl a<2, 3>
+# CHECK-NEXT: Literal: <2, 3>[ <3>[ 1.000000e+00, 2.000000e+00, 3.000000e+00], <3>[ 4.000000e+00, 5.000000e+00, 6.000000e+00]]
+# CHECK-NEXT: VarDecl b<2, 3>
+# CHECK-NEXT: Literal: <6>[ 1.000000e+00, 2.000000e+00, 3.000000e+00, 4.000000e+00, 5.000000e+00, 6.000000e+00]
+# CHECK-NEXT: VarDecl c<>
+# CHECK-NEXT: Call 'multiply_transpose' [
+# CHECK-NEXT: var: a
+# CHECK-NEXT: var: b
+# CHECK-NEXT: ]
+# CHECK-NEXT: VarDecl d<>
+# CHECK-NEXT: Call 'multiply_transpose' [
+# CHECK-NEXT: var: b
+# CHECK-NEXT: var: a
+# CHECK-NEXT: ]
+# CHECK-NEXT: VarDecl e<>
+# CHECK-NEXT: Call 'multiply_transpose' [
+# CHECK-NEXT: var: b
+# CHECK-NEXT: var: c
+# CHECK-NEXT: ]
+# CHECK-NEXT: VarDecl e<>
+# CHECK-NEXT: Call 'multiply_transpose' [
+# CHECK-NEXT: Call 'transpose' [
+# CHECK-NEXT: var: a
+# CHECK-NEXT: ]
+# CHECK-NEXT: var: c
+# CHECK-NEXT: ]
+# CHECK-NEXT: } // Block
+
OpenPOWER on IntegriCloud