brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.8 KiB · e0e4abe Raw
102 lines · plain
1!===----------------------------------------------------------------------===!2! This directory can be used to add Integration tests involving multiple3! stages of the compiler (for eg. from Fortran to LLVM IR). It should not4! contain executable tests. We should only add tests here sparingly and only5! if there is no other way to test. Repeat this message in each test that is6! added to this directory and sub-directories.7!===----------------------------------------------------------------------===!8 9!RUN: %flang_fc1 -emit-llvm -fopenmp %s -o - | FileCheck %s10 11!CHECK-DAG: define internal void @_copy_box_Uxi32(ptr {{[^%]*}}%{{.*}}, ptr {{[^%]*}}%{{.*}})12!CHECK-DAG: define internal void @_copy_box_10xi32(ptr {{[^%]*}}%{{.*}}, ptr {{[^%]*}}%{{.*}})13!CHECK-DAG: define internal void @_copy_i64(ptr {{[^%]*}}%{{.*}}, ptr {{[^%]*}}%{{.*}})14!CHECK-DAG: define internal void @_copy_box_Uxi64(ptr {{[^%]*}}%{{.*}}, ptr {{[^%]*}}%{{.*}})15!CHECK-DAG: define internal void @_copy_f32(ptr {{[^%]*}}%{{.*}}, ptr {{[^%]*}}%{{.*}})16!CHECK-DAG: define internal void @_copy_box_2x3xf32(ptr {{[^%]*}}%{{.*}}, ptr {{[^%]*}}%{{.*}})17!CHECK-DAG: define internal void @_copy_z32(ptr {{[^%]*}}%{{.*}}, ptr {{[^%]*}}%{{.*}})18!CHECK-DAG: define internal void @_copy_box_10xz32(ptr {{[^%]*}}%{{.*}}, ptr {{[^%]*}}%{{.*}})19!CHECK-DAG: define internal void @_copy_l32(ptr {{[^%]*}}%{{.*}}, ptr {{[^%]*}}%{{.*}})20!CHECK-DAG: define internal void @_copy_box_5xl32(ptr {{[^%]*}}%{{.*}}, ptr {{[^%]*}}%{{.*}})21!CHECK-DAG: define internal void @_copy_c8x8(ptr {{[^%]*}}%{{.*}}, ptr {{[^%]*}}%{{.*}})22!CHECK-DAG: define internal void @_copy_box_10xc8x8(ptr {{[^%]*}}%{{.*}}, ptr {{[^%]*}}%{{.*}})23!CHECK-DAG: define internal void @_copy_c16x5(ptr {{[^%]*}}%{{.*}}, ptr {{[^%]*}}%{{.*}})24!CHECK-DAG: define internal void @_copy_rec__QFtest_typesTdt(ptr {{[^%]*}}%{{.*}}, ptr {{[^%]*}}%{{.*}})25!CHECK-DAG: define internal void @_copy_box_heap_Uxi32(ptr {{[^%]*}}%{{.*}}, ptr {{[^%]*}}%{{.*}})26!CHECK-DAG: define internal void @_copy_box_ptr_Uxc8x9(ptr {{[^%]*}}%{{.*}}, ptr {{[^%]*}}%{{.*}})27 28!CHECK-LABEL: define internal void @_copy_i32(29!CHECK-SAME:                         ptr {{[^%]*}}%[[DST:.*]], ptr {{[^%]*}}%[[SRC:.*]]){{.*}} {30!CHECK-NEXT:    %[[SRC_VAL:.*]] = load i32, ptr %[[SRC]]31!CHECK-NEXT:    store i32 %[[SRC_VAL]], ptr %[[DST]]32!CHECK-NEXT:    ret void33!CHECK-NEXT:  }34 35!CHECK-LABEL: define internal void @test_scalar_..omp_par({{.*}})36!CHECK-NEXT: omp.par.entry:37!CHECK:         %[[TID_ADDR:.*]] = alloca i32, align 438!CHECK:         %[[I:.*]] = alloca i32, align 439!CHECK:         %[[J:.*]] = alloca i32, align 440!CHECK:         br label %[[OMP_REDUCTION_INIT:.*]]41 42!CHECK:         %[[DID_IT:.*]] = alloca i3243!CHECK:         store i32 0, ptr %[[DID_IT]]44!CHECK:         %[[THREAD_NUM1:.*]] = call i32 @__kmpc_global_thread_num(ptr @[[LOC:.*]])45!CHECK:         %[[RET:.*]] = call i32 @__kmpc_single({{.*}})46!CHECK:         %[[NOT_ZERO:.*]] = icmp ne i32 %[[RET]], 047!CHECK:         br i1 %[[NOT_ZERO]], label %[[OMP_REGION_BODY:.*]], label %[[OMP_REGION_END:.*]]48 49!CHECK:       [[OMP_REGION_END]]:50!CHECK:         %[[THREAD_NUM2:.*]] = call i32 @__kmpc_global_thread_num(ptr @[[LOC:.*]])51!CHECK:         %[[DID_IT_VAL:.*]] = load i32, ptr %[[DID_IT]]52!CHECK:         call void @__kmpc_copyprivate(ptr @[[LOC]], i32 %[[THREAD_NUM2]], i64 0, ptr %[[I]], ptr @_copy_i32, i32 %[[DID_IT_VAL]])53!CHECK:         %[[THREAD_NUM3:.*]] = call i32 @__kmpc_global_thread_num(ptr @[[LOC]])54!CHECK:         %[[DID_IT_VAL2:.*]] = load i32, ptr %[[DID_IT]]55!CHECK:         call void @__kmpc_copyprivate(ptr @[[LOC]], i32 %[[THREAD_NUM3]], i64 0, ptr %[[J]], ptr @_copy_i32, i32 %[[DID_IT_VAL2]])56 57!CHECK:       [[OMP_REGION_BODY]]:58!CHECK:         br label %[[OMP_SINGLE_REGION:.*]]59!CHECK:       [[OMP_SINGLE_REGION]]:60!CHECK:         store i32 11, ptr %[[I]]61!CHECK:         store i32 22, ptr %[[J]]62!CHECK:         br label %[[OMP_REGION_CONT3:.*]]63!CHECK:       [[OMP_REGION_CONT3:.*]]:64!CHECK:         store i32 1, ptr %[[DID_IT]]65!CHECK:         call void @__kmpc_end_single(ptr @[[LOC]], i32 %[[THREAD_NUM1]])66!CHECK:         br label %[[OMP_REGION_END]]67subroutine test_scalar()68  integer :: i, j69 70  !$omp parallel private(i, j)71  !$omp single72  i = 1173  j = 2274  !$omp end single copyprivate(i, j)75  !$omp end parallel76end subroutine77 78subroutine test_types(a, n)79  integer :: a(:), n80  integer(4) :: i4, i4a(10)81  integer(8) :: i8, i8a(n)82  real :: r, ra(2, 3)83  complex :: z, za(10)84  logical :: l, la(5)85  character(kind=1, len=8) :: c1, c1a(10)86  character(kind=2, len=5) :: c287 88  type dt89    integer :: i90    real :: r91  end type92  type(dt) :: t93 94  integer, allocatable :: aloc(:)95  character(kind=1, len=9), pointer :: ptr(:)96 97  !$omp parallel private(a, i4, i4a, i8, i8a, r, ra, z, za, l, la, c1, c1a, c2, t, aloc, ptr)98  !$omp single99  !$omp end single copyprivate(a, i4, i4a, i8, i8a, r, ra, z, za, l, la, c1, c1a, c2, t, aloc, ptr)100  !$omp end parallel101end subroutine102