1 // RUN: tco %s | FileCheck %s
3 // the fir.embox in the init region is turned into an alloca for the box. Test
4 // that CodeGen.cpp knows where to place an alloca when it is inside of an
5 // omp.declare_reduction
7 // regretably this has to be nonsense IR because we need the subsequent patches
8 // to process anything useful
10 omp.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>
14 %2 = fir.embox %1 : (!fir.ref<i32>) -> !fir.box<i32>
16 // use the embox for something so it isn't removed
17 fir.store %2 to %0 : !fir.ref<!fir.box<i32>>
19 omp.yield(%0 : !fir.ref<!fir.box<i32>>)
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>>)
26 func.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>>) {
34 // basically we are testing that there isn't a crash
35 // CHECK-LABEL: define void @_QQmain
36 // CHECK-NEXT: alloca { ptr, i64, i32, i8, i8, i8, i8 }, i64 1, align 8