// RUN: fir-opt --fir-to-llvm-ir %s | FileCheck %s // Tests that private allocations of an `omp.teams` op remain nested inside the // owning `omp.teams` op after FIR to LLVM conversion. func.func @foo() { omp.teams { %2 = fir.alloca f32 {bindc_name = "priv_val", pinned, uniq_name = "_QFEpriv_val"} %3 = fir.alloca i32 {bindc_name = "i", pinned, uniq_name = "_QFEi"} %c1_i32 = arith.constant 1 : i32 %c1000_i32 = arith.constant 1000 : i32 %c1_i32_0 = arith.constant 1 : i32 omp.distribute { omp.loop_nest (%arg0) : i32 = (%c1_i32) to (%c1000_i32) inclusive step (%c1_i32_0) { fir.store %arg0 to %3 : !fir.ref omp.yield } } omp.terminator } return } // CHECK-LABEL: llvm.func @foo() { // CHECK: omp.teams { // CHECK: %[[TEAMS_IV_ALLOC:.*]] = llvm.alloca %{{.*}} x i32 {bindc_name = "i", pinned} // CHECK: %[[TEAMS_PRIV_ALLOC:.*]] = llvm.alloca %{{.*}} x f32 {bindc_name = "priv_val", pinned} // CHECK: omp.distribute { // CHECK: omp.loop_nest (%{{.*}}) : i32 = (%{{.*}}) to (%{{.*}}) inclusive step (%{{.*}}) { // CHECK: llvm.store %{{.*}}, %[[TEAMS_IV_ALLOC]] : i32, !llvm.ptr // CHECK: omp.yield // CHECK: } // CHECK: } // CHECK: omp.terminator // CHECK: } // CHECK: llvm.return // CHECK: }