@@ -18,14 +18,20 @@ subroutine pass_unlimited_poly_1d(x)
18
18
19
19
subroutine test_temp_from_intrinsic_spread ()
20
20
class(* ), pointer :: p
21
+ class(* ), pointer :: pa(:)
21
22
allocate (p2:: p)
23
+ allocate (p2:: pa(10 ))
22
24
23
25
call pass_unlimited_poly_1d(spread (p, dim= 1 , ncopies= 2 ))
26
+ call pass_unlimited_poly_1d(spread (pa(1 ), dim= 1 , ncopies= 2 ))
27
+
24
28
end subroutine
25
29
26
30
! CHECK-LABEL: func.func @_QMpoly_tmpPtest_temp_from_intrinsic_spread() {
27
- ! CHECK: %[[TEMP_RES:.*]] = fir.alloca !fir.class<!fir.heap<!fir.array<?xnone>>>
31
+ ! CHECK: %[[TEMP_RES1:.*]] = fir.alloca !fir.class<!fir.heap<!fir.array<?xnone>>>
32
+ ! CHECK: %[[TEMP_RES0:.*]] = fir.alloca !fir.class<!fir.heap<!fir.array<?xnone>>>
28
33
! CHECK: %[[P:.*]] = fir.alloca !fir.class<!fir.ptr<none>> {bindc_name = "p", uniq_name = "_QMpoly_tmpFtest_temp_from_intrinsic_spreadEp"}
34
+ ! CHECK: %[[PA:.*]] = fir.alloca !fir.class<!fir.ptr<!fir.array<?xnone>>> {bindc_name = "pa", uniq_name = "_QMpoly_tmpFtest_temp_from_intrinsic_spreadEpa"}
29
35
! CHECK: fir.call @_FortranAPointerNullifyDerived
30
36
! CHECK: fir.call @_FortranAPointerAllocate
31
37
! CHECK: %[[LOAD_P:.*]] = fir.load %[[P]] : !fir.ref<!fir.class<!fir.ptr<none>>>
@@ -36,16 +42,22 @@ subroutine test_temp_from_intrinsic_spread()
36
42
! CHECK: %[[SHAPE:.*]] = fir.shape %[[C0]] : (index) -> !fir.shape<1>
37
43
! Make sure the fir.embox contains the source_box pointing to the polymoprhic entity
38
44
! CHECK: %[[BOX_RES:.*]] = fir.embox %[[ZERO]](%[[SHAPE]]) source_box %[[LOAD_P]] : (!fir.heap<!fir.array<?xnone>>, !fir.shape<1>, !fir.class<!fir.ptr<none>>) -> !fir.class<!fir.heap<!fir.array<?xnone>>>
39
- ! CHECK: fir.store %[[BOX_RES]] to %[[TEMP_RES ]] : !fir.ref<!fir.class<!fir.heap<!fir.array<?xnone>>>>
40
- ! CHECK: %[[RES_BOX_NONE:.*]] = fir.convert %[[TEMP_RES ]] : (!fir.ref<!fir.class<!fir.heap<!fir.array<?xnone>>>>) -> !fir.ref<!fir.box<none>>
45
+ ! CHECK: fir.store %[[BOX_RES]] to %[[TEMP_RES0 ]] : !fir.ref<!fir.class<!fir.heap<!fir.array<?xnone>>>>
46
+ ! CHECK: %[[RES_BOX_NONE:.*]] = fir.convert %[[TEMP_RES0 ]] : (!fir.ref<!fir.class<!fir.heap<!fir.array<?xnone>>>>) -> !fir.ref<!fir.box<none>>
41
47
! CHECK: %[[P_BOX_NONE:.*]] = fir.convert %[[LOAD_P]] : (!fir.class<!fir.ptr<none>>) -> !fir.box<none>
42
48
! CHECK: %[[C2_I64:.*]] = fir.convert %[[C2]] : (i32) -> i64
43
49
! CHECK: %{{.*}} = fir.call @_FortranASpread(%[[RES_BOX_NONE]], %[[P_BOX_NONE]], %[[C1]], %[[C2_I64]], %{{.*}}, %{{.*}}) fastmath<contract> : (!fir.ref<!fir.box<none>>, !fir.box<none>, i32, i64, !fir.ref<i8>, i32) -> none
44
- ! CHECK: %[[LOAD_RES:.*]] = fir.load %[[TEMP_RES ]] : !fir.ref<!fir.class<!fir.heap<!fir.array<?xnone>>>>
50
+ ! CHECK: %[[LOAD_RES:.*]] = fir.load %[[TEMP_RES0 ]] : !fir.ref<!fir.class<!fir.heap<!fir.array<?xnone>>>>
45
51
! CHECK: %[[RES_ADDR:.*]] = fir.box_addr %[[LOAD_RES]] : (!fir.class<!fir.heap<!fir.array<?xnone>>>) -> !fir.heap<!fir.array<?xnone>>
46
52
! CHECK: %[[REBOX:.*]] = fir.rebox %[[LOAD_RES]] : (!fir.class<!fir.heap<!fir.array<?xnone>>>) -> !fir.class<!fir.array<?xnone>>
47
53
! CHECK: fir.call @_QMpoly_tmpPpass_unlimited_poly_1d(%[[REBOX]]) {{.*}} : (!fir.class<!fir.array<?xnone>>) -> ()
48
54
! CHECK: fir.freemem %[[RES_ADDR]] : !fir.heap<!fir.array<?xnone>>
55
+ ! CHECK: %[[LOAD_PA:.*]] = fir.load %[[PA]] : !fir.ref<!fir.class<!fir.ptr<!fir.array<?xnone>>>>
56
+ ! CHECK: %[[COORD_PA_1:.*]] = fir.coordinate_of %[[LOAD_PA]], %{{.*}} : (!fir.class<!fir.ptr<!fir.array<?xnone>>>, i64) -> !fir.ref<none>
57
+ ! CHECK: %[[EMBOX_PA_1:.*]] = fir.embox %[[COORD_PA_1]] source_box %[[LOAD_PA]] : (!fir.ref<none>, !fir.class<!fir.ptr<!fir.array<?xnone>>>) -> !fir.class<none>
58
+ ! CHECK: %[[RES1_BOX_NONE:.*]] = fir.convert %[[TEMP_RES1]] : (!fir.ref<!fir.class<!fir.heap<!fir.array<?xnone>>>>) -> !fir.ref<!fir.box<none>>
59
+ ! CHECK: %[[PA1_BOX_NONE:.*]] = fir.convert %[[EMBOX_PA_1]] : (!fir.class<none>) -> !fir.box<none>
60
+ ! CHECK: %{{.*}} = fir.call @_FortranASpread(%[[RES1_BOX_NONE]], %[[PA1_BOX_NONE]], %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) {{.*}} : (!fir.ref<!fir.box<none>>, !fir.box<none>, i32, i64, !fir.ref<i8>, i32) -> none
49
61
50
62
subroutine test_temp_from_intrinsic_reshape (i )
51
63
class(* ), allocatable :: a(:,:)
0 commit comments