181 lines · plain
1! Test lowering of Cray pointee references.2! RUN: %flang_fc1 -emit-hlfir -fopenmp %s -o - 2>&1 | FileCheck %s3 4! CHECK-LABEL: func.func @_QQmain() attributes {fir.bindc_name = "TEST_CRAY_POINTERS_02"}5program test_cray_pointers_026 implicit none7 8 ! CHECK: fir.call @_QPnone_shared() fastmath<contract> : () -> ()9 ! CHECK: fir.call @_QPnone_private() fastmath<contract> : () -> ()10 ! CHECK: fir.call @_QPnone_firstprivate() fastmath<contract> : () -> ()11 ! CHECK: fir.call @_QPprivate_shared() fastmath<contract> : () -> ()12 ! CHECK: fir.call @_QPprivate_firstprivate() fastmath<contract> : () -> ()13 ! CHECK: fir.call @_QPfirstprivate_shared() fastmath<contract> : () -> ()14 ! CHECK: fir.call @_QPfirstprivate_private() fastmath<contract> : () -> ()15 call none_shared()16 call none_private()17 call none_firstprivate()18 call private_shared()19 call private_firstprivate()20 call firstprivate_shared()21 call firstprivate_private()22 ! CHECK: return23 ! CHECK: }24end program test_cray_pointers_0225 26! CHECK-LABEL: func.func @_QPnone_shared()27subroutine none_shared()28 implicit none29 integer var(*)30 pointer(ivar,var)31 integer pointee(8)32 33 pointee(1) = 4234 ivar = loc(pointee)35 36 !$omp parallel num_threads(1) default(none) shared(ivar)37 ! CHECK: omp.parallel38 ! CHECK: fir.call @_FortranAPointerAssociateScalar({{.*}}) fastmath<contract> : (!fir.ref<!fir.box<none>>, !fir.llvm_ptr<i8>) -> ()39 ! CHECK: {{.*}} = arith.divsi40 ! CHECK: fir.call @_FortranAPointerAssociateScalar({{.*}}) fastmath<contract> : (!fir.ref<!fir.box<none>>, !fir.llvm_ptr<i8>) -> ()41 ! CHECK: fir.call @_FortranAPointerAssociateScalar({{.*}}) fastmath<contract> : (!fir.ref<!fir.box<none>>, !fir.llvm_ptr<i8>) -> ()42 var(1) = var(1) / 243 print '(A24,I6)', 'none_shared', var(1)44 !$omp end parallel45 ! CHECK: return46end subroutine47 48! CHECK-LABEL: func.func @_QPnone_private()49subroutine none_private()50 implicit none51 integer var(*)52 pointer(ivar,var)53 integer pointee(8)54 55 pointee(1) = 4256 ivar = loc(pointee)57 58 !$omp parallel num_threads(1) default(none) private(ivar) shared(pointee)59 ! CHECK: omp.parallel60 ivar = loc(pointee)61 ! CHECK: fir.call @_FortranAPointerAssociateScalar({{.*}}) fastmath<contract> : (!fir.ref<!fir.box<none>>, !fir.llvm_ptr<i8>) -> ()62 ! CHECK: {{.*}} = arith.addi63 ! CHECK: fir.call @_FortranAPointerAssociateScalar({{.*}}) fastmath<contract> : (!fir.ref<!fir.box<none>>, !fir.llvm_ptr<i8>) -> ()64 ! CHECK: fir.call @_FortranAPointerAssociateScalar({{.*}}) fastmath<contract> : (!fir.ref<!fir.box<none>>, !fir.llvm_ptr<i8>) -> ()65 var(1) = var(1) + 266 print '(A24,I6)', 'none_private', var(1)67 !$omp end parallel68 ! CHECK: return69end subroutine70 71! CHECK-LABEL: func.func @_QPnone_firstprivate()72subroutine none_firstprivate()73 implicit none74 integer var(*)75 pointer(ivar,var)76 integer pointee(8)77 78 pointee(1) = 4279 ivar = loc(pointee)80 81 !$omp parallel num_threads(1) default(none) firstprivate(ivar)82 ! CHECK: omp.parallel83 ! CHECK: fir.call @_FortranAPointerAssociateScalar({{.*}}) fastmath<contract> : (!fir.ref<!fir.box<none>>, !fir.llvm_ptr<i8>) -> ()84 ! CHECK: {{.*}} = arith.muli85 ! CHECK: fir.call @_FortranAPointerAssociateScalar({{.*}}) fastmath<contract> : (!fir.ref<!fir.box<none>>, !fir.llvm_ptr<i8>) -> ()86 ! CHECK: fir.call @_FortranAPointerAssociateScalar({{.*}}) fastmath<contract> : (!fir.ref<!fir.box<none>>, !fir.llvm_ptr<i8>) -> ()87 var(1) = var(1) * 288 print '(A24,I6)', 'none_firstprivate', var(1)89 !$omp end parallel90 ! CHECK: return91end subroutine92 93! CHECK-LABEL: func.func @_QPprivate_shared()94subroutine private_shared()95 implicit none96 integer var(*)97 pointer(ivar,var)98 integer pointee(8)99 100 pointee(1) = 42101 ivar = loc(pointee)102 103 !$omp parallel num_threads(1) default(private) shared(ivar)104 ! CHECK: omp.parallel105 ! CHECK: fir.call @_FortranAPointerAssociateScalar({{.*}}) fastmath<contract> : (!fir.ref<!fir.box<none>>, !fir.llvm_ptr<i8>) -> ()106 ! CHECK: {{.*}} = math.ipowi107 ! CHECK: fir.call @_FortranAPointerAssociateScalar({{.*}}) fastmath<contract> : (!fir.ref<!fir.box<none>>, !fir.llvm_ptr<i8>) -> ()108 ! CHECK: fir.call @_FortranAPointerAssociateScalar({{.*}}) fastmath<contract> : (!fir.ref<!fir.box<none>>, !fir.llvm_ptr<i8>) -> ()109 var(1) = var(1) ** 2110 print '(A24,I6)', 'private_shared', var(1)111 !$omp end parallel112 ! CHECK: return113end subroutine114 115! CHECK-LABEL: func.func @_QPprivate_firstprivate()116subroutine private_firstprivate()117 implicit none118 integer var(*)119 pointer(ivar,var)120 integer pointee(8)121 122 pointee(1) = 42123 ivar = loc(pointee)124 125 !$omp parallel num_threads(1) default(private) firstprivate(ivar)126 ! CHECK: omp.parallel127 ! CHECK: fir.call @_FortranAPointerAssociateScalar({{.*}}) fastmath<contract> : (!fir.ref<!fir.box<none>>, !fir.llvm_ptr<i8>) -> ()128 ! CHECK: {{.*}} = arith.subi129 ! CHECK: fir.call @_FortranAPointerAssociateScalar({{.*}}) fastmath<contract> : (!fir.ref<!fir.box<none>>, !fir.llvm_ptr<i8>) -> ()130 ! CHECK: fir.call @_FortranAPointerAssociateScalar({{.*}}) fastmath<contract> : (!fir.ref<!fir.box<none>>, !fir.llvm_ptr<i8>) -> ()131 var(1) = var(1) - 2132 print '(A24,I6)', 'private_firstprivate', var(1)133 !$omp end parallel134 ! CHECK: return135end subroutine136 137! CHECK-LABEL: func.func @_QPfirstprivate_shared()138subroutine firstprivate_shared()139 implicit none140 integer var(*)141 pointer(ivar,var)142 integer pointee(8)143 144 pointee(1) = 42145 ivar = loc(pointee)146 147 !$omp parallel num_threads(1) default(firstprivate) shared(ivar)148 ! CHECK: omp.parallel149 ! CHECK: fir.call @_FortranAPointerAssociateScalar({{.*}}) fastmath<contract> : (!fir.ref<!fir.box<none>>, !fir.llvm_ptr<i8>) -> ()150 ! CHECK: {{.*}} = arith.divsi151 ! CHECK: fir.call @_FortranAPointerAssociateScalar({{.*}}) fastmath<contract> : (!fir.ref<!fir.box<none>>, !fir.llvm_ptr<i8>) -> ()152 ! CHECK: fir.call @_FortranAPointerAssociateScalar({{.*}}) fastmath<contract> : (!fir.ref<!fir.box<none>>, !fir.llvm_ptr<i8>) -> ()153 var(1) = var(1) / 2154 print '(A24,I6)', 'firstprivate_shared', var(1)155 !$omp end parallel156 ! CHECK: return157end subroutine158 159! CHECK-LABEL: func.func @_QPfirstprivate_private()160subroutine firstprivate_private()161 implicit none162 integer var(*)163 pointer(ivar,var)164 integer pointee(8)165 166 pointee(1) = 42167 ivar = loc(pointee)168 169 !$omp parallel num_threads(1) default(firstprivate) private(ivar) shared(pointee)170 ! CHECK: omp.parallel171 ! CHECK: fir.call @_FortranAPointerAssociateScalar({{.*}}) fastmath<contract> : (!fir.ref<!fir.box<none>>, !fir.llvm_ptr<i8>) -> ()172 ! CHECK: {{.*}} = math.ipowi173 ! CHECK: fir.call @_FortranAPointerAssociateScalar({{.*}}) fastmath<contract> : (!fir.ref<!fir.box<none>>, !fir.llvm_ptr<i8>) -> ()174 ! CHECK: fir.call @_FortranAPointerAssociateScalar({{.*}}) fastmath<contract> : (!fir.ref<!fir.box<none>>, !fir.llvm_ptr<i8>) -> ()175 ivar = loc(pointee)176 var(1) = var(1) ** 2177 print '(A24,I6)', 'firstprivate_private', var(1)178 !$omp end parallel179 ! CHECK: return180end subroutine181