1!RUN: %flang_fc1 -emit-fir -fopenmp %s -o - | FileCheck %s --check-prefixes="FIRDialect,OMPDialect" 2!RUN: %flang_fc1 -emit-fir -fopenmp %s -o - | fir-opt --cfg-conversion | fir-opt --fir-to-llvm-ir | FileCheck %s --check-prefixes="OMPDialect,LLVMDialect" 3 4!=============================================================================== 5! Parallel sections construct 6!=============================================================================== 7 8!FIRDialect: func @_QPomp_parallel_sections 9subroutine omp_parallel_sections(x, y) 10 integer, intent(inout) :: x, y 11 !OMPDialect: omp.parallel { 12 !OMPDialect: omp.sections { 13 !$omp parallel sections 14 !OMPDialect: omp.section { 15 !$omp section 16 !FIRDialect: fir.load 17 !FIRDialect: arith.addi 18 !FIRDialect: fir.store 19 x = x + 12 20 !OMPDialect: omp.terminator 21 !OMPDialect: omp.section { 22 !$omp section 23 !FIRDialect: fir.load 24 !FIRDialect: arith.subi 25 !FIRDialect: fir.store 26 y = y - 5 27 !OMPDialect: omp.terminator 28 !OMPDialect: omp.terminator 29 !OMPDialect: omp.terminator 30 !$omp end parallel sections 31end subroutine omp_parallel_sections 32 33!=============================================================================== 34! Parallel sections construct with allocate clause 35!=============================================================================== 36 37!FIRDialect: func @_QPomp_parallel_sections 38subroutine omp_parallel_sections_allocate(x, y) 39 use omp_lib 40 integer, intent(inout) :: x, y 41 !FIRDialect: %[[allocator:.*]] = arith.constant 1 : i32 42 !LLVMDialect: %[[allocator:.*]] = llvm.mlir.constant(1 : i32) : i32 43 !OMPDialect: omp.parallel { 44 !OMPDialect: omp.sections allocate( 45 !FIRDialect: %[[allocator]] : i32 -> %{{.*}} : !fir.ref<i32>) { 46 !LLVMDialect: %[[allocator]] : i32 -> %{{.*}} : !llvm.ptr<i32>) { 47 !$omp parallel sections allocate(omp_high_bw_mem_alloc: x) 48 !OMPDialect: omp.section { 49 !$omp section 50 x = x + 12 51 !OMPDialect: omp.terminator 52 !OMPDialect: omp.section { 53 !$omp section 54 y = y + 5 55 !OMPDialect: omp.terminator 56 !OMPDialect: omp.terminator 57 !OMPDialect: omp.terminator 58 !$omp end parallel sections 59end subroutine omp_parallel_sections_allocate 60