brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.3 KiB · 91b0812 Raw
163 lines · plain
1// RUN: fir-opt --bufferize-hlfir %s | FileCheck %s2 3// Checks that we correctly identify when to use the lowering to4// omp.workshare.loop_wrapper5 6// CHECK-LABEL: @should_parallelize_07// CHECK: omp.workshare.loop_wrapper8func.func @should_parallelize_0(%arg: !fir.ref<!fir.array<42xi32>>, %idx : index) {9  omp.workshare {10    %c42 = arith.constant 42 : index11    %c1_i32 = arith.constant 1 : i3212    %shape = fir.shape %c42 : (index) -> !fir.shape<1>13    %array:2 = hlfir.declare %arg(%shape) {uniq_name = "array"} : (!fir.ref<!fir.array<42xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<42xi32>>, !fir.ref<!fir.array<42xi32>>)14    %elemental = hlfir.elemental %shape unordered : (!fir.shape<1>) -> !hlfir.expr<42xi32> {15    ^bb0(%i: index):16      hlfir.yield_element %c1_i32 : i3217    }18    hlfir.assign %elemental to %array#0 : !hlfir.expr<42xi32>, !fir.ref<!fir.array<42xi32>>19    hlfir.destroy %elemental : !hlfir.expr<42xi32>20    omp.terminator21  }22  return23}24 25// CHECK-LABEL: @should_parallelize_126// CHECK: omp.workshare.loop_wrapper27func.func @should_parallelize_1(%arg: !fir.ref<!fir.array<42xi32>>, %idx : index) {28  omp.parallel {29    omp.workshare {30      %c42 = arith.constant 42 : index31      %c1_i32 = arith.constant 1 : i3232      %shape = fir.shape %c42 : (index) -> !fir.shape<1>33      %array:2 = hlfir.declare %arg(%shape) {uniq_name = "array"} : (!fir.ref<!fir.array<42xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<42xi32>>, !fir.ref<!fir.array<42xi32>>)34      %elemental = hlfir.elemental %shape unordered : (!fir.shape<1>) -> !hlfir.expr<42xi32> {35      ^bb0(%i: index):36        hlfir.yield_element %c1_i32 : i3237      }38      hlfir.assign %elemental to %array#0 : !hlfir.expr<42xi32>, !fir.ref<!fir.array<42xi32>>39      hlfir.destroy %elemental : !hlfir.expr<42xi32>40      omp.terminator41    }42    omp.terminator43  }44  return45}46 47 48// CHECK-LABEL: @should_not_parallelize_049// CHECK-NOT: omp.workshare.loop_wrapper50func.func @should_not_parallelize_0(%arg: !fir.ref<!fir.array<42xi32>>, %idx : index) {51  omp.workshare {52    omp.single {53      %c42 = arith.constant 42 : index54      %c1_i32 = arith.constant 1 : i3255      %shape = fir.shape %c42 : (index) -> !fir.shape<1>56      %array:2 = hlfir.declare %arg(%shape) {uniq_name = "array"} : (!fir.ref<!fir.array<42xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<42xi32>>, !fir.ref<!fir.array<42xi32>>)57      %elemental = hlfir.elemental %shape unordered : (!fir.shape<1>) -> !hlfir.expr<42xi32> {58      ^bb0(%i: index):59        hlfir.yield_element %c1_i32 : i3260      }61      hlfir.assign %elemental to %array#0 : !hlfir.expr<42xi32>, !fir.ref<!fir.array<42xi32>>62      hlfir.destroy %elemental : !hlfir.expr<42xi32>63      omp.terminator64    }65    omp.terminator66  }67  return68}69 70// CHECK-LABEL: @should_not_parallelize_171// CHECK-NOT: omp.workshare.loop_wrapper72func.func @should_not_parallelize_1(%arg: !fir.ref<!fir.array<42xi32>>, %idx : index) {73  omp.workshare {74    omp.critical {75      %c42 = arith.constant 42 : index76      %c1_i32 = arith.constant 1 : i3277      %shape = fir.shape %c42 : (index) -> !fir.shape<1>78      %array:2 = hlfir.declare %arg(%shape) {uniq_name = "array"} : (!fir.ref<!fir.array<42xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<42xi32>>, !fir.ref<!fir.array<42xi32>>)79      %elemental = hlfir.elemental %shape unordered : (!fir.shape<1>) -> !hlfir.expr<42xi32> {80      ^bb0(%i: index):81        hlfir.yield_element %c1_i32 : i3282      }83      hlfir.assign %elemental to %array#0 : !hlfir.expr<42xi32>, !fir.ref<!fir.array<42xi32>>84      hlfir.destroy %elemental : !hlfir.expr<42xi32>85      omp.terminator86    }87    omp.terminator88  }89  return90}91 92// CHECK-LABEL: @should_not_parallelize_293// CHECK-NOT: omp.workshare.loop_wrapper94func.func @should_not_parallelize_2(%arg: !fir.ref<!fir.array<42xi32>>, %idx : index) {95  omp.workshare {96    omp.parallel {97      %c42 = arith.constant 42 : index98      %c1_i32 = arith.constant 1 : i3299      %shape = fir.shape %c42 : (index) -> !fir.shape<1>100      %array:2 = hlfir.declare %arg(%shape) {uniq_name = "array"} : (!fir.ref<!fir.array<42xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<42xi32>>, !fir.ref<!fir.array<42xi32>>)101      %elemental = hlfir.elemental %shape unordered : (!fir.shape<1>) -> !hlfir.expr<42xi32> {102      ^bb0(%i: index):103        hlfir.yield_element %c1_i32 : i32104      }105      hlfir.assign %elemental to %array#0 : !hlfir.expr<42xi32>, !fir.ref<!fir.array<42xi32>>106      hlfir.destroy %elemental : !hlfir.expr<42xi32>107      omp.terminator108    }109    omp.terminator110  }111  return112}113 114// CHECK-LABEL: @should_not_parallelize_3115// CHECK-NOT: omp.workshare.loop_wrapper116func.func @should_not_parallelize_3(%arg: !fir.ref<!fir.array<42xi32>>, %idx : index) {117  omp.workshare {118    omp.parallel {119      omp.workshare {120        omp.parallel {121          %c42 = arith.constant 42 : index122          %c1_i32 = arith.constant 1 : i32123          %shape = fir.shape %c42 : (index) -> !fir.shape<1>124          %array:2 = hlfir.declare %arg(%shape) {uniq_name = "array"} : (!fir.ref<!fir.array<42xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<42xi32>>, !fir.ref<!fir.array<42xi32>>)125          %elemental = hlfir.elemental %shape unordered : (!fir.shape<1>) -> !hlfir.expr<42xi32> {126          ^bb0(%i: index):127            hlfir.yield_element %c1_i32 : i32128          }129          hlfir.assign %elemental to %array#0 : !hlfir.expr<42xi32>, !fir.ref<!fir.array<42xi32>>130          hlfir.destroy %elemental : !hlfir.expr<42xi32>131          omp.terminator132        }133        omp.terminator134      }135      omp.terminator136    }137    omp.terminator138  }139  return140}141 142// CHECK-LABEL: @should_not_parallelize_4143// CHECK-NOT: omp.workshare.loop_wrapper144func.func @should_not_parallelize_4(%arg: !fir.ref<!fir.array<42xi32>>, %idx : index) {145  omp.workshare {146  ^bb1:147    %c42 = arith.constant 42 : index148    %c1_i32 = arith.constant 1 : i32149    %shape = fir.shape %c42 : (index) -> !fir.shape<1>150    %array:2 = hlfir.declare %arg(%shape) {uniq_name = "array"} : (!fir.ref<!fir.array<42xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<42xi32>>, !fir.ref<!fir.array<42xi32>>)151    %elemental = hlfir.elemental %shape unordered : (!fir.shape<1>) -> !hlfir.expr<42xi32> {152    ^bb0(%i: index):153      hlfir.yield_element %c1_i32 : i32154    }155    hlfir.assign %elemental to %array#0 : !hlfir.expr<42xi32>, !fir.ref<!fir.array<42xi32>>156    hlfir.destroy %elemental : !hlfir.expr<42xi32>157    cf.br ^bb2158  ^bb2:159    omp.terminator160  }161  return162}163