brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.8 KiB · 0e9385e Raw
308 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// CHECK-LABEL: @omp_canonloop_raw(6// CHECK-SAME: %[[tc:.+]]: i32)7func.func @omp_canonloop_raw(%tc : i32) -> () {8  // CHECK: omp.canonical_loop %iv : i32 in range(%[[tc]]) {9  "omp.canonical_loop" (%tc) ({10    ^bb0(%iv: i32):11      // CHECK-NEXT: = llvm.add %iv, %iv : i3212      %newval = llvm.add %iv, %iv : i3213      // CHECK-NEXT: omp.terminator14      omp.terminator15  // CHECK-NEXT: }16  }) : (i32) -> ()17  // CHECK-NEXT: return18  return19}20 21 22// CHECK-LABEL: @omp_canonloop_sequential_raw(23// CHECK-SAME: %[[tc:.+]]: i32)24func.func @omp_canonloop_sequential_raw(%tc : i32) -> () {25  // CHECK-NEXT: %canonloop_s0 = omp.new_cli26  %canonloop_s0 = "omp.new_cli" () : () -> (!omp.cli)27  // CHECK-NEXT:  omp.canonical_loop(%canonloop_s0) %iv_s0 : i32 in range(%[[tc]]) {28  "omp.canonical_loop" (%tc, %canonloop_s0) ({29    ^bb_first(%iv_first: i32):30      // CHECK-NEXT: = llvm.add %iv_s0, %iv_s0 : i3231      %newval = llvm.add %iv_first, %iv_first : i3232    // CHECK-NEXT: omp.terminator33    omp.terminator34  // CHECK-NEXT: }35  }) : (i32, !omp.cli) -> ()36 37  // CHECK-NEXT: %canonloop_s1 = omp.new_cli38  %canonloop_s1 = "omp.new_cli" () : () -> (!omp.cli)39  // CHECK-NEXT: omp.canonical_loop(%canonloop_s1) %iv_s1 : i32 in range(%[[tc]]) {40  "omp.canonical_loop" (%tc, %canonloop_s1) ({41    ^bb_second(%iv_second: i32):42    // CHECK: omp.terminator43    omp.terminator44  // CHECK-NEXT: }45  }) : (i32, !omp.cli) -> ()46 47  // CHECK-NEXT: return48  return49}50 51 52// CHECK-LABEL: @omp_nested_canonloop_raw(53// CHECK-SAME: %[[tc_outer:.+]]: i32, %[[tc_inner:.+]]: i32)54func.func @omp_nested_canonloop_raw(%tc_outer : i32, %tc_inner : i32) -> () {55  // CHECK-NEXT: %canonloop = omp.new_cli56  %outer = "omp.new_cli" () : () -> (!omp.cli)57  // CHECK-NEXT: %canonloop_d1 = omp.new_cli58  %inner = "omp.new_cli" () : () -> (!omp.cli)59  // CHECK-NEXT: omp.canonical_loop(%canonloop) %iv : i32 in range(%[[tc_outer]]) {60  "omp.canonical_loop" (%tc_outer, %outer) ({61    ^bb_outer(%iv_outer: i32):62      // CHECK-NEXT: omp.canonical_loop(%canonloop_d1) %iv_d1 : i32 in range(%[[tc_inner]]) {63      "omp.canonical_loop" (%tc_inner, %inner) ({64        ^bb_inner(%iv_inner: i32):65          // CHECK-NEXT: = llvm.add %iv, %iv_d1 : i3266          %newval = llvm.add %iv_outer, %iv_inner: i3267          // CHECK-NEXT: omp.terminator68          omp.terminator69      }) : (i32, !omp.cli) -> ()70      // CHECK: omp.terminator71      omp.terminator72  }) : (i32, !omp.cli) -> ()73  return74}75 76 77// CHECK-LABEL: @omp_canonloop_pretty(78// CHECK-SAME: %[[tc:.+]]: i32)79func.func @omp_canonloop_pretty(%tc : i32) -> () {80  // CHECK-NEXT: omp.canonical_loop %iv : i32 in range(%[[tc]]) {81  omp.canonical_loop %iv : i32 in range(%tc) {82    // CHECK-NEXT: llvm.add %iv, %iv : i3283    %newval = llvm.add %iv, %iv: i3284    // CHECK-NEXT: omp.terminator85    omp.terminator86  }87  return88}89 90 91// CHECK-LABEL: @omp_canonloop_constant_pretty()92func.func @omp_canonloop_constant_pretty() -> () {93  // CHECK-NEXT:  %[[tc:.+]] = llvm.mlir.constant(4 : i32) : i3294  %tc = llvm.mlir.constant(4 : i32) : i3295  // CHECK-NEXT: omp.canonical_loop %iv : i32 in range(%[[tc]]) {96  omp.canonical_loop %iv : i32 in range(%tc) {97    // CHECK-NEXT: llvm.add %iv, %iv : i3298    %newval = llvm.add %iv, %iv: i3299    // CHECK-NEXT: omp.terminator100    omp.terminator101  }102  return103}104 105 106// CHECK-LABEL: @omp_canonloop_sequential_pretty(107// CHECK-SAME: %[[tc:.+]]: i32)108func.func @omp_canonloop_sequential_pretty(%tc : i32) -> () {109  // CHECK-NEXT: %canonloop_s0 = omp.new_cli110  %canonloop_s0 = omp.new_cli111  // CHECK-NEXT: omp.canonical_loop(%canonloop_s0) %iv_s0 : i32 in range(%[[tc]]) {112  omp.canonical_loop(%canonloop_s0) %iv_s0 : i32 in range(%tc) {113    // CHECK-NEXT: omp.terminator114    omp.terminator115  }116 117  // CHECK: %canonloop_s1 = omp.new_cli118  %canonloop_s1 = omp.new_cli119  // CHECK-NEXT: omp.canonical_loop(%canonloop_s1) %iv_s1 : i32 in range(%[[tc]]) {120  omp.canonical_loop(%canonloop_s1) %iv_s1 : i32 in range(%tc) {121    // CHECK-NEXT: omp.terminator122    omp.terminator123  }124 125  // CHECK: %canonloop_s2 = omp.new_cli126  %canonloop_s2 = omp.new_cli127  // CHECK-NEXT: omp.canonical_loop(%canonloop_s2) %iv_s2 : i32 in range(%[[tc]]) {128  omp.canonical_loop(%canonloop_s2) %iv_s2 : i32 in range(%tc) {129    // CHECK-NEXT: omp.terminator130    omp.terminator131  }132 133  return134}135 136 137// CHECK-LABEL: @omp_canonloop_2d_nested_pretty(138// CHECK-SAME: %[[tc:.+]]: i32)139func.func @omp_canonloop_2d_nested_pretty(%tc : i32) -> () {140  // CHECK-NEXT: %canonloop = omp.new_cli141  %canonloop = omp.new_cli142  // CHECK-NEXT: %canonloop_d1 = omp.new_cli143  %canonloop_d1 = omp.new_cli144  // CHECK-NEXT: omp.canonical_loop(%canonloop) %iv : i32 in range(%[[tc]]) {145  omp.canonical_loop(%canonloop) %iv : i32 in range(%tc) {146    // CHECK-NEXT: omp.canonical_loop(%canonloop_d1) %iv_d1 : i32 in range(%[[tc]]) {147    omp.canonical_loop(%canonloop_d1) %iv_d1 : i32 in range(%tc) {148      // CHECK: omp.terminator149      omp.terminator150    }151    // CHECK: omp.terminator152    omp.terminator153  }154  return155}156 157 158// CHECK-LABEL: @omp_canonloop_3d_nested_pretty(159// CHECK-SAME: %[[tc:.+]]: i32)160func.func @omp_canonloop_3d_nested_pretty(%tc : i32) -> () {161  // CHECK: %canonloop = omp.new_cli162  %canonloop = omp.new_cli163  // CHECK: %canonloop_d1 = omp.new_cli164  %canonloop_d1 = omp.new_cli165  // CHECK: %canonloop_d2 = omp.new_cli166  %canonloop_d2 = omp.new_cli167  // CHECK-NEXT: omp.canonical_loop(%canonloop) %iv : i32 in range(%[[tc]]) {168  omp.canonical_loop(%canonloop) %iv : i32 in range(%tc) {169    // CHECK-NEXT: omp.canonical_loop(%canonloop_d1) %iv_d1 : i32 in range(%[[tc]]) {170    omp.canonical_loop(%canonloop_d1) %iv_1d : i32 in range(%tc) {171      // CHECK-NEXT: omp.canonical_loop(%canonloop_d2) %iv_d2 : i32 in range(%[[tc]]) {172      omp.canonical_loop(%canonloop_d2) %iv_d2 : i32 in range(%tc) {173        // CHECK-NEXT: omp.terminator174        omp.terminator175      // CHECK-NEXT: }176      }177      // CHECK-NEXT: omp.terminator178      omp.terminator179    // CHECK-NEXT: }180    }181    // CHECK-NEXT: omp.terminator182    omp.terminator183  }184 185  return186}187 188 189// CHECK-LABEL: @omp_canonloop_sequential_nested_pretty(190// CHECK-SAME: %[[tc:.+]]: i32)191func.func @omp_canonloop_sequential_nested_pretty(%tc : i32) -> () {192  // CHECK-NEXT: %canonloop_s0 = omp.new_cli193  %canonloop_s0 = omp.new_cli194  // CHECK-NEXT: %canonloop_s0_d1 = omp.new_cli195  %canonloop_s0_d1 = omp.new_cli196  // CHECK-NEXT: omp.canonical_loop(%canonloop_s0) %iv_s0 : i32 in range(%[[tc]]) {197  omp.canonical_loop(%canonloop_s0) %iv_s0 : i32 in range(%tc) {198   // CHECK-NEXT: omp.canonical_loop(%canonloop_s0_d1) %iv_s0_d1 : i32 in range(%[[tc]]) {199    omp.canonical_loop(%canonloop_s0_d1) %iv_s0_d1 : i32 in range(%tc) {200      // CHECK-NEXT: omp.terminator201      omp.terminator202    // CHECK-NEXT: }203    }204    // CHECK-NEXT: omp.terminator205    omp.terminator206  // CHECK-NEXT: }207  }208 209  // CHECK-NEXT: %canonloop_s1 = omp.new_cli210  %canonloop_s1 = omp.new_cli211  // CHECK-NEXT: %canonloop_s1_d1 = omp.new_cli212  %canonloop_s1_d1 = omp.new_cli213  // CHECK-NEXT:  omp.canonical_loop(%canonloop_s1) %iv_s1 : i32 in range(%[[tc]]) {214  omp.canonical_loop(%canonloop_s1) %iv_s1 : i32 in range(%tc) {215    // CHECK-NEXT:  omp.canonical_loop(%canonloop_s1_d1) %iv_s1_d1 : i32 in range(%[[tc]]) {216    omp.canonical_loop(%canonloop_s1_d1) %iv_s1d1 : i32 in range(%tc) {217      // CHECK-NEXT: omp.terminator218      omp.terminator219    // CHECK-NEXT: }220    }221    // CHECK-NEXT: omp.terminator222    omp.terminator223  }224 225  return226}227 228 229// CHECK-LABEL: @omp_newcli_unused(230// CHECK-SAME: )231func.func @omp_newcli_unused() -> () {232  // CHECK-NEXT:  %cli = omp.new_cli233  %cli = omp.new_cli234  // CHECK-NEXT: return235  return236}237 238 239// CHECK-LABEL: @omp_canonloop_multiregion_isolatedfromabove(240func.func @omp_canonloop_multiregion_isolatedfromabove() -> () {241  omp.private {type = firstprivate} @x.privatizer : !llvm.ptr init {242    ^bb0(%arg0: !llvm.ptr, %arg1: !llvm.ptr):243      %c42_i32 = arith.constant 42: i32244      // CHECK: omp.canonical_loop %iv : i32 in range(%c42_i32) {245      omp.canonical_loop %iv1 : i32 in range(%c42_i32) {246        omp.terminator247      }248      // CHECK: omp.yield249      omp.yield(%arg0 : !llvm.ptr)250  } copy {251    ^bb0(%arg0: !llvm.ptr, %arg1: !llvm.ptr):252      %c42_i32 = arith.constant 42: i32253      // CHECK: omp.canonical_loop %iv : i32 in range(%c42_i32) {254      omp.canonical_loop %iv : i32 in range(%c42_i32) {255        // CHECK: omp.canonical_loop %iv_d1 : i32 in range(%c42_i32) {256        omp.canonical_loop %iv_d1 : i32 in range(%c42_i32) {257          omp.terminator258        }259        omp.terminator260      }261      // CHECK: omp.yield262      omp.yield(%arg0 : !llvm.ptr)263  } dealloc {264    ^bb0(%arg0: !llvm.ptr):265      %c42_i32 = arith.constant 42: i32266      // CHECK: omp.canonical_loop %iv_s0 : i32 in range(%c42_i32) {267      omp.canonical_loop %iv_s0 : i32 in range(%c42_i32) {268        omp.terminator269      }270      // CHECK: omp.canonical_loop %iv_s1 : i32 in range(%c42_i32) {271      omp.canonical_loop %iv_s1 : i32 in range(%c42_i32) {272        omp.terminator273      }274      // CHECK: omp.yield275      omp.yield276  }277 278  // CHECK: return279  return280}281 282 283// CHECK-LABEL: @omp_canonloop_multiregion(284func.func @omp_canonloop_multiregion(%c : i1) -> () {285  %c42_i32 = arith.constant 42: i32286  %canonloop1 = omp.new_cli287  %canonloop2 = omp.new_cli288  %canonloop3 = omp.new_cli289  scf.if %c {290    // CHECK: omp.canonical_loop(%canonloop_r0) %iv_r0 : i32 in range(%c42_i32) {291    omp.canonical_loop(%canonloop1) %iv1 : i32 in range(%c42_i32) {292      omp.terminator293    }294  } else {295    // CHECK: omp.canonical_loop(%canonloop_r1_s0) %iv_r1_s0 : i32 in range(%c42_i32) {296    omp.canonical_loop(%canonloop2)  %iv2 : i32 in range(%c42_i32) {297      omp.terminator298    }299    // CHECK: omp.canonical_loop(%canonloop_r1_s1) %iv_r1_s1 : i32 in range(%c42_i32) {300    omp.canonical_loop(%canonloop3)  %iv3 : i32 in range(%c42_i32) {301      omp.terminator302    }303  }304 305  // CHECK: return306  return307}308