brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.9 KiB · c53667a Raw
318 lines · plain
1// RUN: mlir-opt -allow-unregistered-dialect %s -split-input-file -affine-super-vectorizer-test="forward-slicing=true" 2>&1 | FileCheck %s --check-prefix=FWD2// RUN: mlir-opt -allow-unregistered-dialect %s -split-input-file -affine-super-vectorizer-test="backward-slicing=true" 2>&1 | FileCheck %s --check-prefix=BWD3// RUN: mlir-opt -allow-unregistered-dialect %s -split-input-file -affine-super-vectorizer-test="slicing=true" 2>&1 | FileCheck %s --check-prefix=FWDBWD4 5///   1       2      3      46///   |_______|      |______|7///   |   |             |8///   |   5             69///   |___|_____________|10///     |               |11///     7               812///     |_______________|13///             |14///             915// FWD-LABEL: slicing_test16// BWD-LABEL: slicing_test17// FWDBWD-LABEL: slicing_test18func.func @slicing_test() {19  // Fake 0 to align on 1 and match ASCII art.20  %0 = memref.alloc() : memref<1xi32>21 22  // FWD: matched: %[[v1:.*]] {{.*}} forward static slice:23  // FWD-NEXT: %[[v5:.*]] {{.*}} -> i524  // FWD-DAG: %[[v8:.*]] {{.*}} -> i825  // FWD-DAG: %[[v7:.*]] {{.*}} -> i726  // FWD-NEXT: %[[v9:.*]] {{.*}} -> i927  //28  // BWD: matched: %[[v1:.*]] {{.*}} backward static slice:29  //30  // FWDBWD: matched: %[[v1:.*]] {{.*}} static slice:31  // FWDBWD: %[[v1:.*]] = "slicing-test-op"() : () -> i132  // FWDBWD: %[[v2:.*]] = "slicing-test-op"() : () -> i233  // FWDBWD: %[[v3:.*]] = "slicing-test-op"() : () -> i334  // FWDBWD: %[[v4:.*]] = "slicing-test-op"() : () -> i435  // FWDBWD: %[[v5:.*]] = "slicing-test-op"(%[[v1]], %[[v2]]) : (i1, i2) -> i536  // FWDBWD: %[[v6:.*]] = "slicing-test-op"(%[[v3]], %[[v4]]) : (i3, i4) -> i637  // FWDBWD: %[[v7:.*]] = "slicing-test-op"(%[[v1]], %[[v5]]) : (i1, i5) -> i738  // FWDBWD: %[[v8:.*]] = "slicing-test-op"(%[[v5]], %[[v6]]) : (i5, i6) -> i839  // FWDBWD: %[[v9:.*]] = "slicing-test-op"(%[[v7]], %[[v8]]) : (i7, i8) -> i940 41  %1 = "slicing-test-op" () : () -> i142 43  // FWD-NEXT: matched: %[[v2:.*]] {{.*}} forward static slice:44  // FWD-NEXT: %[[v5:.*]] {{.*}} -> i545  // FWD-DAG: %[[v8:.*]] {{.*}} -> i846  // FWD-DAG: %[[v7:.*]] {{.*}} -> i747  // FWD-NEXT: %[[v9:.*]] {{.*}} -> i948  //49  // BWD: matched: %[[v2:.*]] {{.*}} backward static slice:50  //51  // FWDBWD-NEXT: matched: %[[v2:.*]] {{.*}} static slice:52  // FWDBWD: %[[v1:.*]] = "slicing-test-op"() : () -> i153  // FWDBWD: %[[v2:.*]] = "slicing-test-op"() : () -> i254  // FWDBWD: %[[v3:.*]] = "slicing-test-op"() : () -> i355  // FWDBWD: %[[v4:.*]] = "slicing-test-op"() : () -> i456  // FWDBWD: %[[v5:.*]] = "slicing-test-op"(%[[v1]], %[[v2]]) : (i1, i2) -> i557  // FWDBWD: %[[v6:.*]] = "slicing-test-op"(%[[v3]], %[[v4]]) : (i3, i4) -> i658  // FWDBWD: %[[v7:.*]] = "slicing-test-op"(%[[v1]], %[[v5]]) : (i1, i5) -> i759  // FWDBWD: %[[v8:.*]] = "slicing-test-op"(%[[v5]], %[[v6]]) : (i5, i6) -> i860  // FWDBWD: %[[v9:.*]] = "slicing-test-op"(%[[v7]], %[[v8]]) : (i7, i8) -> i961 62  %2 = "slicing-test-op" () : () -> i263 64  // FWD-NEXT: matched: %[[v3:.*]] {{.*}} forward static slice:65  // FWD-NEXT: %[[v6:.*]] {{.*}} -> i666  // FWD-NEXT: %[[v8:.*]] {{.*}} -> i867  // FWD-NEXT: %[[v9:.*]] {{.*}} -> i968  //69  // BWD: matched: %[[v3:.*]] {{.*}} backward static slice:70  //71  // FWDBWD-NEXT: matched: %[[v3:.*]] {{.*}} static slice:72  // FWDBWD: %[[v1:.*]] = "slicing-test-op"() : () -> i173  // FWDBWD: %[[v2:.*]] = "slicing-test-op"() : () -> i274  // FWDBWD: %[[v3:.*]] = "slicing-test-op"() : () -> i375  // FWDBWD: %[[v4:.*]] = "slicing-test-op"() : () -> i476  // FWDBWD: %[[v5:.*]] = "slicing-test-op"(%[[v1]], %[[v2]]) : (i1, i2) -> i577  // FWDBWD: %[[v6:.*]] = "slicing-test-op"(%[[v3]], %[[v4]]) : (i3, i4) -> i678  // FWDBWD: %[[v7:.*]] = "slicing-test-op"(%[[v1]], %[[v5]]) : (i1, i5) -> i779  // FWDBWD: %[[v8:.*]] = "slicing-test-op"(%[[v5]], %[[v6]]) : (i5, i6) -> i880  // FWDBWD: %[[v9:.*]] = "slicing-test-op"(%[[v7]], %[[v8]]) : (i7, i8) -> i981 82  %3 = "slicing-test-op" () : () -> i383 84  // FWD-NEXT: matched: %[[v4:.*]] {{.*}} forward static slice:85  // FWD-NEXT: %[[v6:.*]] {{.*}} -> i686  // FWD-NEXT: %[[v8:.*]] {{.*}} -> i887  // FWD-NEXT: %[[v9:.*]] {{.*}} -> i988  //89  // BWD: matched: %[[v4:.*]] {{.*}} backward static slice:90  //91  // FWDBWD-NEXT: matched: %[[v4:.*]] {{.*}} static slice:92  // FWDBWD: %[[v1:.*]] = "slicing-test-op"() : () -> i193  // FWDBWD: %[[v2:.*]] = "slicing-test-op"() : () -> i294  // FWDBWD: %[[v3:.*]] = "slicing-test-op"() : () -> i395  // FWDBWD: %[[v4:.*]] = "slicing-test-op"() : () -> i496  // FWDBWD: %[[v5:.*]] = "slicing-test-op"(%[[v1]], %[[v2]]) : (i1, i2) -> i597  // FWDBWD: %[[v6:.*]] = "slicing-test-op"(%[[v3]], %[[v4]]) : (i3, i4) -> i698  // FWDBWD: %[[v7:.*]] = "slicing-test-op"(%[[v1]], %[[v5]]) : (i1, i5) -> i799  // FWDBWD: %[[v8:.*]] = "slicing-test-op"(%[[v5]], %[[v6]]) : (i5, i6) -> i8100  // FWDBWD: %[[v9:.*]] = "slicing-test-op"(%[[v7]], %[[v8]]) : (i7, i8) -> i9101 102  %4 = "slicing-test-op" () : () -> i4103 104  // FWD-NEXT: matched: %[[v5:.*]] {{.*}} forward static slice:105  // FWD-DAG: %[[v7:.*]] {{.*}} -> i7106  // FWD-DAG: %[[v8:.*]] {{.*}} -> i8107  // FWD-NEXT: %[[v9:.*]] {{.*}} -> i9108  //109  // BWD: matched: %[[v5:.*]] {{.*}} backward static slice:110  // BWD-DAG: %[[v1:.*]] = "slicing-test-op"() : () -> i1111  // BWD-DAG: %[[v2:.*]] = "slicing-test-op"() : () -> i2112  //113  // FWDBWD-NEXT: matched: %[[v5:.*]] {{.*}} static slice:114  // FWDBWD: %[[v1:.*]] = "slicing-test-op"() : () -> i1115  // FWDBWD: %[[v2:.*]] = "slicing-test-op"() : () -> i2116  // FWDBWD: %[[v3:.*]] = "slicing-test-op"() : () -> i3117  // FWDBWD: %[[v4:.*]] = "slicing-test-op"() : () -> i4118  // FWDBWD: %[[v5:.*]] = "slicing-test-op"(%[[v1]], %[[v2]]) : (i1, i2) -> i5119  // FWDBWD: %[[v6:.*]] = "slicing-test-op"(%[[v3]], %[[v4]]) : (i3, i4) -> i6120  // FWDBWD: %[[v7:.*]] = "slicing-test-op"(%[[v1]], %[[v5]]) : (i1, i5) -> i7121  // FWDBWD: %[[v8:.*]] = "slicing-test-op"(%[[v5]], %[[v6]]) : (i5, i6) -> i8122  // FWDBWD: %[[v9:.*]] = "slicing-test-op"(%[[v7]], %[[v8]]) : (i7, i8) -> i9123 124  %5 = "slicing-test-op" (%1, %2) : (i1, i2) -> i5125 126  // FWD-NEXT: matched: %[[v6:.*]] {{.*}} forward static slice:127  // FWD-NEXT: %[[v8:.*]] {{.*}} -> i8128  // FWD-NEXT: %[[v9:.*]] {{.*}} -> i9129  //130  // BWD: matched: %[[v6:.*]] {{.*}} backward static slice:131  // BWD-DAG: %[[v3:.*]] = "slicing-test-op"() : () -> i3132  // BWD-DAG: %[[v4:.*]] = "slicing-test-op"() : () -> i4133  //134  // FWDBWD-NEXT: matched: %[[v6:.*]] {{.*}} static slice:135  // FWDBWD: %[[v1:.*]] = "slicing-test-op"() : () -> i1136  // FWDBWD: %[[v2:.*]] = "slicing-test-op"() : () -> i2137  // FWDBWD: %[[v3:.*]] = "slicing-test-op"() : () -> i3138  // FWDBWD: %[[v4:.*]] = "slicing-test-op"() : () -> i4139  // FWDBWD: %[[v5:.*]] = "slicing-test-op"(%[[v1]], %[[v2]]) : (i1, i2) -> i5140  // FWDBWD: %[[v6:.*]] = "slicing-test-op"(%[[v3]], %[[v4]]) : (i3, i4) -> i6141  // FWDBWD: %[[v7:.*]] = "slicing-test-op"(%[[v1]], %[[v5]]) : (i1, i5) -> i7142  // FWDBWD: %[[v8:.*]] = "slicing-test-op"(%[[v5]], %[[v6]]) : (i5, i6) -> i8143  // FWDBWD: %[[v9:.*]] = "slicing-test-op"(%[[v7]], %[[v8]]) : (i7, i8) -> i9144 145  %6 = "slicing-test-op" (%3, %4) : (i3, i4) -> i6146 147  // FWD-NEXT: matched: %[[v7:.*]] {{.*}} forward static slice:148  // FWD-NEXT: %[[v9:.*]] {{.*}} -> i9149  //150  // BWD: matched: %[[v7:.*]] {{.*}} backward static slice:151  // BWD-DAG: %[[v1:.*]] = "slicing-test-op"() : () -> i1152  // BWD-DAG: %[[v2:.*]] = "slicing-test-op"() : () -> i2153  // BWD-NEXT: %[[v5:.*]] = "slicing-test-op"(%[[v1]], %[[v2]]) : (i1, i2) -> i5154  //155  // FWDBWD-NEXT: matched: %[[v7:.*]] {{.*}} static slice:156  // FWDBWD: %[[v1:.*]] = "slicing-test-op"() : () -> i1157  // FWDBWD: %[[v2:.*]] = "slicing-test-op"() : () -> i2158  // FWDBWD: %[[v3:.*]] = "slicing-test-op"() : () -> i3159  // FWDBWD: %[[v4:.*]] = "slicing-test-op"() : () -> i4160  // FWDBWD: %[[v5:.*]] = "slicing-test-op"(%[[v1]], %[[v2]]) : (i1, i2) -> i5161  // FWDBWD: %[[v6:.*]] = "slicing-test-op"(%[[v3]], %[[v4]]) : (i3, i4) -> i6162  // FWDBWD: %[[v7:.*]] = "slicing-test-op"(%[[v1]], %[[v5]]) : (i1, i5) -> i7163  // FWDBWD: %[[v8:.*]] = "slicing-test-op"(%[[v5]], %[[v6]]) : (i5, i6) -> i8164  // FWDBWD: %[[v9:.*]] = "slicing-test-op"(%[[v7]], %[[v8]]) : (i7, i8) -> i9165 166  %7 = "slicing-test-op" (%1, %5) : (i1, i5) -> i7167 168  // FWD-NEXT: matched: %[[v8:.*]] {{.*}} forward static slice:169  // FWD-NEXT: %[[v9:.*]] {{.*}} -> i9170  //171  // BWD: matched: %[[v8:.*]] {{.*}} backward static slice:172  // BWD-DAG: %[[v1:.*]] = "slicing-test-op"() : () -> i1173  // BWD-DAG: %[[v2:.*]] = "slicing-test-op"() : () -> i2174  // BWD-NEXT: %[[v5:.*]] = "slicing-test-op"(%[[v1]], %[[v2]]) : (i1, i2) -> i5175  // BWD-DAG: %[[v3:.*]] = "slicing-test-op"() : () -> i3176  // BWD-DAG: %[[v4:.*]] = "slicing-test-op"() : () -> i4177  // BWD-NEXT: %[[v6:.*]] = "slicing-test-op"(%[[v3]], %[[v4]]) : (i3, i4) -> i6178  //179  // FWDBWD-NEXT: matched: %[[v8:.*]] {{.*}} static slice:180  // FWDBWD: %[[v1:.*]] = "slicing-test-op"() : () -> i1181  // FWDBWD: %[[v2:.*]] = "slicing-test-op"() : () -> i2182  // FWDBWD: %[[v3:.*]] = "slicing-test-op"() : () -> i3183  // FWDBWD: %[[v4:.*]] = "slicing-test-op"() : () -> i4184  // FWDBWD: %[[v5:.*]] = "slicing-test-op"(%[[v1]], %[[v2]]) : (i1, i2) -> i5185  // FWDBWD: %[[v6:.*]] = "slicing-test-op"(%[[v3]], %[[v4]]) : (i3, i4) -> i6186  // FWDBWD: %[[v7:.*]] = "slicing-test-op"(%[[v1]], %[[v5]]) : (i1, i5) -> i7187  // FWDBWD: %[[v8:.*]] = "slicing-test-op"(%[[v5]], %[[v6]]) : (i5, i6) -> i8188  // FWDBWD: %[[v9:.*]] = "slicing-test-op"(%[[v7]], %[[v8]]) : (i7, i8) -> i9189 190  %8 = "slicing-test-op" (%5, %6) : (i5, i6) -> i8191 192  // FWD-NEXT: matched: %[[v9:.*]] {{.*}} forward static slice:193  //194  // BWD: matched: %[[v9:.*]] {{.*}} backward static slice:195  // BWD-DAG: %[[v1:.*]] = "slicing-test-op"() : () -> i1196  // BWD-DAG: %[[v2:.*]] = "slicing-test-op"() : () -> i2197  // BWD-NEXT: %[[v5:.*]] = "slicing-test-op"(%[[v1]], %[[v2]]) : (i1, i2) -> i5198  // BWD-NEXT: %[[v7:.*]] = "slicing-test-op"(%[[v1]], %[[v5]]) : (i1, i5) -> i7199  // BWD-DAG: %[[v3:.*]] = "slicing-test-op"() : () -> i3200  // BWD-DAG: %[[v4:.*]] = "slicing-test-op"() : () -> i4201  // BWD-NEXT: %[[v6:.*]] = "slicing-test-op"(%[[v3]], %[[v4]]) : (i3, i4) -> i6202  // BWD-NEXT: %[[v8:.*]] = "slicing-test-op"(%[[v5]], %[[v6]]) : (i5, i6) -> i8203  //204  // FWDBWD-NEXT: matched: %[[v9:.*]] {{.*}} static slice:205  // FWDBWD: %[[v1:.*]] = "slicing-test-op"() : () -> i1206  // FWDBWD: %[[v2:.*]] = "slicing-test-op"() : () -> i2207  // FWDBWD: %[[v3:.*]] = "slicing-test-op"() : () -> i3208  // FWDBWD: %[[v4:.*]] = "slicing-test-op"() : () -> i4209  // FWDBWD: %[[v5:.*]] = "slicing-test-op"(%[[v1]], %[[v2]]) : (i1, i2) -> i5210  // FWDBWD: %[[v6:.*]] = "slicing-test-op"(%[[v3]], %[[v4]]) : (i3, i4) -> i6211  // FWDBWD: %[[v7:.*]] = "slicing-test-op"(%[[v1]], %[[v5]]) : (i1, i5) -> i7212  // FWDBWD: %[[v8:.*]] = "slicing-test-op"(%[[v5]], %[[v6]]) : (i5, i6) -> i8213  // FWDBWD: %[[v9:.*]] = "slicing-test-op"(%[[v7]], %[[v8]]) : (i7, i8) -> i9214 215  %9 = "slicing-test-op" (%7, %8) : (i7, i8) -> i9216 217  return218}219 220// -----221 222// FWD-LABEL: slicing_test_2223// BWD-LABEL: slicing_test_2224// FWDBWD-LABEL: slicing_test_2225func.func @slicing_test_2() {226  %c0 = arith.constant 0 : index227  %c2 = arith.constant 2 : index228  %c16 = arith.constant 16 : index229  affine.for %i0 = %c0 to %c16 {230    affine.for %i1 = affine_map<(i)[] -> (i)>(%i0) to 10 {231      // BWD: matched: %[[b:.*]] {{.*}} backward static slice:232      // BWD: affine.for {{.*}}233 234      // affine.for appears in the body of scf.for235      // BWD: affine.for {{.*}}236 237      // affine.for appears as a proper op in the backward slice238      // BWD: affine.for {{.*}}239      %b = "slicing-test-op"(%i1): (index) -> index240 241      // BWD: matched: %[[c:.*]] {{.*}} backward static slice:242      // BWD: affine.for {{.*}}243 244      // affine.for appears in the body of scf.for245      // BWD-NEXT: affine.for {{.*}}246 247      // affine.for only appears in the body of scf.for248      // BWD-NOT: affine.for {{.*}}249      %c = "slicing-test-op"(%i0): (index) -> index250    }251  }252  return253}254 255// -----256 257// FWD-LABEL: slicing_test_3258// BWD-LABEL: slicing_test_3259// FWDBWD-LABEL: slicing_test_3260func.func @slicing_test_3() {261  %f = arith.constant 1.0 : f32262  %c = "slicing-test-op"(%f): (f32) -> index263  // FWD: matched: {{.*}} (f32) -> index forward static slice:264  // FWD: scf.for {{.*}}265  // FWD: matched: {{.*}} (index, index) -> index forward static slice:266  scf.for %i2 = %c to %c step %c {267    %d = "slicing-test-op"(%c, %i2): (index, index) -> index268  }269  return270}271 272// -----273 274// FWD-LABEL: slicing_test_function_argument275// BWD-LABEL: slicing_test_function_argument276// FWDBWD-LABEL: slicing_test_function_argument277func.func @slicing_test_function_argument(%arg0: index) -> index {278  // BWD: matched: {{.*}} (index, index) -> index backward static slice:279  %0 = "slicing-test-op"(%arg0, %arg0): (index, index) -> index280  return %0 : index281}282 283// -----284 285// FWD-LABEL: slicing_test_multiple_return286// BWD-LABEL: slicing_test_multiple_return287// FWDBWD-LABEL: slicing_test_multiple_return288func.func @slicing_test_multiple_return(%arg0: index) -> (index, index) {289  // BWD: matched: {{.*}} (index, index) -> (index, index) backward static slice:290  // FWD: matched: %{{.*}}:2 = "slicing-test-op"(%arg0, %arg0) : (index, index) -> (index, index) forward static slice:291  // FWD: return %{{.*}}#0, %{{.*}}#1 : index, index292  %0:2 = "slicing-test-op"(%arg0, %arg0): (index, index) -> (index, index)293  return %0#0, %0#1 : index, index294}295 296// -----297 298// FWD-LABEL: graph_region_with_cycle299// BWD-LABEL: graph_region_with_cycle300// FWDBWD-LABEL: graph_region_with_cycle301func.func @graph_region_with_cycle() {302  test.isolated_graph_region {303    // FWD: matched: [[V0:%.+]] = "slicing-test-op"([[V1:%.+]]) : (i1) -> i1 forward static slice:304    // FWD: [[V1]] = "slicing-test-op"([[V0]]) : (i1) -> i1 305    // FWD: matched: [[V1]] = "slicing-test-op"([[V0]]) : (i1) -> i1 forward static slice:306    // FWD: [[V0]] = "slicing-test-op"([[V1]]) : (i1) -> i1 307    308    // BWD: matched: [[V0:%.+]] = "slicing-test-op"([[V1:%.+]]) : (i1) -> i1 backward static slice:309    // BWD: [[V1]] = "slicing-test-op"([[V0]]) : (i1) -> i1 310    // BWD: matched: [[V1]] = "slicing-test-op"([[V0]]) : (i1) -> i1 backward static slice:311    // BWD: [[V0]] = "slicing-test-op"([[V1]]) : (i1) -> i1 312    %0 = "slicing-test-op"(%1) : (i1) -> i1313    %1 = "slicing-test-op"(%0) : (i1) -> i1314  }315 316  return317}318