• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// RUN: toyc-ch6 %s -emit=mlir-affine 2>&1 | FileCheck %s
2// RUN: toyc-ch6 %s -emit=mlir-affine -opt 2>&1 | FileCheck %s --check-prefix=OPT
3
4func @main() {
5  %0 = toy.constant dense<[[1.000000e+00, 2.000000e+00, 3.000000e+00], [4.000000e+00, 5.000000e+00, 6.000000e+00]]> : tensor<2x3xf64>
6  %2 = toy.transpose(%0 : tensor<2x3xf64>) to tensor<3x2xf64>
7  %3 = toy.mul %2, %2 : tensor<3x2xf64>
8  toy.print %3 : tensor<3x2xf64>
9  toy.return
10}
11
12// CHECK-LABEL: func @main()
13// CHECK:         [[VAL_0:%.*]] = constant 1.000000e+00 : f64
14// CHECK:         [[VAL_1:%.*]] = constant 2.000000e+00 : f64
15// CHECK:         [[VAL_2:%.*]] = constant 3.000000e+00 : f64
16// CHECK:         [[VAL_3:%.*]] = constant 4.000000e+00 : f64
17// CHECK:         [[VAL_4:%.*]] = constant 5.000000e+00 : f64
18// CHECK:         [[VAL_5:%.*]] = constant 6.000000e+00 : f64
19// CHECK:         [[VAL_6:%.*]] = alloc() : memref<3x2xf64>
20// CHECK:         [[VAL_7:%.*]] = alloc() : memref<3x2xf64>
21// CHECK:         [[VAL_8:%.*]] = alloc() : memref<2x3xf64>
22// CHECK:         affine.store [[VAL_0]], [[VAL_8]][0, 0] : memref<2x3xf64>
23// CHECK:         affine.store [[VAL_1]], [[VAL_8]][0, 1] : memref<2x3xf64>
24// CHECK:         affine.store [[VAL_2]], [[VAL_8]][0, 2] : memref<2x3xf64>
25// CHECK:         affine.store [[VAL_3]], [[VAL_8]][1, 0] : memref<2x3xf64>
26// CHECK:         affine.store [[VAL_4]], [[VAL_8]][1, 1] : memref<2x3xf64>
27// CHECK:         affine.store [[VAL_5]], [[VAL_8]][1, 2] : memref<2x3xf64>
28// CHECK:         affine.for [[VAL_9:%.*]] = 0 to 3 {
29// CHECK:           affine.for [[VAL_10:%.*]] = 0 to 2 {
30// CHECK:             [[VAL_11:%.*]] = affine.load [[VAL_8]]{{\[}}[[VAL_10]], [[VAL_9]]] : memref<2x3xf64>
31// CHECK:             affine.store [[VAL_11]], [[VAL_7]]{{\[}}[[VAL_9]], [[VAL_10]]] : memref<3x2xf64>
32// CHECK:         affine.for [[VAL_12:%.*]] = 0 to 3 {
33// CHECK:           affine.for [[VAL_13:%.*]] = 0 to 2 {
34// CHECK:             [[VAL_14:%.*]] = affine.load [[VAL_7]]{{\[}}[[VAL_12]], [[VAL_13]]] : memref<3x2xf64>
35// CHECK:             [[VAL_15:%.*]] = affine.load [[VAL_7]]{{\[}}[[VAL_12]], [[VAL_13]]] : memref<3x2xf64>
36// CHECK:             [[VAL_16:%.*]] = mulf [[VAL_14]], [[VAL_15]] : f64
37// CHECK:             affine.store [[VAL_16]], [[VAL_6]]{{\[}}[[VAL_12]], [[VAL_13]]] : memref<3x2xf64>
38// CHECK:         toy.print [[VAL_6]] : memref<3x2xf64>
39// CHECK:         dealloc [[VAL_8]] : memref<2x3xf64>
40// CHECK:         dealloc [[VAL_7]] : memref<3x2xf64>
41// CHECK:         dealloc [[VAL_6]] : memref<3x2xf64>
42
43// OPT-LABEL: func @main()
44// OPT:         [[VAL_0:%.*]] = constant 1.000000e+00 : f64
45// OPT:         [[VAL_1:%.*]] = constant 2.000000e+00 : f64
46// OPT:         [[VAL_2:%.*]] = constant 3.000000e+00 : f64
47// OPT:         [[VAL_3:%.*]] = constant 4.000000e+00 : f64
48// OPT:         [[VAL_4:%.*]] = constant 5.000000e+00 : f64
49// OPT:         [[VAL_5:%.*]] = constant 6.000000e+00 : f64
50// OPT:         [[VAL_6:%.*]] = alloc() : memref<3x2xf64>
51// OPT:         [[VAL_7:%.*]] = alloc() : memref<2x3xf64>
52// OPT:         affine.store [[VAL_0]], [[VAL_7]][0, 0] : memref<2x3xf64>
53// OPT:         affine.store [[VAL_1]], [[VAL_7]][0, 1] : memref<2x3xf64>
54// OPT:         affine.store [[VAL_2]], [[VAL_7]][0, 2] : memref<2x3xf64>
55// OPT:         affine.store [[VAL_3]], [[VAL_7]][1, 0] : memref<2x3xf64>
56// OPT:         affine.store [[VAL_4]], [[VAL_7]][1, 1] : memref<2x3xf64>
57// OPT:         affine.store [[VAL_5]], [[VAL_7]][1, 2] : memref<2x3xf64>
58// OPT:         affine.for [[VAL_8:%.*]] = 0 to 3 {
59// OPT:           affine.for [[VAL_9:%.*]] = 0 to 2 {
60// OPT:             [[VAL_10:%.*]] = affine.load [[VAL_7]]{{\[}}[[VAL_9]], [[VAL_8]]] : memref<2x3xf64>
61// OPT:             [[VAL_11:%.*]] = mulf [[VAL_10]], [[VAL_10]] : f64
62// OPT:             affine.store [[VAL_11]], [[VAL_6]]{{\[}}[[VAL_8]], [[VAL_9]]] : memref<3x2xf64>
63// OPT:         toy.print [[VAL_6]] : memref<3x2xf64>
64// OPT:         dealloc [[VAL_7]] : memref<2x3xf64>
65// OPT:         dealloc [[VAL_6]] : memref<3x2xf64>
66