normalize_maps.mlir 2.61 KB
// RUN: mlir-opt %s -affine-super-vectorizer-test -normalize-maps |  FileCheck %s

// CHECK-DAG: #[[$ZERO:[a-zA-Z0-9]+]] = affine_map<() -> (0)>
// CHECK-DAG: #[[$ID1:[a-zA-Z0-9]+]] = affine_map<(d0) -> (d0)>
// CHECK-DAG: #[[$D0TIMES2:[a-zA-Z0-9]+]] = affine_map<(d0) -> (d0 * 2)>
// CHECK-DAG: #[[$D0PLUSD1:[a-zA-Z0-9]+]] = affine_map<(d0, d1) -> (d0 + d1)>
// CHECK-DAG: #[[$MINSD0PLUSD1:[a-zA-Z0-9]+]] = affine_map<(d0, d1) -> (-d0 + d1)>
// CHECK-DAG: #[[$D0MINUSD1:[a-zA-Z0-9]+]] = affine_map<(d0, d1) -> (d0 - d1)>

// CHECK-LABEL: func @simple()
func @simple() {
  affine.for %i0 = 0 to 7 {
    %0 = affine.apply affine_map<(d0) -> (d0)> (%i0)
    %1 = affine.apply affine_map<(d0) -> (d0)> (%0)
    %2 = affine.apply affine_map<(d0, d1) -> (d0 + d1)> (%0, %0)
    %3 = affine.apply affine_map<(d0, d1) -> (d0 - d1)> (%0, %0)
  }
  // CHECK-NEXT: affine.for %{{.*}} = 0 to 7
  // CHECK-NEXT:   {{.*}} affine.apply #[[$ID1]](%{{.*}})
  // CHECK-NEXT:   {{.*}} affine.apply #[[$D0TIMES2]](%{{.*}})
  // CHECK-NEXT:   {{.*}} affine.apply #[[$ZERO]]()

  affine.for %i1 = 0 to 7 {
    affine.for %i2 = 0 to 42 {
      %20 = affine.apply affine_map<(d0, d1) -> (d1)> (%i1, %i2)
      %21 = affine.apply affine_map<(d0, d1) -> (d0)> (%i1, %i2)
      %22 = affine.apply affine_map<(d0, d1) -> (d0 + d1)> (%20, %21)
      %23 = affine.apply affine_map<(d0, d1) -> (d0 - d1)> (%20, %21)
      %24 = affine.apply affine_map<(d0, d1) -> (-d0 + d1)> (%20, %21)
    }
  }
  //      CHECK: affine.for %{{.*}} = 0 to 7
  // CHECK-NEXT:   affine.for %{{.*}} = 0 to 42
  // CHECK-NEXT:     {{.*}} affine.apply #[[$D0PLUSD1]](%{{.*}}, %{{.*}})
  // CHECK-NEXT:     {{.*}} affine.apply #[[$MINSD0PLUSD1]](%{{.*}}, %{{.*}})
  // CHECK-NEXT:     {{.*}} affine.apply #[[$D0MINUSD1]](%{{.*}}, %{{.*}})

  affine.for %i3 = 0 to 16 {
    affine.for %i4 = 0 to 47 step 2 {
      affine.for %i5 = 0 to 78 step 16 {
        %50 = affine.apply affine_map<(d0) -> (d0)> (%i3)
        %51 = affine.apply affine_map<(d0) -> (d0)> (%i4)
        %52 = affine.apply affine_map<(d0) -> (d0)> (%i5)
        %53 = affine.apply affine_map<(d0, d1, d2) -> (d0)> (%50, %51, %52)
        %54 = affine.apply affine_map<(d0, d1, d2) -> (d1)> (%50, %51, %52)
        %55 = affine.apply affine_map<(d0, d1, d2) -> (d2)> (%50, %51, %52)
      }
    }
  }
  // CHECK:      affine.for %{{.*}} = 0 to 16
  // CHECK-NEXT:   affine.for %{{.*}} = 0 to 47 step 2
  // CHECK-NEXT:     affine.for %{{.*}} = 0 to 78 step 16
  // CHECK-NEXT:       {{.*}} affine.apply #[[$ID1]](%{{.*}})
  // CHECK-NEXT:       {{.*}} affine.apply #[[$ID1]](%{{.*}})
  // CHECK-NEXT:       {{.*}} affine.apply #[[$ID1]](%{{.*}})

  return
}