forked from llvm/llvm-project
-
Notifications
You must be signed in to change notification settings - Fork 55
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
This reverts commit b29b413.
- Loading branch information
Showing
86 changed files
with
12,352 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,219 @@ | ||
! RUN: %flang_fc1 -I nowhere -emit-hlfir -fopenacc %s -o - | FileCheck %s | ||
|
||
! This test checks the lowering of atomic capture | ||
|
||
program acc_atomic_capture_test | ||
integer :: x, y | ||
|
||
!CHECK: %[[X:.*]] = fir.alloca i32 {bindc_name = "x", uniq_name = "_QFEx"} | ||
!CHECK: %[[X_DECL:.*]]:2 = hlfir.declare %0 {uniq_name = "_QFEx"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) | ||
!CHECK: %[[Y:.*]] = fir.alloca i32 {bindc_name = "y", uniq_name = "_QFEy"} | ||
!CHECK: %[[Y_DECL:.*]]:2 = hlfir.declare %2 {uniq_name = "_QFEy"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) | ||
!CHECK: %[[temp:.*]] = fir.load %[[X_DECL]]#0 : !fir.ref<i32> | ||
!CHECK: acc.atomic.capture { | ||
!CHECK: acc.atomic.read %[[X_DECL]]#1 = %[[Y_DECL]]#1 : !fir.ref<i32> | ||
!CHECK: acc.atomic.update %[[Y_DECL]]#1 : !fir.ref<i32> { | ||
!CHECK: ^bb0(%[[ARG:.*]]: i32): | ||
!CHECK: %[[result:.*]] = arith.addi %[[temp]], %[[ARG]] : i32 | ||
!CHECK: acc.yield %[[result]] : i32 | ||
!CHECK: } | ||
!CHECK: } | ||
|
||
!$acc atomic capture | ||
x = y | ||
y = x + y | ||
!$acc end atomic | ||
|
||
|
||
!CHECK: %[[temp:.*]] = fir.load %[[X_DECL]]#0 : !fir.ref<i32> | ||
!CHECK: acc.atomic.capture { | ||
!CHECK: acc.atomic.update %[[Y_DECL]]#1 : !fir.ref<i32> { | ||
!CHECK: ^bb0(%[[ARG:.*]]: i32): | ||
!CHECK: %[[result:.*]] = arith.muli %[[temp]], %[[ARG]] : i32 | ||
!CHECK: acc.yield %[[result]] : i32 | ||
!CHECK: } | ||
!CHECK: acc.atomic.read %[[X_DECL]]#1 = %[[Y_DECL]]#1 : !fir.ref<i32> | ||
!CHECK: } | ||
|
||
!$acc atomic capture | ||
y = x * y | ||
x = y | ||
!$acc end atomic | ||
|
||
!CHECK: %[[constant_20:.*]] = arith.constant 20 : i32 | ||
!CHECK: %[[constant_8:.*]] = arith.constant 8 : i32 | ||
!CHECK: %[[temp:.*]] = fir.load %[[X_DECL]]#0 : !fir.ref<i32> | ||
!CHECK: %[[result:.*]] = arith.subi %[[constant_8]], %[[temp]] : i32 | ||
!CHECK: %[[result_noreassoc:.*]] = hlfir.no_reassoc %[[result]] : i32 | ||
!CHECK: %[[result:.*]] = arith.addi %[[constant_20]], %[[result_noreassoc]] : i32 | ||
!CHECK: acc.atomic.capture { | ||
!CHECK: acc.atomic.read %[[X_DECL]]#1 = %[[Y_DECL]]#1 : !fir.ref<i32> | ||
!CHECK: acc.atomic.write %[[Y_DECL]]#1 = %[[result]] : !fir.ref<i32>, i32 | ||
!CHECK: } | ||
|
||
!$acc atomic capture | ||
x = y | ||
y = 2 * 10 + (8 - x) | ||
!$acc end atomic | ||
end program | ||
|
||
|
||
|
||
subroutine pointers_in_atomic_capture() | ||
!CHECK: %[[A:.*]] = fir.alloca !fir.box<!fir.ptr<i32>> {bindc_name = "a", uniq_name = "_QFpointers_in_atomic_captureEa"} | ||
!CHECK: %[[A_DECL:.*]]:2 = hlfir.declare %[[A]] {fortran_attrs = #fir.var_attrs<pointer>, uniq_name = "_QFpointers_in_atomic_captureEa"} : (!fir.ref<!fir.box<!fir.ptr<i32>>>) -> (!fir.ref<!fir.box<!fir.ptr<i32>>>, !fir.ref<!fir.box<!fir.ptr<i32>>>) | ||
!CHECK: %[[B:.*]] = fir.alloca !fir.box<!fir.ptr<i32>> {bindc_name = "b", uniq_name = "_QFpointers_in_atomic_captureEb"} | ||
!CHECK: %[[B_DECL:.*]]:2 = hlfir.declare %[[B]] {fortran_attrs = #fir.var_attrs<pointer>, uniq_name = "_QFpointers_in_atomic_captureEb"} : (!fir.ref<!fir.box<!fir.ptr<i32>>>) -> (!fir.ref<!fir.box<!fir.ptr<i32>>>, !fir.ref<!fir.box<!fir.ptr<i32>>>) | ||
!CHECK: %[[C:.*]] = fir.alloca i32 {bindc_name = "c", fir.target, uniq_name = "_QFpointers_in_atomic_captureEc"} | ||
!CHECK: %[[C_DECL:.*]]:2 = hlfir.declare %[[C]] {fortran_attrs = #fir.var_attrs<target>, uniq_name = "_QFpointers_in_atomic_captureEc"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) | ||
!CHECK: %[[D:.*]] = fir.alloca i32 {bindc_name = "d", fir.target, uniq_name = "_QFpointers_in_atomic_captureEd"} | ||
!CHECK: %[[D_DECL:.*]]:2 = hlfir.declare %[[D]] {fortran_attrs = #fir.var_attrs<target>, uniq_name = "_QFpointers_in_atomic_captureEd"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) | ||
|
||
!CHECK: %[[loaded_A:.*]] = fir.load %[[A_DECL]]#0 : !fir.ref<!fir.box<!fir.ptr<i32>>> | ||
!CHECK: %[[loaded_A_addr:.*]] = fir.box_addr %[[loaded_A]] : (!fir.box<!fir.ptr<i32>>) -> !fir.ptr<i32> | ||
!CHECK: %[[loaded_B:.*]] = fir.load %[[B_DECL]]#0 : !fir.ref<!fir.box<!fir.ptr<i32>>> | ||
!CHECK: %[[loaded_B_addr:.*]] = fir.box_addr %[[loaded_B]] : (!fir.box<!fir.ptr<i32>>) -> !fir.ptr<i32> | ||
!CHECK: %[[PRIVATE_LOADED_B:.*]] = fir.load %[[B_DECL]]#0 : !fir.ref<!fir.box<!fir.ptr<i32>>> | ||
!CHECK: %[[PRIVATE_LOADED_B_addr:.*]] = fir.box_addr %[[PRIVATE_LOADED_B]] : (!fir.box<!fir.ptr<i32>>) -> !fir.ptr<i32> | ||
!CHECK: %[[loaded_value:.*]] = fir.load %[[PRIVATE_LOADED_B_addr]] : !fir.ptr<i32> | ||
!CHECK: acc.atomic.capture { | ||
!CHECK: acc.atomic.update %[[loaded_A_addr]] : !fir.ptr<i32> { | ||
!CHECK: ^bb0(%[[ARG:.*]]: i32): | ||
!CHECK: %[[result:.*]] = arith.addi %[[ARG]], %[[loaded_value]] : i32 | ||
!CHECK: acc.yield %[[result]] : i32 | ||
!CHECK: } | ||
!CHECK: acc.atomic.read %[[loaded_B_addr]] = %[[loaded_A_addr]] : !fir.ptr<i32>, i32 | ||
!CHECK: } | ||
integer, pointer :: a, b | ||
integer, target :: c, d | ||
a=>c | ||
b=>d | ||
|
||
!$acc atomic capture | ||
a = a + b | ||
b = a | ||
!$acc end atomic | ||
end subroutine | ||
|
||
|
||
subroutine capture_with_convert_f32_to_i32() | ||
implicit none | ||
integer :: k, v, i | ||
|
||
k = 1 | ||
v = 0 | ||
|
||
!$acc atomic capture | ||
v = k | ||
k = (i + 1) * 3.14 | ||
!$acc end atomic | ||
end subroutine | ||
|
||
! CHECK-LABEL: func.func @_QPcapture_with_convert_f32_to_i32() | ||
! CHECK: %[[K:.*]] = fir.alloca i32 {bindc_name = "k", uniq_name = "_QFcapture_with_convert_f32_to_i32Ek"} | ||
! CHECK: %[[K_DECL:.*]]:2 = hlfir.declare %[[K]] {uniq_name = "_QFcapture_with_convert_f32_to_i32Ek"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) | ||
! CHECK: %[[V:.*]] = fir.alloca i32 {bindc_name = "v", uniq_name = "_QFcapture_with_convert_f32_to_i32Ev"} | ||
! CHECK: %[[V_DECL:.*]]:2 = hlfir.declare %[[V]] {uniq_name = "_QFcapture_with_convert_f32_to_i32Ev"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) | ||
! CHECK: %[[CST:.*]] = arith.constant 3.140000e+00 : f32 | ||
! CHECK: %[[MUL:.*]] = arith.mulf %{{.*}}, %[[CST]] fastmath<contract> : f32 | ||
! CHECK: %[[CONV:.*]] = fir.convert %[[MUL]] : (f32) -> i32 | ||
! CHECK: acc.atomic.capture { | ||
! CHECK: acc.atomic.read %[[V_DECL]]#1 = %[[K_DECL]]#1 : !fir.ref<i32>, i32 | ||
! CHECK: acc.atomic.write %[[K_DECL]]#1 = %[[CONV]] : !fir.ref<i32>, i32 | ||
! CHECK: } | ||
|
||
subroutine array_ref_in_atomic_capture1 | ||
integer :: x(10), v | ||
!$acc atomic capture | ||
v = x(7) | ||
x(7) = x(7) + 1 | ||
!$acc end atomic | ||
end subroutine array_ref_in_atomic_capture1 | ||
! CHECK-LABEL: func.func @_QParray_ref_in_atomic_capture1() { | ||
! CHECK: %[[V:.*]] = fir.alloca i32 {bindc_name = "v", uniq_name = "_QFarray_ref_in_atomic_capture1Ev"} | ||
! CHECK: %[[V_DECL:.*]]:2 = hlfir.declare %[[V]] {uniq_name = "_QFarray_ref_in_atomic_capture1Ev"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) | ||
! CHECK: %[[X:.*]] = fir.alloca !fir.array<10xi32> {bindc_name = "x", uniq_name = "_QFarray_ref_in_atomic_capture1Ex"} | ||
! CHECK: %[[X_DECL:.*]]:2 = hlfir.declare %[[X]](%{{.*}}) {uniq_name = "_QFarray_ref_in_atomic_capture1Ex"} : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xi32>>, !fir.ref<!fir.array<10xi32>>) | ||
! CHECK: %[[X_REF:.*]] = hlfir.designate %[[X_DECL]]#0 (%{{.*}}) : (!fir.ref<!fir.array<10xi32>>, index) -> !fir.ref<i32> | ||
! CHECK: acc.atomic.capture { | ||
! CHECK: acc.atomic.read %[[V_DECL]]#1 = %[[X_REF]] : !fir.ref<i32>, i32 | ||
! CHECK: acc.atomic.update %[[X_REF]] : !fir.ref<i32> { | ||
! CHECK: ^bb0(%[[VAL_7:.*]]: i32): | ||
! CHECK: %[[VAL_8:.*]] = arith.addi %[[VAL_7]], %{{.*}} : i32 | ||
! CHECK: acc.yield %[[VAL_8]] : i32 | ||
! CHECK: } | ||
! CHECK: } | ||
|
||
subroutine array_ref_in_atomic_capture2 | ||
integer :: x(10), v | ||
!$acc atomic capture | ||
x(7) = x(7) + 1 | ||
v = x(7) | ||
!$acc end atomic | ||
end subroutine array_ref_in_atomic_capture2 | ||
! CHECK-LABEL: func.func @_QParray_ref_in_atomic_capture2() { | ||
! CHECK: %[[V:.*]] = fir.alloca i32 {bindc_name = "v", uniq_name = "_QFarray_ref_in_atomic_capture2Ev"} | ||
! CHECK: %[[V_DECL:.*]]:2 = hlfir.declare %[[V]] {uniq_name = "_QFarray_ref_in_atomic_capture2Ev"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) | ||
! CHECK: %[[X:.*]] = fir.alloca !fir.array<10xi32> {bindc_name = "x", uniq_name = "_QFarray_ref_in_atomic_capture2Ex"} | ||
! CHECK: %[[X_DECL:.*]]:2 = hlfir.declare %[[X]](%{{.*}}) {uniq_name = "_QFarray_ref_in_atomic_capture2Ex"} : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xi32>>, !fir.ref<!fir.array<10xi32>>) | ||
! CHECK: %[[X_REF:.*]] = hlfir.designate %[[X_DECL]]#0 (%{{.*}}) : (!fir.ref<!fir.array<10xi32>>, index) -> !fir.ref<i32> | ||
! CHECK: acc.atomic.capture { | ||
! CHECK: acc.atomic.update %[[X_REF]] : !fir.ref<i32> { | ||
! CHECK: ^bb0(%[[VAL_7:.*]]: i32): | ||
! CHECK: %[[VAL_8:.*]] = arith.addi %[[VAL_7]], %{{.*}} : i32 | ||
! CHECK: acc.yield %[[VAL_8]] : i32 | ||
! CHECK: } | ||
! CHECK: acc.atomic.read %[[V_DECL]]#1 = %[[X_REF]] : !fir.ref<i32>, i32 | ||
! CHECK: } | ||
|
||
subroutine comp_ref_in_atomic_capture1 | ||
type t1 | ||
integer :: c | ||
end type t1 | ||
integer :: v | ||
type(t1) :: x | ||
!$acc atomic capture | ||
v = x%c | ||
x%c = x%c + 1 | ||
!$acc end atomic | ||
end subroutine comp_ref_in_atomic_capture1 | ||
! CHECK-LABEL: func.func @_QPcomp_ref_in_atomic_capture1() { | ||
! CHECK: %[[V:.*]] = fir.alloca i32 {bindc_name = "v", uniq_name = "_QFcomp_ref_in_atomic_capture1Ev"} | ||
! CHECK: %[[V_DECL:.*]]:2 = hlfir.declare %[[V]] {uniq_name = "_QFcomp_ref_in_atomic_capture1Ev"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) | ||
! CHECK: %[[X:.*]] = fir.alloca !fir.type<_QFcomp_ref_in_atomic_capture1Tt1{c:i32}> {bindc_name = "x", uniq_name = "_QFcomp_ref_in_atomic_capture1Ex"} | ||
! CHECK: %[[X_DECL:.*]]:2 = hlfir.declare %[[X]] {uniq_name = "_QFcomp_ref_in_atomic_capture1Ex"} : (!fir.ref<!fir.type<_QFcomp_ref_in_atomic_capture1Tt1{c:i32}>>) -> (!fir.ref<!fir.type<_QFcomp_ref_in_atomic_capture1Tt1{c:i32}>>, !fir.ref<!fir.type<_QFcomp_ref_in_atomic_capture1Tt1{c:i32}>>) | ||
! CHECK: %[[C:.*]] = hlfir.designate %[[X_DECL]]#0{"c"} : (!fir.ref<!fir.type<_QFcomp_ref_in_atomic_capture1Tt1{c:i32}>>) -> !fir.ref<i32> | ||
! CHECK: acc.atomic.capture { | ||
! CHECK: acc.atomic.read %[[V_DECL]]#1 = %[[C]] : !fir.ref<i32>, i32 | ||
! CHECK: acc.atomic.update %[[C]] : !fir.ref<i32> { | ||
! CHECK: ^bb0(%[[VAL_5:.*]]: i32): | ||
! CHECK: %[[VAL_6:.*]] = arith.addi %[[VAL_5]], %{{.*}} : i32 | ||
! CHECK: acc.yield %[[VAL_6]] : i32 | ||
! CHECK: } | ||
! CHECK: } | ||
|
||
subroutine comp_ref_in_atomic_capture2 | ||
type t1 | ||
integer :: c | ||
end type t1 | ||
integer :: v | ||
type(t1) :: x | ||
!$acc atomic capture | ||
x%c = x%c + 1 | ||
v = x%c | ||
!$acc end atomic | ||
end subroutine comp_ref_in_atomic_capture2 | ||
! CHECK-LABEL: func.func @_QPcomp_ref_in_atomic_capture2() { | ||
! CHECK: %[[V:.*]] = fir.alloca i32 {bindc_name = "v", uniq_name = "_QFcomp_ref_in_atomic_capture2Ev"} | ||
! CHECK: %[[V_DECL:.*]]:2 = hlfir.declare %[[V]] {uniq_name = "_QFcomp_ref_in_atomic_capture2Ev"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) | ||
! CHECK: %[[X:.*]] = fir.alloca !fir.type<_QFcomp_ref_in_atomic_capture2Tt1{c:i32}> {bindc_name = "x", uniq_name = "_QFcomp_ref_in_atomic_capture2Ex"} | ||
! CHECK: %[[X_DECL:.*]]:2 = hlfir.declare %[[X]] {uniq_name = "_QFcomp_ref_in_atomic_capture2Ex"} : (!fir.ref<!fir.type<_QFcomp_ref_in_atomic_capture2Tt1{c:i32}>>) -> (!fir.ref<!fir.type<_QFcomp_ref_in_atomic_capture2Tt1{c:i32}>>, !fir.ref<!fir.type<_QFcomp_ref_in_atomic_capture2Tt1{c:i32}>>) | ||
! CHECK: %[[C:.*]] = hlfir.designate %[[X_DECL]]#0{"c"} : (!fir.ref<!fir.type<_QFcomp_ref_in_atomic_capture2Tt1{c:i32}>>) -> !fir.ref<i32> | ||
! CHECK: acc.atomic.capture { | ||
! CHECK: acc.atomic.update %[[C]] : !fir.ref<i32> { | ||
! CHECK: ^bb0(%[[VAL_5:.*]]: i32): | ||
! CHECK: %[[VAL_6:.*]] = arith.addi %[[VAL_5]], %{{.*}} : i32 | ||
! CHECK: acc.yield %[[VAL_6]] : i32 | ||
! CHECK: } | ||
! CHECK: acc.atomic.read %[[V_DECL]]#1 = %[[C]] : !fir.ref<i32>, i32 | ||
! CHECK: } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
! RUN: bbc -fopenacc -emit-hlfir %s -o - | FileCheck %s | ||
|
||
! This test checks the lowering of atomic read | ||
|
||
program acc_atomic_test | ||
real g, h | ||
!$acc atomic read | ||
g = h | ||
end program acc_atomic_test | ||
|
||
! CHECK: func @_QQmain() attributes {fir.bindc_name = "acc_atomic_test"} { | ||
! CHECK: %[[VAR_G:.*]] = fir.alloca f32 {bindc_name = "g", uniq_name = "_QFEg"} | ||
! CHECK: %[[G_DECL:.*]]:2 = hlfir.declare %[[VAR_G]] {uniq_name = "_QFEg"} : (!fir.ref<f32>) -> (!fir.ref<f32>, !fir.ref<f32>) | ||
! CHECK: %[[VAR_H:.*]] = fir.alloca f32 {bindc_name = "h", uniq_name = "_QFEh"} | ||
! CHECK: %[[H_DECL:.*]]:2 = hlfir.declare %[[VAR_H]] {uniq_name = "_QFEh"} : (!fir.ref<f32>) -> (!fir.ref<f32>, !fir.ref<f32>) | ||
! CHECK: acc.atomic.read %[[G_DECL]]#1 = %[[H_DECL]]#1 : !fir.ref<f32>, f32 | ||
! CHECK: return | ||
! CHECK: } | ||
|
||
! Test lowering atomic read for pointer variables. | ||
! Please notice to use %[[VAL_4]] and %[[VAL_1]] for operands of atomic | ||
! operation, instead of %[[VAL_3]] and %[[VAL_0]]. | ||
|
||
subroutine atomic_read_pointer() | ||
integer, pointer :: x, y | ||
|
||
!$acc atomic read | ||
y = x | ||
|
||
x = y | ||
end | ||
|
||
! CHECK-LABEL: func.func @_QPatomic_read_pointer() { | ||
! CHECK: %[[X:.*]] = fir.alloca !fir.box<!fir.ptr<i32>> {bindc_name = "x", uniq_name = "_QFatomic_read_pointerEx"} | ||
! CHECK: %[[X_DECL:.*]]:2 = hlfir.declare %[[X]] {fortran_attrs = #fir.var_attrs<pointer>, uniq_name = "_QFatomic_read_pointerEx"} : (!fir.ref<!fir.box<!fir.ptr<i32>>>) -> (!fir.ref<!fir.box<!fir.ptr<i32>>>, !fir.ref<!fir.box<!fir.ptr<i32>>>) | ||
! CHECK: %[[Y:.*]] = fir.alloca !fir.box<!fir.ptr<i32>> {bindc_name = "y", uniq_name = "_QFatomic_read_pointerEy"} | ||
! CHECK: %[[Y_DECL:.*]]:2 = hlfir.declare %[[Y]] {fortran_attrs = #fir.var_attrs<pointer>, uniq_name = "_QFatomic_read_pointerEy"} : (!fir.ref<!fir.box<!fir.ptr<i32>>>) -> (!fir.ref<!fir.box<!fir.ptr<i32>>>, !fir.ref<!fir.box<!fir.ptr<i32>>>) | ||
! CHECK: %[[LOAD_X:.*]] = fir.load %[[X_DECL]]#0 : !fir.ref<!fir.box<!fir.ptr<i32>>> | ||
! CHECK: %[[BOX_ADDR_X:.*]] = fir.box_addr %[[LOAD_X]] : (!fir.box<!fir.ptr<i32>>) -> !fir.ptr<i32> | ||
! CHECK: %[[LOAD_Y:.*]] = fir.load %[[Y_DECL]]#0 : !fir.ref<!fir.box<!fir.ptr<i32>>> | ||
! CHECK: %[[BOX_ADDR_Y:.*]] = fir.box_addr %[[LOAD_Y]] : (!fir.box<!fir.ptr<i32>>) -> !fir.ptr<i32> | ||
! CHECK: acc.atomic.read %[[BOX_ADDR_Y]] = %[[BOX_ADDR_X]] : !fir.ptr<i32>, i32 | ||
! CHECK: } | ||
|
||
subroutine atomic_read_with_convert() | ||
integer(4) :: x | ||
integer(8) :: y | ||
|
||
!$acc atomic read | ||
y = x | ||
end | ||
|
||
! CHECK-LABEL: func.func @_QPatomic_read_with_convert() { | ||
! CHECK: %[[X:.*]] = fir.alloca i32 {bindc_name = "x", uniq_name = "_QFatomic_read_with_convertEx"} | ||
! CHECK: %[[X_DECL:.*]]:2 = hlfir.declare %[[X]] {uniq_name = "_QFatomic_read_with_convertEx"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>) | ||
! CHECK: %[[Y:.*]] = fir.alloca i64 {bindc_name = "y", uniq_name = "_QFatomic_read_with_convertEy"} | ||
! CHECK: %[[Y_DECL:.*]]:2 = hlfir.declare %[[Y]] {uniq_name = "_QFatomic_read_with_convertEy"} : (!fir.ref<i64>) -> (!fir.ref<i64>, !fir.ref<i64>) | ||
! CHECK: %[[CONV:.*]] = fir.convert %[[X_DECL]]#1 : (!fir.ref<i32>) -> !fir.ref<i64> | ||
! CHECK: acc.atomic.read %[[Y_DECL]]#1 = %[[CONV]] : !fir.ref<i64>, i32 |
Oops, something went wrong.