1
1
! RUN: %flang_fc1 -emit-hlfir -fopenmp %s -o - | FileCheck %s
2
2
! RUN: bbc -fopenmp -emit-hlfir %s -o - | FileCheck %s
3
3
4
- ! CHECK: %[[V0:[0-9]+]] = fir.alloca !fir.type<_QFfooTt0{a0:i32,a1:i32}> {bindc_name = "a", uniq_name = "_QFfooEa"}
5
- ! CHECK: %[[V1:[0-9]+]]:2 = hlfir.declare %[[V0]] {uniq_name = "_QFfooEa"} : (!fir.ref<!fir.type<_QFfooTt0{a0:i32,a1:i32}>>) -> (!fir.ref<!fir.type<_QFfooTt0{a0:i32,a1:i32}>>, !fir.ref<!fir.type<_QFfooTt0{a0:i32,a1:i32}>>)
6
- ! CHECK: %[[V2:[0-9]+]] = hlfir.designate %[[V1]]#0{"a1"} : (!fir.ref<!fir.type<_QFfooTt0{a0:i32,a1:i32}>>) -> !fir.ref<i32>
4
+ ! CHECK-LABEL: func.func @_QPfoo1
5
+ ! CHECK: %[[V0:[0-9]+]] = fir.alloca !fir.type<_QFfoo1Tt0{a0:i32,a1:i32}> {bindc_name = "a", uniq_name = "_QFfoo1Ea"}
6
+ ! CHECK: %[[V1:[0-9]+]]:2 = hlfir.declare %[[V0]] {uniq_name = "_QFfoo1Ea"} : (!fir.ref<!fir.type<_QFfoo1Tt0{a0:i32,a1:i32}>>) -> (!fir.ref<!fir.type<_QFfoo1Tt0{a0:i32,a1:i32}>>, !fir.ref<!fir.type<_QFfoo1Tt0{a0:i32,a1:i32}>>)
7
+ ! CHECK: %[[V2:[0-9]+]] = hlfir.designate %[[V1]]#0{"a1"} : (!fir.ref<!fir.type<_QFfoo1Tt0{a0:i32,a1:i32}>>) -> !fir.ref<i32>
7
8
! CHECK: %[[V3:[0-9]+]] = omp.map.info var_ptr(%[[V2]] : !fir.ref<i32>, i32) map_clauses(tofrom) capture(ByRef) -> !fir.ref<i32> {name = "a%a1"}
8
- ! CHECK: %[[V4:[0-9]+]] = omp.map.info var_ptr(%[[V1]]#1 : !fir.ref<!fir.type<_QFfooTt0 {a0:i32,a1:i32}>>, !fir.type<_QFfooTt0 {a0:i32,a1:i32}>) map_clauses(tofrom) capture(ByRef) members(%[[V3]] : [1] : !fir.ref<i32>) -> !fir.ref<!fir.type<_QFfooTt0 {a0:i32,a1:i32}>> {name = "a", partial_map = true}
9
- ! CHECK: omp.target map_entries(%[[V3]] -> %arg0, %[[V4]] -> %arg1 : !fir.ref<i32>, !fir.ref<!fir.type<_QFfooTt0 {a0:i32,a1:i32}>>) {
10
- ! CHECK: ^bb0(%arg0: !fir.ref<i32>, %arg1: !fir.ref<!fir.type<_QFfooTt0 {a0:i32,a1:i32}>>):
11
- ! CHECK: %[[V5:[0-9]+]]:2 = hlfir.declare %arg1 {uniq_name = "_QFfooEa "} : (!fir.ref<!fir.type<_QFfooTt0 {a0:i32,a1:i32}>>) -> (!fir.ref<!fir.type<_QFfooTt0 {a0:i32,a1:i32}>>, !fir.ref<!fir.type<_QFfooTt0 {a0:i32,a1:i32}>>)
9
+ ! CHECK: %[[V4:[0-9]+]] = omp.map.info var_ptr(%[[V1]]#1 : !fir.ref<!fir.type<_QFfoo1Tt0 {a0:i32,a1:i32}>>, !fir.type<_QFfoo1Tt0 {a0:i32,a1:i32}>) map_clauses(tofrom) capture(ByRef) members(%[[V3]] : [1] : !fir.ref<i32>) -> !fir.ref<!fir.type<_QFfoo1Tt0 {a0:i32,a1:i32}>> {name = "a", partial_map = true}
10
+ ! CHECK: omp.target map_entries(%[[V3]] -> %arg0, %[[V4]] -> %arg1 : !fir.ref<i32>, !fir.ref<!fir.type<_QFfoo1Tt0 {a0:i32,a1:i32}>>) {
11
+ ! CHECK: ^bb0(%arg0: !fir.ref<i32>, %arg1: !fir.ref<!fir.type<_QFfoo1Tt0 {a0:i32,a1:i32}>>):
12
+ ! CHECK: %[[V5:[0-9]+]]:2 = hlfir.declare %arg1 {uniq_name = "_QFfoo1Ea "} : (!fir.ref<!fir.type<_QFfoo1Tt0 {a0:i32,a1:i32}>>) -> (!fir.ref<!fir.type<_QFfoo1Tt0 {a0:i32,a1:i32}>>, !fir.ref<!fir.type<_QFfoo1Tt0 {a0:i32,a1:i32}>>)
12
13
! CHECK: %c0_i32 = arith.constant 0 : i32
13
- ! CHECK: %[[V6:[0-9]+]] = hlfir.designate %[[V5]]#0{"a1"} : (!fir.ref<!fir.type<_QFfooTt0 {a0:i32,a1:i32}>>) -> !fir.ref<i32>
14
+ ! CHECK: %[[V6:[0-9]+]] = hlfir.designate %[[V5]]#0{"a1"} : (!fir.ref<!fir.type<_QFfoo1Tt0 {a0:i32,a1:i32}>>) -> !fir.ref<i32>
14
15
! CHECK: hlfir.assign %c0_i32 to %[[V6]] : i32, !fir.ref<i32>
15
16
! CHECK: omp.terminator
16
17
! CHECK: }
17
18
18
- subroutine foo ()
19
+ subroutine foo1 ()
19
20
implicit none
20
21
21
22
type t0
@@ -29,3 +30,25 @@ subroutine foo()
29
30
! $omp end target
30
31
end
31
32
33
+
34
+ ! CHECK-LABEL: func.func @_QPfoo2
35
+ ! CHECK-DAG: omp.map.info var_ptr(%{{[0-9]+}} : {{.*}} map_clauses(to) capture(ByRef) bounds(%{{[0-9]+}}) -> {{.*}} {name = "t%b(1_8)%a(1)"}
36
+ ! CHECK-DAG: omp.map.info var_ptr(%{{[0-9]+}} : {{.*}} map_clauses(from) capture(ByRef) bounds(%{{[0-9]+}}) -> {{.*}} {name = "u%b(1_8)%a(1)"}
37
+ subroutine foo2 ()
38
+ implicit none
39
+
40
+ type t0
41
+ integer :: a(10 )
42
+ end type
43
+
44
+ type t1
45
+ type (t0) :: b(10 )
46
+ end type
47
+
48
+ type (t1) :: t, u
49
+
50
+ ! $omp target map(to: t%b(1)%a(1)) map(from: u%b(1)%a(1))
51
+ t% b(1 )% a(1 ) = u% b(1 )% a(1 )
52
+ ! $omp end target
53
+
54
+ end
0 commit comments