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