brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.3 KiB · 47fffb3 Raw
39 lines · plain
1// RUN: tco %s | FileCheck %s2 3// the fir.embox in the init region is turned into an alloca for the box. Test4// that CodeGen.cpp knows where to place an alloca when it is inside of an5// omp.declare_reduction6 7// regretably this has to be nonsense IR because we need the subsequent patches8// to process anything useful9 10omp.declare_reduction @test_reduction : !fir.ref<!fir.box<i32>> init {11^bb0(%arg0: !fir.ref<!fir.box<i32>>):12  %0 = fir.alloca !fir.box<i32>13  %1 = fir.alloca i3214  %2 = fir.embox %1 : (!fir.ref<i32>) -> !fir.box<i32>15 16  // use the embox for something so it isn't removed17  fir.store %2 to %0 : !fir.ref<!fir.box<i32>>18 19  omp.yield(%0 : !fir.ref<!fir.box<i32>>)20} combiner {21^bb0(%arg0: !fir.ref<!fir.box<i32>>, %arg1: !fir.ref<!fir.box<i32>>):22  %0 = fir.undefined !fir.ref<!fir.box<i32>>23  omp.yield(%0 : !fir.ref<!fir.box<i32>>)24}25 26func.func @_QQmain() attributes {fir.bindc_name = "reduce"} {27  %4 = fir.alloca !fir.box<i32>28  omp.parallel reduction(byref @test_reduction %4 -> %arg0 : !fir.ref<!fir.box<i32>>) {29    omp.terminator30  }31  func.call @__use_box_i32(%4) : (!fir.ref<!fir.box<i32>>) -> ()32  return33}34 35func.func private @__use_box_i32(!fir.ref<!fir.box<i32>>) -> ()36// basically we are testing that there isn't a crash37// CHECK-LABEL: define void @_QQmain38// CHECK-NEXT:    alloca { ptr, i64, i32, i8, i8, i8, i8 }, i64 1, align 839