summaryrefslogtreecommitdiffstats
path: root/mlir/test/Transforms/Vectorize
diff options
context:
space:
mode:
authorNicolas Vasilache <ntv@google.com>2019-03-22 07:31:00 -0700
committerjpienaar <jpienaar@google.com>2019-03-29 17:30:59 -0700
commit071ca8da918a5aed4758c4b4e27b946663adce58 (patch)
treeeeed12168e909bcee2ddfb9e8ddc0916ae9ae7c0 /mlir/test/Transforms/Vectorize
parent9e210f98840da7228d283d32dc60adf007e64956 (diff)
downloadbcm5719-llvm-071ca8da918a5aed4758c4b4e27b946663adce58.tar.gz
bcm5719-llvm-071ca8da918a5aed4758c4b4e27b946663adce58.zip
Support composition of symbols in AffineApplyOp
This CL revisits the composition of AffineApplyOp for the special case where a symbol itself comes from an AffineApplyOp. This is achieved by rewriting such symbols into dims to allow composition to occur mathematically. The implementation is also refactored to improve readability. Rationale for locally rewriting symbols as dims: ================================================ The mathematical composition of AffineMap must always concatenate symbols because it does not have enough information to do otherwise. For example, composing `(d0)[s0] -> (d0 + s0)` with itself must produce `(d0)[s0, s1] -> (d0 + s0 + s1)`. The result is only equivalent to `(d0)[s0] -> (d0 + 2 * s0)` when applied to the same mlir::Value* for both s0 and s1. As a consequence mathematical composition of AffineMap always concatenates symbols. When AffineMaps are used in AffineApplyOp however, they may specify composition via symbols, which is ambiguous mathematically. This corner case is handled by locally rewriting such symbols that come from AffineApplyOp into dims and composing through dims. PiperOrigin-RevId: 239791597
Diffstat (limited to 'mlir/test/Transforms/Vectorize')
-rw-r--r--mlir/test/Transforms/Vectorize/lower_vector_transfers.mlir18
1 files changed, 9 insertions, 9 deletions
diff --git a/mlir/test/Transforms/Vectorize/lower_vector_transfers.mlir b/mlir/test/Transforms/Vectorize/lower_vector_transfers.mlir
index 59287791e14..013f6351a17 100644
--- a/mlir/test/Transforms/Vectorize/lower_vector_transfers.mlir
+++ b/mlir/test/Transforms/Vectorize/lower_vector_transfers.mlir
@@ -1,7 +1,7 @@
// RUN: mlir-opt %s -lower-vector-transfers | FileCheck %s
// CHECK: #[[ADD:map[0-9]+]] = (d0, d1) -> (d0 + d1)
-// CHECK: #[[SUB:map[0-9]+]] = (d0) -> (d0 - 1)
+// CHECK: #[[SUB:map[0-9]+]] = ()[s0] -> (s0 - 1)
// CHECK-LABEL: func @materialize_read_1d() {
func @materialize_read_1d() {
@@ -74,19 +74,19 @@ func @materialize_read(%M: index, %N: index, %O: index, %P: index) {
// CHECK-NEXT: {{.*}} = affine.apply #[[ADD]](%[[I0]], %[[I4]])
// CHECK-NEXT: {{.*}} = cmpi "slt", {{.*}} : index
// CHECK-NEXT: {{.*}} = affine.apply #[[ADD]](%[[I0]], %[[I4]])
- // CHECK-NEXT: {{.*}} = affine.apply #[[SUB]](%[[D0]])
+ // CHECK-NEXT: {{.*}} = affine.apply #[[SUB]]()[%[[D0]]]
// CHECK-NEXT: {{.*}} = select
// CHECK-NEXT: %[[L0:.*]] = select
//
// CHECK-NEXT: {{.*}} = cmpi "slt", {{.*}} : index
// CHECK-NEXT: {{.*}} = cmpi "slt", {{.*}} : index
- // CHECK-NEXT: {{.*}} = affine.apply #[[SUB]](%[[D1]])
+ // CHECK-NEXT: {{.*}} = affine.apply #[[SUB]]()[%[[D1]]]
// CHECK-NEXT: {{.*}} = select
// CHECK-NEXT: %[[L1:.*]] = select
//
// CHECK-NEXT: {{.*}} = cmpi "slt", {{.*}} : index
// CHECK-NEXT: {{.*}} = cmpi "slt", {{.*}} : index
- // CHECK-NEXT: {{.*}} = affine.apply #[[SUB]](%[[D2]])
+ // CHECK-NEXT: {{.*}} = affine.apply #[[SUB]]()[%[[D2]]]
// CHECK-NEXT: {{.*}} = select
// CHECK-NEXT: %[[L2:.*]] = select
//
@@ -95,7 +95,7 @@ func @materialize_read(%M: index, %N: index, %O: index, %P: index) {
// CHECK-NEXT: {{.*}} = affine.apply #[[ADD]](%[[I3]], %[[I6]])
// CHECK-NEXT: {{.*}} = cmpi "slt", {{.*}} : index
// CHECK-NEXT: {{.*}} = affine.apply #[[ADD]](%[[I3]], %[[I6]])
- // CHECK-NEXT: {{.*}} = affine.apply #[[SUB]](%[[D3]])
+ // CHECK-NEXT: {{.*}} = affine.apply #[[SUB]]()[%[[D3]]]
// CHECK-NEXT: {{.*}} = select
// CHECK-NEXT: %[[L3:.*]] = select
//
@@ -154,7 +154,7 @@ func @materialize_write(%M: index, %N: index, %O: index, %P: index) {
// CHECK-NEXT: {{.*}} = affine.apply #[[ADD]](%[[I0]], %[[I4]])
// CHECK-NEXT: {{.*}} = cmpi "slt", {{.*}}, {{.*}} : index
// CHECK-NEXT: {{.*}} = affine.apply #[[ADD]](%[[I0]], %[[I4]])
- // CHECK-NEXT: {{.*}} = affine.apply #[[SUB]](%[[D0]])
+ // CHECK-NEXT: {{.*}} = affine.apply #[[SUB]]()[%[[D0]]]
// CHECK-NEXT: {{.*}} = select {{.*}}, {{.*}}, {{.*}} : index
// CHECK-NEXT: %[[S0:.*]] = select {{.*}}, %[[C0]], {{.*}} : index
//
@@ -163,13 +163,13 @@ func @materialize_write(%M: index, %N: index, %O: index, %P: index) {
// CHECK-NEXT: {{.*}} = affine.apply #[[ADD]](%[[I1]], %[[I5]])
// CHECK-NEXT: {{.*}} = cmpi "slt", {{.*}}, {{.*}} : index
// CHECK-NEXT: {{.*}} = affine.apply #[[ADD]](%[[I1]], %[[I5]])
- // CHECK-NEXT: {{.*}} = affine.apply #[[SUB]](%[[D1]])
+ // CHECK-NEXT: {{.*}} = affine.apply #[[SUB]]()[%[[D1]]]
// CHECK-NEXT: {{.*}} = select {{.*}}, {{.*}}, {{.*}} : index
// CHECK-NEXT: %[[S1:.*]] = select {{.*}}, %[[C0]], {{.*}} : index
//
// CHECK-NEXT: {{.*}} = cmpi "slt", %[[I2]], %[[C0]] : index
// CHECK-NEXT: {{.*}} = cmpi "slt", %[[I2]], %3 : index
- // CHECK-NEXT: {{.*}} = affine.apply #[[SUB]](%[[D2]])
+ // CHECK-NEXT: {{.*}} = affine.apply #[[SUB]]()[%[[D2]]]
// CHECK-NEXT: {{.*}} = select {{.*}}, %[[I2]], {{.*}} : index
// CHECK-NEXT: %[[S2:.*]] = select {{.*}}, %[[C0]], {{.*}} : index
//
@@ -178,7 +178,7 @@ func @materialize_write(%M: index, %N: index, %O: index, %P: index) {
// CHECK-NEXT: {{.*}} = affine.apply #[[ADD]](%[[I3]], %[[I6]])
// CHECK-NEXT: {{.*}} = cmpi "slt", {{.*}}, {{.*}} : index
// CHECK-NEXT: {{.*}} = affine.apply #[[ADD]](%[[I3]], %[[I6]])
- // CHECK-NEXT: {{.*}} = affine.apply #[[SUB]](%[[D3]])
+ // CHECK-NEXT: {{.*}} = affine.apply #[[SUB]]()[%[[D3]]]
// CHECK-NEXT: {{.*}} = select {{.*}}, {{.*}}, {{.*}} : index
// CHECK-NEXT: %[[S3:.*]] = select {{.*}}, %[[C0]], {{.*}} : index
//
OpenPOWER on IntegriCloud