brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.4 KiB · 73d5478 Raw
139 lines · plain
1// RUN: mlir-opt %s            | FileCheck %s --enable-var-scope2// RUN: mlir-opt %s | mlir-opt | FileCheck %s --enable-var-scope3 4 5// Raw syntax check (MLIR output is always pretty-printed)6// CHECK-LABEL: @omp_tile_raw(7// CHECK-SAME: %[[tc:.+]]: i32, %[[ts:.+]]: i32) {8func.func @omp_tile_raw(%tc : i32, %ts : i32) -> () {9  // CHECK-NEXT: %canonloop = omp.new_cli10  %canonloop = "omp.new_cli" () : () -> (!omp.cli)11  // CHECK-NEXT: %grid1 = omp.new_cli12  %grid = "omp.new_cli" () : () -> (!omp.cli)13  // CHECK-NEXT: %intratile1 = omp.new_cli14  %intratile = "omp.new_cli" () : () -> (!omp.cli)15  // CHECK-NEXT: omp.canonical_loop(%canonloop) %iv : i32 in range(%[[tc]]) {16  "omp.canonical_loop" (%tc, %canonloop) ({17    ^bb0(%iv: i32):18      // CHECK: omp.terminator19      omp.terminator20  }) : (i32, !omp.cli) -> ()21  // CHECK: omp.tile (%grid1, %intratile1) <- (%canonloop) sizes(%[[ts]] : i32)22  "omp.tile"(%grid,  %intratile, %canonloop, %ts) <{operandSegmentSizes = array<i32: 2, 1, 1>}> : (!omp.cli,  !omp.cli, !omp.cli, i32) -> ()23  //"omp.tile" (%canonloop) : (!omp.cli) -> ()24  return25}26 27 28// Pretty syntax check29// CHECK-LABEL: @omp_tile_pretty(30// CHECK-SAME: %[[tc:.+]]: i32, %[[ts:.+]]: i32) {31func.func @omp_tile_pretty(%tc : i32, %ts : i32) -> () {32  // CHECK-NEXT: %[[CANONLOOP:.+]] = omp.new_cli33  %canonloop = omp.new_cli34  // CHECK-NEXT: %[[CANONLOOP:.+]] = omp.new_cli35  %grid = omp.new_cli36  // CHECK-NEXT: %[[CANONLOOP:.+]] = omp.new_cli37  %intratile = omp.new_cli38  // CHECK-NEXT: omp.canonical_loop(%canonloop) %iv : i32 in range(%[[tc]]) {39  omp.canonical_loop(%canonloop) %iv : i32 in range(%tc) {40    // CHECK: omp.terminator41    omp.terminator42  }43  // CHECK: omp.tile (%grid1, %intratile1) <- (%canonloop) sizes(%[[ts]] : i32)44  omp.tile(%grid, %intratile) <- (%canonloop) sizes(%ts : i32)45  return46}47 48 49// Specifying the generatees for omp.tile is optional50// CHECK-LABEL: @omp_tile_optionalgen_pretty(51// CHECK-SAME: %[[tc:.+]]: i32, %[[ts:.+]]: i32) {52func.func @omp_tile_optionalgen_pretty(%tc : i32, %ts : i32) -> () {53  // CHECK-NEXT: %canonloop = omp.new_cli54  %canonloop = omp.new_cli55  // CHECK-NEXT: omp.canonical_loop(%canonloop) %iv : i32 in range(%[[tc]]) {56  omp.canonical_loop(%canonloop) %iv : i32 in range(%tc) {57    // CHECK: omp.terminator58    omp.terminator59  }60  // CHECK: omp.tile <- (%canonloop) sizes(%[[ts]] : i32)61  omp.tile <- (%canonloop) sizes(%ts : i32)62  return63}64 65 66// Two-dimensional tiling67// CHECK-LABEL: @omp_tile_2d_pretty(68// CHECK-SAME: %[[tc1:.+]]: i32, %[[tc2:.+]]: i32, %[[ts1:.+]]: i32, %[[ts2:.+]]: i32) {69func.func @omp_tile_2d_pretty(%tc1 : i32, %tc2 : i32, %ts1 : i32, %ts2 : i32) -> () {70  // CHECK-NEXT: %canonloop = omp.new_cli71  %cli_outer = omp.new_cli72  // CHECK-NEXT: %canonloop_d1 = omp.new_cli73  %cli_inner = omp.new_cli74  // CHECK-NEXT: %grid1 = omp.new_cli75  %grid1 = omp.new_cli76  // CHECK-NEXT: %grid2 = omp.new_cli77  %grid2 = omp.new_cli78  // CHECK-NEXT: %intratile1 = omp.new_cli79  %intratile1 = omp.new_cli80  // CHECK-NEXT: %intratile2 = omp.new_cli81  %intratile2 = omp.new_cli82  // CHECK-NEXT:  omp.canonical_loop(%canonloop) %iv : i32 in range(%[[tc1]]) {83  omp.canonical_loop(%cli_outer) %iv_outer : i32 in range(%tc1) {84    // CHECK-NEXT: omp.canonical_loop(%canonloop_d1) %iv_d1 : i32 in range(%[[tc2]]) {85    omp.canonical_loop(%cli_inner) %iv_inner : i32 in range(%tc2) {86      // CHECK: omp.terminator87      omp.terminator88    }89    // CHECK: omp.terminator90    omp.terminator91  }92  // CHECK:  omp.tile (%grid1, %grid2, %intratile1, %intratile2) <- (%canonloop, %canonloop_d1) sizes(%[[ts1]], %[[ts2]] : i32, i32)93  omp.tile (%grid1, %grid2, %intratile1, %intratile2) <- (%cli_outer, %cli_inner) sizes(%ts1, %ts2 : i32, i32)94  return95}96 97 98// Three-dimensional tiling99// CHECK-LABEL: @omp_tile_3d_pretty(100// CHECK-SAME: %[[tc:.+]]: i32, %[[ts:.+]]: i32) {101func.func @omp_tile_3d_pretty(%tc : i32, %ts : i32) -> () {102  // CHECK-NEXT: %canonloop = omp.new_cli103  %cli_outer = omp.new_cli104  // CHECK-NEXT: %canonloop_d1 = omp.new_cli105  %cli_middle = omp.new_cli106  // CHECK-NEXT: %canonloop_d2 = omp.new_cli107  %cli_inner = omp.new_cli108  // CHECK-NEXT: %grid1 = omp.new_cli109  %grid1 = omp.new_cli110  // CHECK-NEXT: %grid2 = omp.new_cli111  %grid2 = omp.new_cli112  // CHECK-NEXT: %grid3 = omp.new_cli113  %grid3 = omp.new_cli114  // CHECK-NEXT: %intratile1 = omp.new_cli115  %intratile1 = omp.new_cli116  // CHECK-NEXT: %intratile2 = omp.new_cli117  %intratile2 = omp.new_cli118  // CHECK-NEXT: %intratile3 = omp.new_cli119  %intratile3 = omp.new_cli120  // CHECK-NEXT:  omp.canonical_loop(%canonloop) %iv : i32 in range(%[[tc]]) {121  omp.canonical_loop(%cli_outer) %iv_outer : i32 in range(%tc) {122    // CHECK-NEXT: omp.canonical_loop(%canonloop_d1) %iv_d1 : i32 in range(%[[tc]]) {123    omp.canonical_loop(%cli_middle) %iv_middle : i32 in range(%tc) {124    // CHECK-NEXT: omp.canonical_loop(%canonloop_d2) %iv_d2 : i32 in range(%[[tc]]) {125      omp.canonical_loop(%cli_inner) %iv_inner : i32 in range(%tc) {126        // CHECK: omp.terminator127        omp.terminator128      }129      // CHECK: omp.terminator130      omp.terminator131    }132    // CHECK: omp.terminator133    omp.terminator134  }135  // CHECK:  omp.tile (%grid1, %grid2, %grid3, %intratile1, %intratile2, %intratile3) <- (%canonloop, %canonloop_d1, %canonloop_d2) sizes(%[[ts]], %[[ts]], %[[ts]] : i32, i32, i32)136  omp.tile (%grid1, %grid2, %grid3, %intratile1, %intratile2, %intratile3) <- (%cli_outer, %cli_middle, %cli_inner) sizes(%ts, %ts, %ts: i32, i32, i32)137  return138}139