summaryrefslogtreecommitdiffstats
path: root/mlir/test/Transforms
diff options
context:
space:
mode:
authorNicolas Vasilache <ntv@google.com>2019-12-04 12:11:08 -0800
committerA. Unique TensorFlower <gardener@tensorflow.org>2019-12-04 12:11:42 -0800
commitedfaf925cfab38e02b281136a0d72a51d0e153a1 (patch)
tree42e8443eb1413e20af8dc2414bec82b460fc5293 /mlir/test/Transforms
parent31b3e2248b1df65241b1125ec1f530ce9f8a8886 (diff)
downloadbcm5719-llvm-edfaf925cfab38e02b281136a0d72a51d0e153a1.tar.gz
bcm5719-llvm-edfaf925cfab38e02b281136a0d72a51d0e153a1.zip
Drop MaterializeVectorTransfers in favor of simpler declarative unrolling
Now that we have unrolling as a declarative pattern, we can drop a full pass that has gone stale. In the future we may want to add specific unrolling patterns for VectorTransferReadOp. PiperOrigin-RevId: 283806880
Diffstat (limited to 'mlir/test/Transforms')
-rw-r--r--mlir/test/Transforms/Vectorize/materialize.mlir38
-rw-r--r--mlir/test/Transforms/Vectorize/materialize_vectors_1d_to_1d.mlir125
-rw-r--r--mlir/test/Transforms/Vectorize/materialize_vectors_2d_to_1d.mlir137
-rw-r--r--mlir/test/Transforms/Vectorize/materialize_vectors_2d_to_2d.mlir87
4 files changed, 0 insertions, 387 deletions
diff --git a/mlir/test/Transforms/Vectorize/materialize.mlir b/mlir/test/Transforms/Vectorize/materialize.mlir
deleted file mode 100644
index dbd975bb169..00000000000
--- a/mlir/test/Transforms/Vectorize/materialize.mlir
+++ /dev/null
@@ -1,38 +0,0 @@
-// RUN: mlir-opt %s -affine-materialize-vectors -vector-size=4 -vector-size=4 | FileCheck %s
-
-// CHECK-DAG: #[[ID1:map[0-9]+]] = (d0) -> (d0)
-// CHECK-DAG: #[[D0D1D2D3TOD1D0:map[0-9]+]] = (d0, d1, d2, d3) -> (d1, d0)
-// CHECK-DAG: #[[D0P1:map[0-9]+]] = (d0) -> (d0 + 1)
-// CHECK-DAG: #[[D0P2:map[0-9]+]] = (d0) -> (d0 + 2)
-// CHECK-DAG: #[[D0P3:map[0-9]+]] = (d0) -> (d0 + 3)
-
-// CHECK-LABEL: func @materialize
-func @materialize(%M : index, %N : index, %O : index, %P : index) {
- %A = alloc (%M, %N, %O, %P) : memref<?x?x?x?xf32, 0>
- %f1 = constant dense<1.000000e+00> : vector<4x4x4xf32>
- // CHECK: affine.for %{{.*}} = 0 to %{{.*}} step 4 {
- // CHECK-NEXT: affine.for %{{.*}} = 0 to %{{.*}} step 4 {
- // CHECK-NEXT: affine.for %{{.*}} = 0 to %{{.*}} {
- // CHECK-NEXT: affine.for %{{.*}} = 0 to %{{.*}} step 4 {
- // CHECK-NEXT: %[[a:[0-9]+]] = {{.*}}[[ID1]](%{{.*}})
- // CHECK-NEXT: %[[b:[0-9]+]] = {{.*}}[[ID1]](%{{.*}})
- // CHECK-NEXT: %[[c:[0-9]+]] = {{.*}}[[ID1]](%{{.*}})
- // CHECK-NEXT: %[[d:[0-9]+]] = {{.*}}[[ID1]](%{{.*}})
- // CHECK-NEXT: vector.transfer_write {{.*}}, %{{.*}}[%[[a]], %[[b]], %[[c]], %[[d]]] {permutation_map = #[[D0D1D2D3TOD1D0]]} : vector<4x4xf32>, memref<?x?x?x?xf32>
- // CHECK: %[[b1:[0-9]+]] = {{.*}}[[D0P1]](%{{.*}})
- // CHECK: vector.transfer_write {{.*}}, %{{.*}}[{{.*}}, %[[b1]], {{.*}}] {permutation_map = #[[D0D1D2D3TOD1D0]]} : vector<4x4xf32>, memref<?x?x?x?xf32>
- // CHECK: %[[b2:[0-9]+]] = {{.*}}[[D0P2]](%{{.*}})
- // CHECK: vector.transfer_write {{.*}}, %{{.*}}[{{.*}}, %[[b2]], {{.*}}] {permutation_map = #[[D0D1D2D3TOD1D0]]} : vector<4x4xf32>, memref<?x?x?x?xf32>
- // CHECK: %[[b3:[0-9]+]] = {{.*}}[[D0P3]](%{{.*}})
- // CHECK: vector.transfer_write {{.*}}, %{{.*}}[{{.*}}, %[[b3]], {{.*}}] {permutation_map = #[[D0D1D2D3TOD1D0]]} : vector<4x4xf32>, memref<?x?x?x?xf32>
- affine.for %i0 = 0 to %M step 4 {
- affine.for %i1 = 0 to %N step 4 {
- affine.for %i2 = 0 to %O {
- affine.for %i3 = 0 to %P step 4 {
- vector.transfer_write %f1, %A[%i0, %i1, %i2, %i3] {permutation_map = (d0, d1, d2, d3) -> (d3, d1, d0)} : vector<4x4x4xf32>, memref<?x?x?x?xf32, 0>
- }
- }
- }
- }
- return
-} \ No newline at end of file
diff --git a/mlir/test/Transforms/Vectorize/materialize_vectors_1d_to_1d.mlir b/mlir/test/Transforms/Vectorize/materialize_vectors_1d_to_1d.mlir
deleted file mode 100644
index 055b43b0dfe..00000000000
--- a/mlir/test/Transforms/Vectorize/materialize_vectors_1d_to_1d.mlir
+++ /dev/null
@@ -1,125 +0,0 @@
-// RUN: mlir-opt %s -affine-vectorize -virtual-vector-size 32 --test-fastest-varying=0 -affine-materialize-vectors -vector-size=8 | FileCheck %s
-
-// vector<32xf32> -> vector<8xf32>
-// CHECK-DAG: [[ID1:#.*]] = (d0) -> (d0)
-// CHECK-DAG: [[D0D1TOD1:#.*]] = (d0, d1) -> (d1)
-// CHECK-DAG: [[D0P8:#.*]] = (d0) -> (d0 + 8)
-// CHECK-DAG: [[D0P16:#.*]] = (d0) -> (d0 + 16)
-// CHECK-DAG: [[D0P24:#.*]] = (d0) -> (d0 + 24)
-
-// CHECK-LABEL: func @vector_add_2d
-func @vector_add_2d(%M : index, %N : index) -> f32 {
- %A = alloc (%M, %N) : memref<?x?xf32, 0>
- %B = alloc (%M, %N) : memref<?x?xf32, 0>
- %C = alloc (%M, %N) : memref<?x?xf32, 0>
- %f1 = constant 1.0 : f32
- %f2 = constant 2.0 : f32
- // 4x unroll (jammed by construction).
- // CHECK: affine.for %{{.*}} = 0 to %{{.*}} {
- // CHECK-NEXT: affine.for %{{.*}} = 0 to %{{.*}} step 32 {
- // CHECK-NEXT: %[[CST0:.*]] = constant dense<1.000000e+00> : vector<8xf32>
- // CHECK-NEXT: %[[CST1:.*]] = constant dense<1.000000e+00> : vector<8xf32>
- // CHECK-NEXT: %[[CST2:.*]] = constant dense<1.000000e+00> : vector<8xf32>
- // CHECK-NEXT: %[[CST3:.*]] = constant dense<1.000000e+00> : vector<8xf32>
- // CHECK-NEXT: %[[VAL00:.*]] = affine.apply [[ID1]]{{.*}}
- // CHECK-NEXT: %[[VAL01:.*]] = affine.apply [[ID1]]{{.*}}
- // CHECK-NEXT: vector.transfer_write %[[CST0]], {{.*}}[%[[VAL00]], %[[VAL01]]] {permutation_map = [[D0D1TOD1]]} : vector<8xf32>, memref<?x?xf32>
- // CHECK-NEXT: %[[VAL10:.*]] = affine.apply [[ID1]]{{.*}}
- // CHECK-NEXT: %[[VAL11:.*]] = affine.apply [[D0P8]]{{.*}}
- // CHECK-NEXT: vector.transfer_write %[[CST1]], {{.*}}[%[[VAL10]], %[[VAL11]]] {permutation_map = [[D0D1TOD1]]} : vector<8xf32>, memref<?x?xf32>
- // CHECK-NEXT: %[[VAL20:.*]] = affine.apply [[ID1]]{{.*}}
- // CHECK-NEXT: %[[VAL21:.*]] = affine.apply [[D0P16]]{{.*}}
- // CHECK-NEXT: vector.transfer_write %[[CST2]], {{.*}}[%[[VAL20]], %[[VAL21]]] {permutation_map = [[D0D1TOD1]]} : vector<8xf32>, memref<?x?xf32>
- // CHECK-NEXT: %[[VAL30:.*]] = affine.apply [[ID1]]{{.*}}
- // CHECK-NEXT: %[[VAL31:.*]] = affine.apply [[D0P24]]{{.*}}
- // CHECK-NEXT: vector.transfer_write %[[CST3]], {{.*}}[%[[VAL30]], %[[VAL31]]] {permutation_map = [[D0D1TOD1]]} : vector<8xf32>
- //
- affine.for %i0 = 0 to %M {
- affine.for %i1 = 0 to %N {
- // non-scoped %f1
- affine.store %f1, %A[%i0, %i1] : memref<?x?xf32, 0>
- }
- }
- // 4x unroll (jammed by construction).
- // CHECK: affine.for %{{.*}} = 0 to %{{.*}} {
- // CHECK-NEXT: affine.for %{{.*}} = 0 to %{{.*}} step 32 {
- // CHECK-NEXT: %[[CST0:.*]] = constant dense<2.000000e+00> : vector<8xf32>
- // CHECK-NEXT: %[[CST1:.*]] = constant dense<2.000000e+00> : vector<8xf32>
- // CHECK-NEXT: %[[CST2:.*]] = constant dense<2.000000e+00> : vector<8xf32>
- // CHECK-NEXT: %[[CST3:.*]] = constant dense<2.000000e+00> : vector<8xf32>
- // CHECK-NEXT: %[[VAL00:.*]] = affine.apply [[ID1]]{{.*}}
- // CHECK-NEXT: %[[VAL01:.*]] = affine.apply [[ID1]]{{.*}}
- // CHECK-NEXT: vector.transfer_write %[[CST0]], {{.*}}[%[[VAL00]], %[[VAL01]]] {permutation_map = [[D0D1TOD1]]} : vector<8xf32>, memref<?x?xf32>
- // CHECK-NEXT: %[[VAL10:.*]] = affine.apply [[ID1]]{{.*}}
- // CHECK-NEXT: %[[VAL11:.*]] = affine.apply [[D0P8]]{{.*}}
- // CHECK-NEXT: vector.transfer_write %[[CST1]], {{.*}}[%[[VAL10]], %[[VAL11]]] {permutation_map = [[D0D1TOD1]]} : vector<8xf32>, memref<?x?xf32>
- // CHECK-NEXT: %[[VAL20:.*]] = affine.apply [[ID1]]{{.*}}
- // CHECK-NEXT: %[[VAL21:.*]] = affine.apply [[D0P16]]{{.*}}
- // CHECK-NEXT: vector.transfer_write %[[CST2]], {{.*}}[%[[VAL20]], %[[VAL21]]] {permutation_map = [[D0D1TOD1]]} : vector<8xf32>, memref<?x?xf32>
- // CHECK-NEXT: %[[VAL30:.*]] = affine.apply [[ID1]]{{.*}}
- // CHECK-NEXT: %[[VAL31:.*]] = affine.apply [[D0P24]]{{.*}}
- // CHECK-NEXT: vector.transfer_write %[[CST3]], {{.*}}[%[[VAL30]], %[[VAL31]]] {permutation_map = [[D0D1TOD1]]} : vector<8xf32>, memref<?x?xf32>
- //
- affine.for %i2 = 0 to %M {
- affine.for %i3 = 0 to %N {
- // non-scoped %f2
- affine.store %f2, %B[%i2, %i3] : memref<?x?xf32, 0>
- }
- }
- // 4x unroll (jammed by construction).
- // CHECK: affine.for %{{.*}} = 0 to %{{.*}} {
- // CHECK-NEXT: affine.for %{{.*}} = 0 to %{{.*}} step 32 {
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = vector.transfer_read
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = vector.transfer_read
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = vector.transfer_read
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = vector.transfer_read
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = vector.transfer_read
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = vector.transfer_read
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = vector.transfer_read
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = vector.transfer_read
- // CHECK-NEXT: {{.*}} = addf {{.*}} : vector<8xf32>
- // CHECK-NEXT: {{.*}} = addf {{.*}} : vector<8xf32>
- // CHECK-NEXT: {{.*}} = addf {{.*}} : vector<8xf32>
- // CHECK-NEXT: {{.*}} = addf {{.*}} : vector<8xf32>
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: vector.transfer_write
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: vector.transfer_write
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: vector.transfer_write
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: vector.transfer_write
- //
- affine.for %i4 = 0 to %M {
- affine.for %i5 = 0 to %N {
- %a5 = affine.load %A[%i4, %i5] : memref<?x?xf32, 0>
- %b5 = affine.load %B[%i4, %i5] : memref<?x?xf32, 0>
- %s5 = addf %a5, %b5 : f32
- affine.store %s5, %C[%i4, %i5] : memref<?x?xf32, 0>
- }
- }
- %c7 = constant 7 : index
- %c42 = constant 42 : index
- %res = affine.load %C[%c7, %c42] : memref<?x?xf32, 0>
- return %res : f32
-}
diff --git a/mlir/test/Transforms/Vectorize/materialize_vectors_2d_to_1d.mlir b/mlir/test/Transforms/Vectorize/materialize_vectors_2d_to_1d.mlir
deleted file mode 100644
index 882f5e6fcbe..00000000000
--- a/mlir/test/Transforms/Vectorize/materialize_vectors_2d_to_1d.mlir
+++ /dev/null
@@ -1,137 +0,0 @@
-// RUN: mlir-opt %s -affine-vectorize -virtual-vector-size 3 -virtual-vector-size 16 --test-fastest-varying=1 --test-fastest-varying=0 -affine-materialize-vectors -vector-size=8 | FileCheck %s
-
-// vector<3x16xf32> -> vector<8xf32>
-// CHECK-DAG: [[ID1:#.*]] = (d0) -> (d0)
-// CHECK-DAG: [[D0D1TOD1:#.*]] = (d0, d1) -> (d1)
-// CHECK-DAG: [[D0P8:#.*]] = (d0) -> (d0 + 8)
-// CHECK-DAG: [[D0P1:#.*]] = (d0) -> (d0 + 1)
-// CHECK-DAG: [[D0P2:#.*]] = (d0) -> (d0 + 2)
-
-// CHECK-LABEL: func @vector_add_2d
-func @vector_add_2d(%M : index, %N : index) -> f32 {
- %A = alloc (%M, %N) : memref<?x?xf32, 0>
- %B = alloc (%M, %N) : memref<?x?xf32, 0>
- %C = alloc (%M, %N) : memref<?x?xf32, 0>
- %f1 = constant 1.0 : f32
- %f2 = constant 2.0 : f32
- // (3x2)x unroll (jammed by construction).
- // CHECK: affine.for %{{.*}} = 0 to %{{.*}} step 3 {
- // CHECK-NEXT: affine.for %{{.*}} = 0 to %{{.*}} step 16 {
- // CHECK-NEXT: {{.*}} = constant dense<1.000000e+00> : vector<8xf32>
- // CHECK-NEXT: {{.*}} = constant dense<1.000000e+00> : vector<8xf32>
- // CHECK-NEXT: {{.*}} = constant dense<1.000000e+00> : vector<8xf32>
- // CHECK-NEXT: {{.*}} = constant dense<1.000000e+00> : vector<8xf32>
- // CHECK-NEXT: {{.*}} = constant dense<1.000000e+00> : vector<8xf32>
- // CHECK-NEXT: {{.*}} = constant dense<1.000000e+00> : vector<8xf32>
- // CHECK-NEXT: %[[VAL00:.*]] = affine.apply [[ID1]](%{{.*}})
- // CHECK-NEXT: %[[VAL01:.*]] = affine.apply [[ID1]](%{{.*}})
- // CHECK-NEXT: vector.transfer_write {{.*}}, {{.*}}[%[[VAL00]], %[[VAL01]]] {permutation_map = [[D0D1TOD1]]} : vector<8xf32>, memref<?x?xf32>
- // CHECK-NEXT: %[[VAL10:.*]] = affine.apply [[ID1]](%{{.*}})
- // CHECK-NEXT: %[[VAL11:.*]] = affine.apply [[D0P8]](%{{.*}})
- // CHECK-NEXT: vector.transfer_write {{.*}}, {{.*}}[%[[VAL10]], %[[VAL11]]] {permutation_map = [[D0D1TOD1]]} : vector<8xf32>, memref<?x?xf32>
- // CHECK-NEXT: %[[VAL20:.*]] = affine.apply [[D0P1]](%{{.*}})
- // CHECK-NEXT: %[[VAL21:.*]] = affine.apply [[ID1]](%{{.*}})
- // CHECK-NEXT: vector.transfer_write {{.*}}, {{.*}}[%[[VAL20]], %[[VAL21]]] {permutation_map = [[D0D1TOD1]]} : vector<8xf32>, memref<?x?xf32>
- // CHECK-NEXT: %[[VAL30:.*]] = affine.apply [[D0P1]](%{{.*}})
- // CHECK-NEXT: %[[VAL31:.*]] = affine.apply [[D0P8]](%{{.*}})
- // CHECK-NEXT: vector.transfer_write {{.*}}, {{.*}}[%[[VAL30]], %[[VAL31]]] {permutation_map = [[D0D1TOD1]]} : vector<8xf32>, memref<?x?xf32>
- // CHECK-NEXT: %[[VAL40:.*]] = affine.apply [[D0P2]](%{{.*}})
- // CHECK-NEXT: %[[VAL41:.*]] = affine.apply [[ID1]](%{{.*}})
- // CHECK-NEXT: vector.transfer_write {{.*}}, {{.*}}[%[[VAL40]], %[[VAL41]]] {permutation_map = [[D0D1TOD1]]} : vector<8xf32>, memref<?x?xf32>
- // CHECK-NEXT: %[[VAL50:.*]] = affine.apply [[D0P2]](%{{.*}})
- // CHECK-NEXT: %[[VAL51:.*]] = affine.apply [[D0P8]](%{{.*}})
- // CHECK-NEXT: vector.transfer_write {{.*}}, {{.*}}[%[[VAL50]], %[[VAL51]]] {permutation_map = [[D0D1TOD1]]} : vector<8xf32>, memref<?x?xf32>
- affine.for %i0 = 0 to %M {
- affine.for %i1 = 0 to %N {
- // non-scoped %{{.*}}
- affine.store %f1, %A[%i0, %i1] : memref<?x?xf32, 0>
- }
- }
- // (3x2)x unroll (jammed by construction).
- // CHECK: affine.for %{{.*}} = 0 to %{{.*}} step 3 {
- // CHECK-NEXT: affine.for %{{.*}} = 0 to %{{.*}} step 16 {
- // .....
- affine.for %i2 = 0 to %M {
- affine.for %i3 = 0 to %N {
- // non-scoped %{{.*}}
- // CHECK does (3x4)x unrolling.
- affine.store %f2, %B[%i2, %i3] : memref<?x?xf32, 0>
- }
- }
- // (3x2)x unroll (jammed by construction).
- // CHECK: affine.for %{{.*}} = 0 to %{{.*}} step 3 {
- // CHECK-NEXT: affine.for %{{.*}} = 0 to %{{.*}} step 16 {
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = vector.transfer_read
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = vector.transfer_read
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = vector.transfer_read
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = vector.transfer_read
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = vector.transfer_read
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = vector.transfer_read
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = vector.transfer_read
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = vector.transfer_read
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = vector.transfer_read
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = vector.transfer_read
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = vector.transfer_read
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = vector.transfer_read
- // CHECK-NEXT: {{.*}} = addf {{.*}} : vector<8xf32>
- // CHECK-NEXT: {{.*}} = addf {{.*}} : vector<8xf32>
- // CHECK-NEXT: {{.*}} = addf {{.*}} : vector<8xf32>
- // CHECK-NEXT: {{.*}} = addf {{.*}} : vector<8xf32>
- // CHECK-NEXT: {{.*}} = addf {{.*}} : vector<8xf32>
- // CHECK-NEXT: {{.*}} = addf {{.*}} : vector<8xf32>
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: vector.transfer_write
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: vector.transfer_write
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: vector.transfer_write
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: vector.transfer_write
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: vector.transfer_write
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: vector.transfer_write
- //
- affine.for %i4 = 0 to %M {
- affine.for %i5 = 0 to %N {
- %a5 = affine.load %A[%i4, %i5] : memref<?x?xf32, 0>
- %b5 = affine.load %B[%i4, %i5] : memref<?x?xf32, 0>
- %s5 = addf %a5, %b5 : f32
- affine.store %s5, %C[%i4, %i5] : memref<?x?xf32, 0>
- }
- }
- %c7 = constant 7 : index
- %c42 = constant 42 : index
- %res = affine.load %C[%c7, %c42] : memref<?x?xf32, 0>
- return %res : f32
-}
diff --git a/mlir/test/Transforms/Vectorize/materialize_vectors_2d_to_2d.mlir b/mlir/test/Transforms/Vectorize/materialize_vectors_2d_to_2d.mlir
deleted file mode 100644
index abf465284be..00000000000
--- a/mlir/test/Transforms/Vectorize/materialize_vectors_2d_to_2d.mlir
+++ /dev/null
@@ -1,87 +0,0 @@
-// RUN: mlir-opt %s -affine-vectorize -virtual-vector-size 3 -virtual-vector-size 32 --test-fastest-varying=1 --test-fastest-varying=0 -affine-materialize-vectors -vector-size=3 -vector-size=16 | FileCheck %s
-
-// vector<3x32xf32> -> vector<3x16xf32>
-// CHECK-DAG: [[ID1:#.*]] = (d0) -> (d0)
-// CHECK-DAG: [[ID2:#.*]] = (d0, d1) -> (d0, d1)
-// CHECK-DAG: [[D0P16:#.*]] = (d0) -> (d0 + 16)
-
-// CHECK-LABEL: func @vector_add_2d
-func @vector_add_2d(%M : index, %N : index) -> f32 {
- %A = alloc (%M, %N) : memref<?x?xf32, 0>
- %B = alloc (%M, %N) : memref<?x?xf32, 0>
- %C = alloc (%M, %N) : memref<?x?xf32, 0>
- %f1 = constant 1.0 : f32
- %f2 = constant 2.0 : f32
- // 2x unroll (jammed by construction).
- // CHECK: affine.for %{{.*}} = 0 to %{{.*}} step 3 {
- // CHECK-NEXT: affine.for %{{.*}} = 0 to %{{.*}} step 32 {
- // CHECK-NEXT: {{.*}} = constant dense<1.000000e+00> : vector<3x16xf32>
- // CHECK-NEXT: {{.*}} = constant dense<1.000000e+00> : vector<3x16xf32>
- // CHECK-NEXT: %[[VAL00:.*]] = affine.apply [[ID1]](%{{.*}})
- // CHECK-NEXT: %[[VAL01:.*]] = affine.apply [[ID1]](%{{.*}})
- // CHECK-NEXT: vector.transfer_write {{.*}}, {{.*}}[%[[VAL00]], %[[VAL01]]] {permutation_map = [[ID2]]} : vector<3x16xf32>, memref<?x?xf32>
- // CHECK-NEXT: %[[VAL10:.*]] = affine.apply [[ID1]](%{{.*}})
- // CHECK-NEXT: %[[VAL11:.*]] = affine.apply [[D0P16]](%{{.*}})
- // CHECK-NEXT: vector.transfer_write {{.*}}, {{.*}}[%[[VAL10]], %[[VAL11]]] {permutation_map = [[ID2]]} : vector<3x16xf32>, memref<?x?xf32>
- //
- affine.for %i0 = 0 to %M {
- affine.for %i1 = 0 to %N {
- // non-scoped %{{.*}}
- affine.store %f1, %A[%i0, %i1] : memref<?x?xf32, 0>
- }
- }
- // 2x unroll (jammed by construction).
- // CHECK: affine.for %{{.*}} = 0 to %{{.*}} step 3 {
- // CHECK-NEXT: affine.for %{{.*}} = 0 to %{{.*}} step 32 {
- // CHECK-NEXT: {{.*}} = constant dense<2.000000e+00> : vector<3x16xf32>
- // CHECK-NEXT: {{.*}} = constant dense<2.000000e+00> : vector<3x16xf32>
- // CHECK-NEXT: %[[VAL00:.*]] = affine.apply [[ID1]](%{{.*}})
- // CHECK-NEXT: %[[VAL01:.*]] = affine.apply [[ID1]](%{{.*}})
- // CHECK-NEXT: vector.transfer_write {{.*}}, {{.*}}[%[[VAL00]], %[[VAL01]]] {permutation_map = [[ID2]]} : vector<3x16xf32>, memref<?x?xf32>
- // CHECK-NEXT: %[[VAL10:.*]] = affine.apply [[ID1]](%{{.*}})
- // CHECK-NEXT: %[[VAL11:.*]] = affine.apply [[D0P16]](%{{.*}})
- // CHECK-NEXT: vector.transfer_write {{.*}}, {{.*}}[%[[VAL10]], %[[VAL11]]] {permutation_map = [[ID2]]} : vector<3x16xf32>, memref<?x?xf32>
- //
- affine.for %i2 = 0 to %M {
- affine.for %i3 = 0 to %N {
- // non-scoped %{{.*}}
- affine.store %f2, %B[%i2, %i3] : memref<?x?xf32, 0>
- }
- }
- // 2x unroll (jammed by construction).
- // CHECK: affine.for %{{.*}} = 0 to %{{.*}} step 3 {
- // CHECK-NEXT: affine.for %{{.*}} = 0 to %{{.*}} step 32 {
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = vector.transfer_read
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = vector.transfer_read
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = vector.transfer_read
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = vector.transfer_read
- // CHECK-NEXT: {{.*}} = addf {{.*}} : vector<3x16xf32>
- // CHECK-NEXT: {{.*}} = addf {{.*}} : vector<3x16xf32>
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: vector.transfer_write
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: {{.*}} = affine.apply
- // CHECK-NEXT: vector.transfer_write
- //
- affine.for %i4 = 0 to %M {
- affine.for %i5 = 0 to %N {
- %a5 = affine.load %A[%i4, %i5] : memref<?x?xf32, 0>
- %b5 = affine.load %B[%i4, %i5] : memref<?x?xf32, 0>
- %s5 = addf %a5, %b5 : f32
- affine.store %s5, %C[%i4, %i5] : memref<?x?xf32, 0>
- }
- }
- %c7 = constant 7 : index
- %c42 = constant 42 : index
- %res = affine.load %C[%c7, %c42] : memref<?x?xf32, 0>
- return %res : f32
-}
OpenPOWER on IntegriCloud