brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.2 KiB · 8972a08 Raw
158 lines · plain
1// RUN: mlir-opt --mlir-disable-threading -omp-offload-privatization-prepare --split-input-file %s | FileCheck %s2 3module attributes {dlti.dl_spec = #dlti.dl_spec<!llvm.ptr<270> = dense<32> : vector<4xi64>, !llvm.ptr<271> = dense<32> : vector<4xi64>, !llvm.ptr<272> = dense<64> : vector<4xi64>, i64 = dense<64> : vector<2xi64>, i128 = dense<128> : vector<2xi64>, f80 = dense<128> : vector<2xi64>, !llvm.ptr = dense<64> : vector<4xi64>, i1 = dense<8> : vector<2xi64>, i8 = dense<8> : vector<2xi64>, i16 = dense<16> : vector<2xi64>, i32 = dense<32> : vector<2xi64>, f16 = dense<16> : vector<2xi64>, f64 = dense<64> : vector<2xi64>, f128 = dense<128> : vector<2xi64>, "dlti.endianness" = "little", "dlti.mangling_mode" = "e", "dlti.legal_int_widths" = array<i32: 8, 16, 32, 64>, "dlti.stack_alignment" = 128 : i64>} {4  llvm.func @free(!llvm.ptr)5  llvm.func @malloc(i64) -> !llvm.ptr6 7  omp.private {type = firstprivate} @private_eye : i32 copy {8  ^bb0(%arg0: !llvm.ptr, %arg1: !llvm.ptr):9    %0 = llvm.load %arg0 : !llvm.ptr -> i3210    llvm.store %0, %arg1 : i32, !llvm.ptr11    omp.yield(%arg1 : !llvm.ptr)12  }13  omp.private {type = firstprivate} @boxchar_firstprivate : !llvm.struct<(ptr, i64)> init {14  ^bb0(%arg0: !llvm.struct<(ptr, i64)>, %arg1: !llvm.struct<(ptr, i64)>):15    %0 = llvm.extractvalue %arg0[0] : !llvm.struct<(ptr, i64)>16    %1 = llvm.extractvalue %arg0[1] : !llvm.struct<(ptr, i64)>17    %8 = llvm.call @malloc(%1) {bindc_name = "", uniq_name = ""} : (i64) -> !llvm.ptr18    %9 = llvm.mlir.undef : !llvm.struct<(ptr, i64)>19    %10 = llvm.insertvalue %8, %9[0] : !llvm.struct<(ptr, i64)>20    %11 = llvm.insertvalue %1, %10[1] : !llvm.struct<(ptr, i64)>21    omp.yield(%11 : !llvm.struct<(ptr, i64)>)22  } copy {23  ^bb0(%arg0: !llvm.struct<(ptr, i64)>, %arg1: !llvm.struct<(ptr, i64)>):24    %3 = llvm.extractvalue %arg0[0] : !llvm.struct<(ptr, i64)>25    %4 = llvm.extractvalue %arg0[1] : !llvm.struct<(ptr, i64)>26    %5 = llvm.extractvalue %arg1[0] : !llvm.struct<(ptr, i64)>27    %6 = llvm.extractvalue %arg1[1] : !llvm.struct<(ptr, i64)>28    %7 = llvm.icmp "slt" %6, %4 : i6429    %8 = llvm.select %7, %6, %4 : i1, i6430    "llvm.intr.memmove"(%5, %3, %8) <{isVolatile = false}> : (!llvm.ptr, !llvm.ptr, i64) -> ()31    omp.yield(%arg1 : !llvm.struct<(ptr, i64)>)32  } dealloc {33  ^bb0(%arg0: !llvm.struct<(ptr, i64)>):34    %0 = llvm.extractvalue %arg0[0] : !llvm.struct<(ptr, i64)>35    %1 = llvm.extractvalue %arg0[1] : !llvm.struct<(ptr, i64)>36    llvm.call @free(%0) : (!llvm.ptr) -> ()37    omp.yield38  }39 40  llvm.func @target_boxchar_(%arg0: !llvm.ptr {fir.bindc_name = "l"}) attributes {fir.internal_name = "_QPtarget_boxchar", frame_pointer = #llvm.framePointerKind<all>, target_cpu = "x86-64"} {41    %0 = llvm.mlir.constant(1 : i64) : i6442    %1 = llvm.alloca %0 x i32 {bindc_name = "i"} : (i64) -> !llvm.ptr43    %2 = llvm.mlir.constant(1 : i64) : i6444    %3 = llvm.alloca %2 x !llvm.struct<(ptr, i64)> : (i64) -> !llvm.ptr45    %4 = llvm.mlir.constant(1 : index) : i6446    %5 = llvm.mlir.constant(0 : index) : i6447    %6 = llvm.mlir.constant(0 : i32) : i3248    %7 = llvm.mlir.constant(1 : i64) : i6449    %8 = llvm.mlir.constant(1 : i64) : i6450    %9 = llvm.load %arg0 : !llvm.ptr -> i3251    %10 = llvm.icmp "sgt" %9, %6 : i3252    %11 = llvm.select %10, %9, %6 : i1, i3253    %12 = llvm.mlir.constant(1 : i64) : i6454    %13 = llvm.sext %11 : i32 to i6455    %14 = llvm.alloca %13 x i8 {bindc_name = "char_var"} : (i64) -> !llvm.ptr56    %15 = llvm.mlir.undef : !llvm.struct<(ptr, i64)>57    %16 = llvm.sext %11 : i32 to i6458    %17 = llvm.insertvalue %14, %15[0] : !llvm.struct<(ptr, i64)>59    %18 = llvm.insertvalue %16, %17[1] : !llvm.struct<(ptr, i64)>60    llvm.store %18, %3 : !llvm.struct<(ptr, i64)>, !llvm.ptr61    %19 = llvm.load %3 : !llvm.ptr -> !llvm.struct<(ptr, i64)>62    %20 = llvm.extractvalue %19[0] : !llvm.struct<(ptr, i64)>63    %21 = llvm.extractvalue %19[1] : !llvm.struct<(ptr, i64)>64    %22 = llvm.sub %21, %4 : i6465    %23 = omp.map.bounds lower_bound(%5 : i64) upper_bound(%22 : i64) extent(%21 : i64) stride(%4 : i64) start_idx(%5 : i64) {stride_in_bytes = true}66    %24 = llvm.getelementptr %3[0, 0] : (!llvm.ptr) -> !llvm.ptr, !llvm.struct<(ptr, i64)>67    %25 = omp.map.info var_ptr(%3 : !llvm.ptr, i8) map_clauses(implicit, to) capture(ByRef) var_ptr_ptr(%24 : !llvm.ptr) bounds(%23) -> !llvm.ptr68    %26 = omp.map.info var_ptr(%3 : !llvm.ptr, !llvm.struct<(ptr, i64)>) map_clauses(to) capture(ByRef) members(%25 : [0] : !llvm.ptr) -> !llvm.ptr69    %27 = omp.map.info var_ptr(%1 : !llvm.ptr, i32) map_clauses(to) capture(ByCopy) -> !llvm.ptr70    omp.target nowait map_entries(%26 -> %arg1, %27 -> %arg2, %25 -> %arg3 : !llvm.ptr, !llvm.ptr, !llvm.ptr) private(@boxchar_firstprivate %18 -> %arg4 [map_idx=0], @private_eye %1 -> %arg5 [map_idx=1] : !llvm.struct<(ptr, i64)>, !llvm.ptr) {71      omp.terminator72    }73    llvm.return74  }75}76// CHECK-LABEL:   llvm.func @target_boxchar_(77// CHECK-SAME:      %[[ARG0:.*]]: !llvm.ptr {fir.bindc_name = "l"}) attributes {fir.internal_name = "_QPtarget_boxchar", frame_pointer = #llvm.framePointerKind<all>, target_cpu = "x86-64"} {78// CHECK: %[[VAL_0:.*]] = llvm.mlir.constant(1 : i64) : i6479// CHECK: %[[VAL_1:.*]] = llvm.alloca %[[VAL_0]] x i32 {bindc_name = "i"} : (i64) -> !llvm.ptr80// CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(1 : i64) : i6481// CHECK: %[[VAL_3:.*]] = llvm.mlir.constant(16 : i64) : i6482// CHECK: %[[HEAP0:.*]] = llvm.call @malloc(%[[VAL_3]]) : (i64) -> !llvm.ptr83// CHECK: %[[VAL_5:.*]] = llvm.alloca %[[VAL_2]] x !llvm.struct<(ptr, i64)> : (i64) -> !llvm.ptr84// CHECK: %[[VAL_6:.*]] = llvm.mlir.constant(1 : index) : i6485// CHECK: %[[VAL_7:.*]] = llvm.mlir.constant(0 : index) : i6486// CHECK: %[[VAL_8:.*]] = llvm.mlir.constant(0 : i32) : i3287// CHECK: %[[VAL_9:.*]] = llvm.mlir.constant(1 : i64) : i6488// CHECK: %[[VAL_10:.*]] = llvm.mlir.constant(1 : i64) : i6489// CHECK: %[[VAL_11:.*]] = llvm.load %[[ARG0]] : !llvm.ptr -> i3290// CHECK: %[[VAL_12:.*]] = llvm.icmp "sgt" %[[VAL_11]], %[[VAL_8]] : i3291// CHECK: %[[VAL_13:.*]] = llvm.select %[[VAL_12]], %[[VAL_11]], %[[VAL_8]] : i1, i3292// CHECK: %[[VAL_14:.*]] = llvm.mlir.constant(1 : i64) : i6493// CHECK: %[[VAL_15:.*]] = llvm.sext %[[VAL_13]] : i32 to i6494// CHECK: %[[VAL_16:.*]] = llvm.alloca %[[VAL_15]] x i8 {bindc_name = "char_var"} : (i64) -> !llvm.ptr95// CHECK: %[[VAL_17:.*]] = llvm.mlir.undef : !llvm.struct<(ptr, i64)>96// CHECK: %[[VAL_18:.*]] = llvm.sext %[[VAL_13]] : i32 to i6497// CHECK: %[[VAL_19:.*]] = llvm.insertvalue %[[VAL_16]], %[[VAL_17]][0] : !llvm.struct<(ptr, i64)>98// CHECK: %[[VAL_20:.*]] = llvm.insertvalue %[[VAL_18]], %[[VAL_19]][1] : !llvm.struct<(ptr, i64)>99// CHECK: llvm.store %[[VAL_20]], %[[VAL_5]] : !llvm.struct<(ptr, i64)>, !llvm.ptr100// CHECK: %[[VAL_21:.*]] = llvm.load %[[VAL_5]] : !llvm.ptr -> !llvm.struct<(ptr, i64)>101// CHECK: %[[VAL_22:.*]] = llvm.extractvalue %[[VAL_21]][0] : !llvm.struct<(ptr, i64)>102// CHECK: %[[VAL_23:.*]] = llvm.extractvalue %[[VAL_21]][1] : !llvm.struct<(ptr, i64)>103// CHECK: %[[VAL_24:.*]] = llvm.sub %[[VAL_23]], %[[VAL_6]] : i64104// CHECK: %[[VAL_25:.*]] = omp.map.bounds lower_bound(%[[VAL_7]] : i64) upper_bound(%[[VAL_24]] : i64) extent(%[[VAL_23]] : i64) stride(%[[VAL_6]] : i64) start_idx(%[[VAL_7]] : i64) {stride_in_bytes = true}105// CHECK: %[[VAL_26:.*]] = llvm.load %[[VAL_5]] : !llvm.ptr -> !llvm.struct<(ptr, i64)>106// CHECK: %[[VAL_27:.*]] = llvm.load %[[HEAP0]] : !llvm.ptr -> !llvm.struct<(ptr, i64)>107// CHECK: %[[VAL_28:.*]] = llvm.call @boxchar_firstprivate_init(%[[VAL_26]], %[[VAL_27]]) : (!llvm.struct<(ptr, i64)>, !llvm.struct<(ptr, i64)>) -> !llvm.struct<(ptr, i64)>108// CHECK: %[[VAL_29:.*]] = llvm.call @boxchar_firstprivate_copy(%[[VAL_26]], %[[VAL_28]]) : (!llvm.struct<(ptr, i64)>, !llvm.struct<(ptr, i64)>) -> !llvm.struct<(ptr, i64)>109// CHECK: llvm.store %[[VAL_29]], %[[HEAP0]] : !llvm.struct<(ptr, i64)>, !llvm.ptr110// CHECK: %[[VAL_30:.*]] = omp.map.info var_ptr(%[[VAL_1]] : !llvm.ptr, i32) map_clauses(to) capture(ByCopy) -> !llvm.ptr111// CHECK: %[[VAL_31:.*]] = llvm.getelementptr %[[HEAP0]][0, 0] : (!llvm.ptr) -> !llvm.ptr, !llvm.struct<(ptr, i64)>112// CHECK: %[[VAL_32:.*]] = omp.map.info var_ptr(%[[HEAP0]] : !llvm.ptr, i8) map_clauses(implicit, to) capture(ByRef) var_ptr_ptr(%[[VAL_31]] : !llvm.ptr) bounds(%[[VAL_25]]) -> !llvm.ptr113// CHECK: %[[VAL_33:.*]] = omp.map.info var_ptr(%[[HEAP0]] : !llvm.ptr, !llvm.struct<(ptr, i64)>) map_clauses(to) capture(ByRef) members(%[[VAL_32]] : [0] : !llvm.ptr) -> !llvm.ptr114// CHECK: %[[VAL_34:.*]] = llvm.load %[[HEAP0]] : !llvm.ptr -> !llvm.struct<(ptr, i64)>115// CHECK: omp.target depend(taskdependout -> %[[HEAP0]] : !llvm.ptr) nowait map_entries(%[[VAL_33]] -> %[[VAL_35:.*]], %[[VAL_30]] -> %[[VAL_36:.*]], %[[VAL_32]] -> %[[VAL_37:.*]] : !llvm.ptr, !llvm.ptr, !llvm.ptr) private(@boxchar_firstprivate %[[VAL_34]] -> %[[VAL_38:.*]] [map_idx=0], @private_eye %[[VAL_1]] -> %[[VAL_39:.*]] [map_idx=1] : !llvm.struct<(ptr, i64)>, !llvm.ptr) {116// CHECK: omp.terminator117// CHECK: }118// CHECK: omp.task depend(taskdependin -> %[[HEAP0]] : !llvm.ptr) {119// CHECK: llvm.call @boxchar_firstprivate_dealloc(%[[VAL_29]]) : (!llvm.struct<(ptr, i64)>) -> ()120// CHECK: llvm.call @free(%[[HEAP0]]) : (!llvm.ptr) -> ()121// CHECK: omp.terminator122// CHECK: }123// CHECK: llvm.return124// CHECK: }125 126// CHECK-LABEL:   llvm.func @boxchar_firstprivate_init(127// CHECK-SAME:      %[[ARG0:.*]]: !llvm.struct<(ptr, i64)>,128// CHECK-SAME:      %[[ARG1:.*]]: !llvm.struct<(ptr, i64)>) -> !llvm.struct<(ptr, i64)> attributes {always_inline} {129// CHECK: %[[VAL_0:.*]] = llvm.extractvalue %[[ARG0]][0] : !llvm.struct<(ptr, i64)>130// CHECK: %[[VAL_1:.*]] = llvm.extractvalue %[[ARG0]][1] : !llvm.struct<(ptr, i64)>131// CHECK: %[[VAL_2:.*]] = llvm.call @malloc(%[[VAL_1]]) {bindc_name = "", uniq_name = ""} : (i64) -> !llvm.ptr132// CHECK: %[[VAL_3:.*]] = llvm.mlir.undef : !llvm.struct<(ptr, i64)>133// CHECK: %[[VAL_4:.*]] = llvm.insertvalue %[[VAL_2]], %[[VAL_3]][0] : !llvm.struct<(ptr, i64)>134// CHECK: %[[VAL_5:.*]] = llvm.insertvalue %[[VAL_1]], %[[VAL_4]][1] : !llvm.struct<(ptr, i64)>135// CHECK: llvm.return %[[VAL_5]] : !llvm.struct<(ptr, i64)>136// CHECK: }137 138// CHECK-LABEL:   llvm.func @boxchar_firstprivate_copy(139// CHECK-SAME:      %[[ARG0:.*]]: !llvm.struct<(ptr, i64)>,140// CHECK-SAME:      %[[ARG1:.*]]: !llvm.struct<(ptr, i64)>) -> !llvm.struct<(ptr, i64)> attributes {always_inline} {141// CHECK: %[[VAL_0:.*]] = llvm.extractvalue %[[ARG0]][0] : !llvm.struct<(ptr, i64)>142// CHECK: %[[VAL_1:.*]] = llvm.extractvalue %[[ARG0]][1] : !llvm.struct<(ptr, i64)>143// CHECK: %[[VAL_2:.*]] = llvm.extractvalue %[[ARG1]][0] : !llvm.struct<(ptr, i64)>144// CHECK: %[[VAL_3:.*]] = llvm.extractvalue %[[ARG1]][1] : !llvm.struct<(ptr, i64)>145// CHECK: %[[VAL_4:.*]] = llvm.icmp "slt" %[[VAL_3]], %[[VAL_1]] : i64146// CHECK: %[[VAL_5:.*]] = llvm.select %[[VAL_4]], %[[VAL_3]], %[[VAL_1]] : i1, i64147// CHECK: "llvm.intr.memmove"(%[[VAL_2]], %[[VAL_0]], %[[VAL_5]]) <{isVolatile = false}> : (!llvm.ptr, !llvm.ptr, i64) -> ()148// CHECK: llvm.return %[[ARG1]] : !llvm.struct<(ptr, i64)>149// CHECK: }150 151// CHECK-LABEL:   llvm.func @boxchar_firstprivate_dealloc(152// CHECK-SAME:      %[[ARG0:.*]]: !llvm.struct<(ptr, i64)>) attributes {always_inline} {153// CHECK: %[[VAL_0:.*]] = llvm.extractvalue %[[ARG0]][0] : !llvm.struct<(ptr, i64)>154// CHECK: %[[VAL_1:.*]] = llvm.extractvalue %[[ARG0]][1] : !llvm.struct<(ptr, i64)>155// CHECK: llvm.call @free(%[[VAL_0]]) : (!llvm.ptr) -> ()156// CHECK: llvm.return157// CHECK: }158