blob: 79b8771d9463c37820b672700e1f714d94399d21 [file] [log] [blame]
// RUN: mlir-opt %s -vectorizer-test -forward-slicing=true 2>&1 | FileCheck %s --check-prefix=FWD
// RUN: mlir-opt %s -vectorizer-test -backward-slicing=true 2>&1 | FileCheck %s --check-prefix=BWD
// RUN: mlir-opt %s -vectorizer-test -slicing=true 2>&1 | FileCheck %s --check-prefix=FWDBWD
/// 1 2 3 4
/// |_______| |______|
/// | | |
/// | 5 6
/// |___|_____________|
/// | |
/// 7 8
/// |_______________|
/// |
/// 9
func @slicing_test() {
// Fake 0 to align on 1 and match ASCII art.
%0 = alloc() : memref<1xi32>
// FWD: matched: %1 {{.*}} forward static slice:
// FWD-NEXT: %5 {{.*}} (i32, i32) -> i32
// FWD-DAG: %8 {{.*}} (i32, i32) -> i32
// FWD-DAG: %7 {{.*}} (i32, i32) -> i32
// FWD-NEXT: %9 {{.*}} (i32, i32) -> i32
//
// BWD: matched: %1 {{.*}} backward static slice:
//
// FWDBWD: matched: %1 {{.*}} static slice:
// FWDBWD-DAG: %4 = "slicing-test-op"() : () -> i32
// FWDBWD-DAG: %3 = "slicing-test-op"() : () -> i32
// FWDBWD-NEXT: %6 = "slicing-test-op"(%3, %4) : (i32, i32) -> i32
// FWDBWD-DAG: %2 = "slicing-test-op"() : () -> i32
// FWDBWD-DAG: %1 = "slicing-test-op"() : () -> i32
// FWDBWD-NEXT: %5 = "slicing-test-op"(%1, %2) : (i32, i32) -> i32
// FWDBWD-DAG: %8 = "slicing-test-op"(%5, %6) : (i32, i32) -> i32
// FWDBWD-DAG: %7 = "slicing-test-op"(%1, %5) : (i32, i32) -> i32
// FWDBWD-NEXT: %9 = "slicing-test-op"(%7, %8) : (i32, i32) -> i32
%1 = "slicing-test-op" () : () -> i32
// FWD-NEXT: matched: %2 {{.*}} forward static slice:
// FWD-NEXT: %5 {{.*}} (i32, i32) -> i32
// FWD-DAG: %8 {{.*}} (i32, i32) -> i32
// FWD-DAG: %7 {{.*}} (i32, i32) -> i32
// FWD-NEXT: %9 {{.*}} (i32, i32) -> i32
//
// BWD: matched: %2 {{.*}} backward static slice:
//
// FWDBWD-NEXT: matched: %2 {{.*}} static slice:
// FWDBWD-DAG: %4 = "slicing-test-op"() : () -> i32
// FWDBWD-DAG: %3 = "slicing-test-op"() : () -> i32
// FWDBWD-NEXT: %6 = "slicing-test-op"(%3, %4) : (i32, i32) -> i32
// FWDBWD-DAG: %2 = "slicing-test-op"() : () -> i32
// FWDBWD-DAG: %1 = "slicing-test-op"() : () -> i32
// FWDBWD-NEXT: %5 = "slicing-test-op"(%1, %2) : (i32, i32) -> i32
// FWDBWD-DAG: %8 = "slicing-test-op"(%5, %6) : (i32, i32) -> i32
// FWDBWD-DAG: %7 = "slicing-test-op"(%1, %5) : (i32, i32) -> i32
// FWDBWD-NEXT: %9 = "slicing-test-op"(%7, %8) : (i32, i32) -> i32
%2 = "slicing-test-op" () : () -> i32
// FWD-NEXT: matched: %3 {{.*}} forward static slice:
// FWD-NEXT: %6 {{.*}} (i32, i32) -> i32
// FWD-NEXT: %8 {{.*}} (i32, i32) -> i32
// FWD-NEXT: %9 {{.*}} (i32, i32) -> i32
//
// BWD: matched: %3 {{.*}} backward static slice:
//
// FWDBWD-NEXT: matched: %3 {{.*}} static slice:
// FWDBWD-DAG: %2 = "slicing-test-op"() : () -> i32
// FWDBWD-DAG: %1 = "slicing-test-op"() : () -> i32
// FWDBWD-NEXT: %5 = "slicing-test-op"(%1, %2) : (i32, i32) -> i32
// FWDBWD-NEXT: %7 = "slicing-test-op"(%1, %5) : (i32, i32) -> i32
// FWDBWD-DAG: %4 = "slicing-test-op"() : () -> i32
// FWDBWD-DAG: %3 = "slicing-test-op"() : () -> i32
// FWDBWD-NEXT: %6 = "slicing-test-op"(%3, %4) : (i32, i32) -> i32
// FWDBWD-NEXT: %8 = "slicing-test-op"(%5, %6) : (i32, i32) -> i32
// FWDBWD-NEXT: %9 = "slicing-test-op"(%7, %8) : (i32, i32) -> i32
%3 = "slicing-test-op" () : () -> i32
// FWD-NEXT: matched: %4 {{.*}} forward static slice:
// FWD-NEXT: %6 {{.*}} (i32, i32) -> i32
// FWD-NEXT: %8 {{.*}} (i32, i32) -> i32
// FWD-NEXT: %9 {{.*}} (i32, i32) -> i32
//
// BWD: matched: %4 {{.*}} backward static slice:
//
// FWDBWD-NEXT: matched: %4 {{.*}} static slice:
// FWDBWD-DAG: %2 = "slicing-test-op"() : () -> i32
// FWDBWD-DAG: %1 = "slicing-test-op"() : () -> i32
// FWDBWD-NEXT: %5 = "slicing-test-op"(%1, %2) : (i32, i32) -> i32
// FWDBWD-NEXT: %7 = "slicing-test-op"(%1, %5) : (i32, i32) -> i32
// FWDBWD-DAG: %4 = "slicing-test-op"() : () -> i32
// FWDBWD-DAG: %3 = "slicing-test-op"() : () -> i32
// FWDBWD-NEXT: %6 = "slicing-test-op"(%3, %4) : (i32, i32) -> i32
// FWDBWD-NEXT: %8 = "slicing-test-op"(%5, %6) : (i32, i32) -> i32
// FWDBWD-NEXT: %9 = "slicing-test-op"(%7, %8) : (i32, i32) -> i32
%4 = "slicing-test-op" () : () -> i32
// FWD-NEXT: matched: %5 {{.*}} forward static slice:
// FWD-DAG: %7 {{.*}} (i32, i32) -> i32
// FWD-DAG: %8 {{.*}} (i32, i32) -> i32
// FWD-NEXT: %9 {{.*}} (i32, i32) -> i32
//
// BWD: matched: %5 {{.*}} backward static slice:
// BWD-DAG: %1 = "slicing-test-op"() : () -> i32
// BWD-DAG: %2 = "slicing-test-op"() : () -> i32
//
// FWDBWD-NEXT: matched: %5 {{.*}} static slice:
// FWDBWD-DAG: %4 = "slicing-test-op"() : () -> i32
// FWDBWD-DAG: %3 = "slicing-test-op"() : () -> i32
// FWDBWD-NEXT: %6 = "slicing-test-op"(%3, %4) : (i32, i32) -> i32
// FWDBWD-DAG: %2 = "slicing-test-op"() : () -> i32
// FWDBWD-DAG: %1 = "slicing-test-op"() : () -> i32
// FWDBWD-NEXT: %5 = "slicing-test-op"(%1, %2) : (i32, i32) -> i32
// FWDBWD-DAG: %8 = "slicing-test-op"(%5, %6) : (i32, i32) -> i32
// FWDBWD-DAG: %7 = "slicing-test-op"(%1, %5) : (i32, i32) -> i32
// FWDBWD-NEXT: %9 = "slicing-test-op"(%7, %8) : (i32, i32) -> i32
%5 = "slicing-test-op" (%1, %2) : (i32, i32) -> i32
// FWD-NEXT: matched: %6 {{.*}} forward static slice:
// FWD-NEXT: %8 {{.*}} (i32, i32) -> i32
// FWD-NEXT: %9 {{.*}} (i32, i32) -> i32
//
// BWD: matched: %6 {{.*}} backward static slice:
// BWD-DAG: %3 = "slicing-test-op"() : () -> i32
// BWD-DAG: %4 = "slicing-test-op"() : () -> i32
//
// FWDBWD-NEXT: matched: %6 {{.*}} static slice:
// FWDBWD-DAG: %2 = "slicing-test-op"() : () -> i32
// FWDBWD-DAG: %1 = "slicing-test-op"() : () -> i32
// FWDBWD-NEXT: %5 = "slicing-test-op"(%1, %2) : (i32, i32) -> i32
// FWDBWD-NEXT: %7 = "slicing-test-op"(%1, %5) : (i32, i32) -> i32
// FWDBWD-DAG: %4 = "slicing-test-op"() : () -> i32
// FWDBWD-DAG: %3 = "slicing-test-op"() : () -> i32
// FWDBWD-NEXT: %6 = "slicing-test-op"(%3, %4) : (i32, i32) -> i32
// FWDBWD-NEXT: %8 = "slicing-test-op"(%5, %6) : (i32, i32) -> i32
// FWDBWD-NEXT: %9 = "slicing-test-op"(%7, %8) : (i32, i32) -> i32
%6 = "slicing-test-op" (%3, %4) : (i32, i32) -> i32
// FWD-NEXT: matched: %7 {{.*}} forward static slice:
// FWD-NEXT: %9 {{.*}} (i32, i32) -> i32
//
// BWD: matched: %7 {{.*}} backward static slice:
// BWD-DAG: %1 = "slicing-test-op"() : () -> i32
// BWD-DAG: %2 = "slicing-test-op"() : () -> i32
// BWD-NEXT: %5 = "slicing-test-op"(%1, %2) : (i32, i32) -> i32
//
// FWDBWD-NEXT: matched: %7 {{.*}} static slice:
// FWDBWD-DAG: %4 = "slicing-test-op"() : () -> i32
// FWDBWD-DAG: %3 = "slicing-test-op"() : () -> i32
// FWDBWD-NEXT: %6 = "slicing-test-op"(%3, %4) : (i32, i32) -> i32
// FWDBWD-DAG: %2 = "slicing-test-op"() : () -> i32
// FWDBWD-DAG: %1 = "slicing-test-op"() : () -> i32
// FWDBWD: %5 = "slicing-test-op"(%1, %2) : (i32, i32) -> i32
// FWDBWD-DAG: %8 = "slicing-test-op"(%5, %6) : (i32, i32) -> i32
// FWDBWD-DAG: %7 = "slicing-test-op"(%1, %5) : (i32, i32) -> i32
// FWDBWD-NEXT: %9 = "slicing-test-op"(%7, %8) : (i32, i32) -> i32
%7 = "slicing-test-op" (%1, %5) : (i32, i32) -> i32
// FWD-NEXT: matched: %8 {{.*}} forward static slice:
// FWD-NEXT: %9 {{.*}} (i32, i32) -> i32
//
// BWD: matched: %8 {{.*}} backward static slice:
// BWD-DAG: %1 = "slicing-test-op"() : () -> i32
// BWD-DAG: %2 = "slicing-test-op"() : () -> i32
// BWD-NEXT: %5 = "slicing-test-op"(%1, %2) : (i32, i32) -> i32
// BWD-DAG: %3 = "slicing-test-op"() : () -> i32
// BWD-DAG: %4 = "slicing-test-op"() : () -> i32
// BWD-NEXT: %6 = "slicing-test-op"(%3, %4) : (i32, i32) -> i32
//
// FWDBWD-NEXT: matched: %8 {{.*}} static slice:
// FWDBWD-DAG: %4 = "slicing-test-op"() : () -> i32
// FWDBWD-DAG: %3 = "slicing-test-op"() : () -> i32
// FWDBWD-NEXT: %6 = "slicing-test-op"(%3, %4) : (i32, i32) -> i32
// FWDBWD-DAG: %2 = "slicing-test-op"() : () -> i32
// FWDBWD-DAG: %1 = "slicing-test-op"() : () -> i32
// FWDBWD-NEXT: %5 = "slicing-test-op"(%1, %2) : (i32, i32) -> i32
// FWDBWD-DAG: %8 = "slicing-test-op"(%5, %6) : (i32, i32) -> i32
// FWDBWD-DAG: %7 = "slicing-test-op"(%1, %5) : (i32, i32) -> i32
// FWDBWD-NEXT: %9 = "slicing-test-op"(%7, %8) : (i32, i32) -> i32
%8 = "slicing-test-op" (%5, %6) : (i32, i32) -> i32
// FWD-NEXT: matched: %9 {{.*}} forward static slice:
//
// BWD: matched: %9 {{.*}} backward static slice:
// BWD-DAG: %1 = "slicing-test-op"() : () -> i32
// BWD-DAG: %2 = "slicing-test-op"() : () -> i32
// BWD-NEXT: %5 = "slicing-test-op"(%1, %2) : (i32, i32) -> i32
// BWD-NEXT: %7 = "slicing-test-op"(%1, %5) : (i32, i32) -> i32
// BWD-DAG: %3 = "slicing-test-op"() : () -> i32
// BWD-DAG: %4 = "slicing-test-op"() : () -> i32
// BWD-NEXT: %6 = "slicing-test-op"(%3, %4) : (i32, i32) -> i32
// BWD-NEXT: %8 = "slicing-test-op"(%5, %6) : (i32, i32) -> i32
//
// FWDBWD-NEXT: matched: %9 {{.*}} static slice:
// FWDBWD-DAG: %4 = "slicing-test-op"() : () -> i32
// FWDBWD-DAG: %3 = "slicing-test-op"() : () -> i32
// FWDBWD-NEXT: %6 = "slicing-test-op"(%3, %4) : (i32, i32) -> i32
// FWDBWD-DAG: %2 = "slicing-test-op"() : () -> i32
// FWDBWD-DAG: %1 = "slicing-test-op"() : () -> i32
// FWDBWD-NEXT: %5 = "slicing-test-op"(%1, %2) : (i32, i32) -> i32
// FWDBWD-DAG: %8 = "slicing-test-op"(%5, %6) : (i32, i32) -> i32
// FWDBWD-DAG: %7 = "slicing-test-op"(%1, %5) : (i32, i32) -> i32
// FWDBWD-NEXT: %9 = "slicing-test-op"(%7, %8) : (i32, i32) -> i32
%9 = "slicing-test-op" (%7, %8) : (i32, i32) -> i32
return
}