diff options
| author | Nicolas Vasilache <ntv@google.com> | 2019-12-04 12:11:08 -0800 |
|---|---|---|
| committer | A. Unique TensorFlower <gardener@tensorflow.org> | 2019-12-04 12:11:42 -0800 |
| commit | edfaf925cfab38e02b281136a0d72a51d0e153a1 (patch) | |
| tree | 42e8443eb1413e20af8dc2414bec82b460fc5293 /mlir/test/Transforms | |
| parent | 31b3e2248b1df65241b1125ec1f530ce9f8a8886 (diff) | |
| download | bcm5719-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')
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 -} |

