brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · 1887e8a Raw
43 lines · plain
1! This test checks lowering of OpenMP Threadprivate Directive.2! Test for threadprivate variable in host association.3 4!RUN: %flang_fc1 -emit-hlfir -fopenmp %s -o - | FileCheck %s5 6!CHECK: func.func @_QQmain() attributes {fir.bindc_name = "MAIN"} {7!CHECK:   %[[A:.*]] = fir.address_of(@_QFEa) : !fir.ref<i32>8!CHECK:   %[[A_DECL:.*]]:2 = hlfir.declare %[[A]] {fortran_attrs = #fir.var_attrs<internal_assoc>, uniq_name = "_QFEa"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)9!CHECK:   %[[TP_A:.*]] = omp.threadprivate %[[A_DECL]]#0 : !fir.ref<i32> -> !fir.ref<i32>10!CHECK:   %[[TP_A_DECL:.*]]:2 = hlfir.declare %[[TP_A]] {fortran_attrs = #fir.var_attrs<internal_assoc>, uniq_name = "_QFEa"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)11!CHECK:   fir.call @_QFPsub() fastmath<contract> : () -> ()12!CHECK:   return13!CHECK: }14!CHECK: func.func private @_QFPsub() attributes {fir.host_symbol = {{.*}}, llvm.linkage = #llvm.linkage<internal>} {15!CHECK:   %[[A:.*]] = fir.address_of(@_QFEa) : !fir.ref<i32>16!CHECK:   %[[A_DECL:.*]]:2 = hlfir.declare %[[A]] {uniq_name = "_QFEa"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)17!CHECK:   %[[TP_A:.*]] = omp.threadprivate %[[A_DECL]]#0 : !fir.ref<i32> -> !fir.ref<i32>18!CHECK:   %[[TP_A_DECL:.*]]:2 = hlfir.declare %[[TP_A]] {uniq_name = "_QFEa"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)19!CHECK:   omp.parallel {20!CHECK:     %[[PAR_TP_A:.*]] = omp.threadprivate %[[A_DECL]]#0 : !fir.ref<i32> -> !fir.ref<i32>21!CHECK:     %[[PAR_TP_A_DECL:.*]]:2 = hlfir.declare %[[PAR_TP_A]] {uniq_name = "_QFEa"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)22!CHECK:     %{{.*}} = fir.load %[[PAR_TP_A_DECL]]#0 : !fir.ref<i32>23!CHECK:     omp.terminator24!CHECK:   }25!CHECK:   return26!CHECK: }27!CHECK: fir.global internal @_QFEa : i32 {28!CHECK:   %[[A:.*]] = fir.zero_bits i3229!CHECK:   fir.has_value %[[A]] : i3230!CHECK: }31 32program main33   integer, save :: a34   !$omp threadprivate(a)35   call sub()36contains37   subroutine sub()38      !$omp parallel39      print *, a40      !$omp end parallel41   end42end43