1656b8d6cSValentin Clement! RUN: bbc %s -o - | FileCheck %s
2656b8d6cSValentin Clement
3656b8d6cSValentin Clement! CHECK-LABEL: func @_QPss1()
4656b8d6cSValentin Clementsubroutine ss1
5656b8d6cSValentin Clement  ! CHECK: %[[aa:[0-9]+]] = fir.alloca !fir.array<2650000xf32> {bindc_name = "aa", uniq_name = "_QFss1Eaa"}
6656b8d6cSValentin Clement  ! CHECK: %[[shape:[0-9]+]] = fir.shape {{.*}} : (index) -> !fir.shape<1>
7656b8d6cSValentin Clement  integer, parameter :: N = 2650000
8656b8d6cSValentin Clement  real aa(N)
9656b8d6cSValentin Clement  ! CHECK: fir.array_coor %[[aa]](%[[shape]]) {{.*}} : (!fir.ref<!fir.array<2650000xf32>>, !fir.shape<1>, index) -> !fir.ref<f32>
10656b8d6cSValentin Clement  aa = -2
11656b8d6cSValentin Clement  ! CHECK: %[[temp:[0-9]+]] = fir.allocmem !fir.array<2650000xf32>
12656b8d6cSValentin Clement  ! CHECK: fir.array_coor %[[aa]](%[[shape]]) {{.*}} : (!fir.ref<!fir.array<2650000xf32>>, !fir.shape<1>, index) -> !fir.ref<f32>
13656b8d6cSValentin Clement  ! CHECK: fir.array_coor %[[temp]](%[[shape]]) {{.*}} : (!fir.heap<!fir.array<2650000xf32>>, !fir.shape<1>, index) -> !fir.ref<f32>
14656b8d6cSValentin Clement  ! CHECK: fir.array_coor %[[aa]](%[[shape]]) [{{.*}}] {{.*}} : (!fir.ref<!fir.array<2650000xf32>>, !fir.shape<1>, !fir.slice<1>, index) -> !fir.ref<f32>
15656b8d6cSValentin Clement  ! CHECK: fir.array_coor %[[temp]](%[[shape]]) [{{.*}}] {{.*}} : (!fir.heap<!fir.array<2650000xf32>>, !fir.shape<1>, !fir.slice<1>, index) -> !fir.ref<f32>
16656b8d6cSValentin Clement  ! CHECK: fir.array_coor %[[temp]](%[[shape]]) {{.*}} : (!fir.heap<!fir.array<2650000xf32>>, !fir.shape<1>, index) -> !fir.ref<f32>
17656b8d6cSValentin Clement  ! CHECK: fir.array_coor %[[aa]](%[[shape]]) {{.*}} : (!fir.ref<!fir.array<2650000xf32>>, !fir.shape<1>, index) -> !fir.ref<f32>
18656b8d6cSValentin Clement  ! CHECK: fir.freemem %[[temp]] : !fir.heap<!fir.array<2650000xf32>>
19656b8d6cSValentin Clement  aa(2:N) = aa(1:N-1) + 7.0
20656b8d6cSValentin Clement! print*, aa(1:2), aa(N-1:N)
21656b8d6cSValentin Clementend
22656b8d6cSValentin Clement
23656b8d6cSValentin Clementsubroutine ss2(N)
24656b8d6cSValentin Clement  real aa(N)
25656b8d6cSValentin Clement  aa = -2
26656b8d6cSValentin Clement  aa(2:N) = aa(1:N-1) + 7.0
27656b8d6cSValentin Clement  print*, aa(1:2), aa(N-1:N)
28656b8d6cSValentin Clementend
29656b8d6cSValentin Clement
30656b8d6cSValentin Clementsubroutine ss3(N)
31656b8d6cSValentin Clement  real aa(2,N)
32656b8d6cSValentin Clement  aa = -2
33656b8d6cSValentin Clement  aa(:,2:N) = aa(:,1:N-1) + 7.0
34656b8d6cSValentin Clement  print*, aa(:,1:2), aa(:,N-1:N)
35656b8d6cSValentin Clementend
36656b8d6cSValentin Clement
37656b8d6cSValentin Clementsubroutine ss4(N)
38656b8d6cSValentin Clement  real aa(N,2)
39656b8d6cSValentin Clement  aa = -2
40656b8d6cSValentin Clement  aa(2:N,:) = aa(1:N-1,:) + 7.0
41656b8d6cSValentin Clement  print*, aa(1:2,:), aa(N-1:N,:)
42656b8d6cSValentin Clementend
43656b8d6cSValentin Clement
44656b8d6cSValentin Clement! CHECK-LABEL: func @_QPss2(
45656b8d6cSValentin Clement! CHECK-SAME:               %[[VAL_0:.*]]: !fir.ref<i32> {fir.bindc_name = "n"}) {
46656b8d6cSValentin Clement! CHECK-DAG:     %[[VAL_1:.*]] = arith.constant -1 : index
47656b8d6cSValentin Clement! CHECK-DAG:     %[[VAL_2:.*]] = arith.constant -2 : i32
48656b8d6cSValentin Clement! CHECK-DAG:     %[[VAL_3:.*]] = arith.constant 1 : index
49656b8d6cSValentin Clement! CHECK-DAG:     %[[VAL_4:.*]] = arith.constant 0 : index
50656b8d6cSValentin Clement! CHECK-DAG:     %[[VAL_5:.*]] = arith.constant 2 : index
51656b8d6cSValentin Clement! CHECK-DAG:     %[[VAL_6:.*]] = arith.constant 1 : i32
52656b8d6cSValentin Clement! CHECK-DAG:     %[[VAL_7:.*]] = arith.constant 7.000000e+00 : f32
53656b8d6cSValentin Clement! CHECK-DAG:     %[[VAL_8:.*]] = arith.constant -1 : i32
54656b8d6cSValentin Clement! CHECK:         %[[VAL_10:.*]] = fir.load %[[VAL_0]] : !fir.ref<i32>
55656b8d6cSValentin Clement! CHECK:         %[[VAL_11A:.*]] = fir.convert %[[VAL_10]] : (i32) -> index
56656b8d6cSValentin Clement! CHECK:         %[[CMP:.*]] = arith.cmpi sgt, %[[VAL_11A]], %[[VAL_4]] : index
57656b8d6cSValentin Clement! CHECK:         %[[VAL_11:.*]] = arith.select %[[CMP]], %[[VAL_11A]], %[[VAL_4]] : index
58656b8d6cSValentin Clement! CHECK:         %[[VAL_12:.*]] = fir.alloca !fir.array<?xf32>, %[[VAL_11]] {bindc_name = "aa", uniq_name = "_QFss2Eaa"}
59656b8d6cSValentin Clement! CHECK:         %[[VAL_13:.*]] = fir.shape %[[VAL_11]] : (index) -> !fir.shape<1>
60656b8d6cSValentin Clement! CHECK:         %[[VAL_14:.*]] = fir.convert %[[VAL_2]] : (i32) -> f32
61656b8d6cSValentin Clement! CHECK:         br ^bb1(%[[VAL_4]], %[[VAL_11]] : index, index)
62656b8d6cSValentin Clement! CHECK:       ^bb1(%[[VAL_15:.*]]: index, %[[VAL_16:.*]]: index):
63656b8d6cSValentin Clement! CHECK:         %[[VAL_17:.*]] = arith.cmpi sgt, %[[VAL_16]], %[[VAL_4]] : index
64656b8d6cSValentin Clement! CHECK:         cond_br %[[VAL_17]], ^bb2, ^bb3
65656b8d6cSValentin Clement! CHECK:       ^bb2:
66656b8d6cSValentin Clement! CHECK:         %[[VAL_18:.*]] = arith.addi %[[VAL_15]], %[[VAL_3]] : index
67656b8d6cSValentin Clement! CHECK:         %[[VAL_19:.*]] = fir.array_coor %[[VAL_12]](%[[VAL_13]]) %[[VAL_18]] : (!fir.ref<!fir.array<?xf32>>, !fir.shape<1>, index) -> !fir.ref<f32>
68656b8d6cSValentin Clement! CHECK:         fir.store %[[VAL_14]] to %[[VAL_19]] : !fir.ref<f32>
69656b8d6cSValentin Clement! CHECK:         %[[VAL_20:.*]] = arith.subi %[[VAL_16]], %[[VAL_3]] : index
70656b8d6cSValentin Clement! CHECK:         br ^bb1(%[[VAL_18]], %[[VAL_20]] : index, index)
71656b8d6cSValentin Clement! CHECK:       ^bb3:
72656b8d6cSValentin Clement! CHECK:         %[[VAL_21:.*]] = fir.load %[[VAL_0]] : !fir.ref<i32>
73656b8d6cSValentin Clement! CHECK:         %[[VAL_22:.*]] = fir.convert %[[VAL_21]] : (i32) -> index
74656b8d6cSValentin Clement! CHECK:         %[[VAL_23:.*]] = arith.addi %[[VAL_22]], %[[VAL_1]] : index
75656b8d6cSValentin Clement! CHECK:         %[[VAL_24:.*]] = arith.cmpi sgt, %[[VAL_23]], %[[VAL_4]] : index
76656b8d6cSValentin Clement! CHECK:         %[[VAL_25:.*]] = arith.select %[[VAL_24]], %[[VAL_23]], %[[VAL_4]] : index
77656b8d6cSValentin Clement! CHECK:         %[[VAL_26:.*]] = fir.slice %[[VAL_5]], %[[VAL_22]], %[[VAL_3]] : (index, index, index) -> !fir.slice<1>
78656b8d6cSValentin Clement! CHECK:         %[[VAL_27:.*]] = fir.allocmem !fir.array<?xf32>, %[[VAL_11]]
79656b8d6cSValentin Clement! CHECK:         br ^bb4(%[[VAL_4]], %[[VAL_11]] : index, index)
80656b8d6cSValentin Clement! CHECK:       ^bb4(%[[VAL_28:.*]]: index, %[[VAL_29:.*]]: index):
81656b8d6cSValentin Clement! CHECK:         %[[VAL_30:.*]] = arith.cmpi sgt, %[[VAL_29]], %[[VAL_4]] : index
82656b8d6cSValentin Clement! CHECK:         cond_br %[[VAL_30]], ^bb5, ^bb6
83656b8d6cSValentin Clement! CHECK:       ^bb5:
84656b8d6cSValentin Clement! CHECK:         %[[VAL_31:.*]] = arith.addi %[[VAL_28]], %[[VAL_3]] : index
85656b8d6cSValentin Clement! CHECK:         %[[VAL_32:.*]] = fir.array_coor %[[VAL_12]](%[[VAL_13]]) %[[VAL_31]] : (!fir.ref<!fir.array<?xf32>>, !fir.shape<1>, index) -> !fir.ref<f32>
86656b8d6cSValentin Clement! CHECK:         %[[VAL_33:.*]] = fir.array_coor %[[VAL_27]](%[[VAL_13]]) %[[VAL_31]] : (!fir.heap<!fir.array<?xf32>>, !fir.shape<1>, index) -> !fir.ref<f32>
87656b8d6cSValentin Clement! CHECK:         %[[VAL_34:.*]] = fir.load %[[VAL_32]] : !fir.ref<f32>
88656b8d6cSValentin Clement! CHECK:         fir.store %[[VAL_34]] to %[[VAL_33]] : !fir.ref<f32>
89656b8d6cSValentin Clement! CHECK:         %[[VAL_35:.*]] = arith.subi %[[VAL_29]], %[[VAL_3]] : index
90656b8d6cSValentin Clement! CHECK:         br ^bb4(%[[VAL_31]], %[[VAL_35]] : index, index)
91656b8d6cSValentin Clement! CHECK:       ^bb6:
92656b8d6cSValentin Clement! CHECK:         %[[VAL_36:.*]] = arith.subi %[[VAL_21]], %[[VAL_6]] : i32
93656b8d6cSValentin Clement! CHECK:         %[[VAL_37:.*]] = fir.convert %[[VAL_36]] : (i32) -> index
94656b8d6cSValentin Clement! CHECK:         %[[VAL_38:.*]] = fir.slice %[[VAL_3]], %[[VAL_37]], %[[VAL_3]] : (index, index, index) -> !fir.slice<1>
95656b8d6cSValentin Clement! CHECK:         br ^bb7(%[[VAL_4]], %[[VAL_25]] : index, index)
96656b8d6cSValentin Clement! CHECK:       ^bb7(%[[VAL_39:.*]]: index, %[[VAL_40:.*]]: index):
97656b8d6cSValentin Clement! CHECK:         %[[VAL_41:.*]] = arith.cmpi sgt, %[[VAL_40]], %[[VAL_4]] : index
98656b8d6cSValentin Clement! CHECK:         cond_br %[[VAL_41]], ^bb8, ^bb9(%[[VAL_4]], %[[VAL_11]] : index, index)
99656b8d6cSValentin Clement! CHECK:       ^bb8:
100656b8d6cSValentin Clement! CHECK:         %[[VAL_42:.*]] = arith.addi %[[VAL_39]], %[[VAL_3]] : index
101656b8d6cSValentin Clement! CHECK:         %[[VAL_43:.*]] = fir.array_coor %[[VAL_12]](%[[VAL_13]]) {{\[}}%[[VAL_38]]] %[[VAL_42]] : (!fir.ref<!fir.array<?xf32>>, !fir.shape<1>, !fir.slice<1>, index) -> !fir.ref<f32>
102656b8d6cSValentin Clement! CHECK:         %[[VAL_44:.*]] = fir.load %[[VAL_43]] : !fir.ref<f32>
103656b8d6cSValentin Clement! CHECK:         %[[VAL_45:.*]] = arith.addf %[[VAL_44]], %[[VAL_7]] : f32
104656b8d6cSValentin Clement! CHECK:         %[[VAL_46:.*]] = fir.array_coor %[[VAL_27]](%[[VAL_13]]) {{\[}}%[[VAL_26]]] %[[VAL_42]] : (!fir.heap<!fir.array<?xf32>>, !fir.shape<1>, !fir.slice<1>, index) -> !fir.ref<f32>
105656b8d6cSValentin Clement! CHECK:         fir.store %[[VAL_45]] to %[[VAL_46]] : !fir.ref<f32>
106656b8d6cSValentin Clement! CHECK:         %[[VAL_47:.*]] = arith.subi %[[VAL_40]], %[[VAL_3]] : index
107656b8d6cSValentin Clement! CHECK:         br ^bb7(%[[VAL_42]], %[[VAL_47]] : index, index)
108656b8d6cSValentin Clement! CHECK:       ^bb9(%[[VAL_48:.*]]: index, %[[VAL_49:.*]]: index):
109656b8d6cSValentin Clement! CHECK:         %[[VAL_50:.*]] = arith.cmpi sgt, %[[VAL_49]], %[[VAL_4]] : index
110656b8d6cSValentin Clement! CHECK:         cond_br %[[VAL_50]], ^bb10, ^bb11
111656b8d6cSValentin Clement! CHECK:       ^bb10:
112656b8d6cSValentin Clement! CHECK:         %[[VAL_51:.*]] = arith.addi %[[VAL_48]], %[[VAL_3]] : index
113656b8d6cSValentin Clement! CHECK:         %[[VAL_52:.*]] = fir.array_coor %[[VAL_27]](%[[VAL_13]]) %[[VAL_51]] : (!fir.heap<!fir.array<?xf32>>, !fir.shape<1>, index) -> !fir.ref<f32>
114656b8d6cSValentin Clement! CHECK:         %[[VAL_53:.*]] = fir.array_coor %[[VAL_12]](%[[VAL_13]]) %[[VAL_51]] : (!fir.ref<!fir.array<?xf32>>, !fir.shape<1>, index) -> !fir.ref<f32>
115656b8d6cSValentin Clement! CHECK:         %[[VAL_54:.*]] = fir.load %[[VAL_52]] : !fir.ref<f32>
116656b8d6cSValentin Clement! CHECK:         fir.store %[[VAL_54]] to %[[VAL_53]] : !fir.ref<f32>
117656b8d6cSValentin Clement! CHECK:         %[[VAL_55:.*]] = arith.subi %[[VAL_49]], %[[VAL_3]] : index
118656b8d6cSValentin Clement! CHECK:         br ^bb9(%[[VAL_51]], %[[VAL_55]] : index, index)
119656b8d6cSValentin Clement! CHECK:       ^bb11:
120656b8d6cSValentin Clement! CHECK:         fir.freemem %[[VAL_27]] : !fir.heap<!fir.array<?xf32>>
121656b8d6cSValentin Clement! CHECK:         %[[VAL_58:.*]] = fir.call @_FortranAioBeginExternalListOutput(%[[VAL_8]], %{{.*}}, %{{.*}}) : (i32, !fir.ref<i8>, i32) -> !fir.ref<i8>
122656b8d6cSValentin Clement! CHECK:         %[[VAL_59:.*]] = fir.slice %[[VAL_3]], %[[VAL_5]], %[[VAL_3]] : (index, index, index) -> !fir.slice<1>
123*13f9089aSPeixin Qiao! CHECK:         %[[VAL_60:.*]] = fir.embox %[[VAL_12]](%[[VAL_13]]) {{\[}}%[[VAL_59]]] : (!fir.ref<!fir.array<?xf32>>, !fir.shape<1>, !fir.slice<1>) -> !fir.box<!fir.array<2xf32>>
124*13f9089aSPeixin Qiao! CHECK:         %[[VAL_61:.*]] = fir.convert %[[VAL_60]] : (!fir.box<!fir.array<2xf32>>) -> !fir.box<none>
125656b8d6cSValentin Clement! CHECK:         %[[VAL_62:.*]] = fir.call @_FortranAioOutputDescriptor(%[[VAL_58]], %[[VAL_61]]) : (!fir.ref<i8>, !fir.box<none>) -> i1
126656b8d6cSValentin Clement! CHECK:         %[[VAL_63:.*]] = fir.load %[[VAL_0]] : !fir.ref<i32>
127656b8d6cSValentin Clement! CHECK:         %[[VAL_64:.*]] = arith.subi %[[VAL_63]], %[[VAL_6]] : i32
128656b8d6cSValentin Clement! CHECK:         %[[VAL_65:.*]] = fir.convert %[[VAL_64]] : (i32) -> index
129656b8d6cSValentin Clement! CHECK:         %[[VAL_66:.*]] = fir.convert %[[VAL_63]] : (i32) -> index
130656b8d6cSValentin Clement! CHECK:         %[[VAL_67:.*]] = fir.slice %[[VAL_65]], %[[VAL_66]], %[[VAL_3]] : (index, index, index) -> !fir.slice<1>
131656b8d6cSValentin Clement! CHECK:         %[[VAL_68:.*]] = fir.embox %[[VAL_12]](%[[VAL_13]]) {{\[}}%[[VAL_67]]] : (!fir.ref<!fir.array<?xf32>>, !fir.shape<1>, !fir.slice<1>) -> !fir.box<!fir.array<?xf32>>
132656b8d6cSValentin Clement! CHECK:         %[[VAL_69:.*]] = fir.convert %[[VAL_68]] : (!fir.box<!fir.array<?xf32>>) -> !fir.box<none>
133656b8d6cSValentin Clement! CHECK:         %[[VAL_70:.*]] = fir.call @_FortranAioOutputDescriptor(%[[VAL_58]], %[[VAL_69]]) : (!fir.ref<i8>, !fir.box<none>) -> i1
134656b8d6cSValentin Clement! CHECK:         %[[VAL_71:.*]] = fir.call @_FortranAioEndIoStatement(%[[VAL_58]]) : (!fir.ref<i8>) -> i32
135656b8d6cSValentin Clement! CHECK:         return
136656b8d6cSValentin Clement! CHECK:       }
137656b8d6cSValentin Clement
138656b8d6cSValentin Clement! CHECK-LABEL: func @_QPss3(
139656b8d6cSValentin Clement! CHECK-SAME:               %[[VAL_0:.*]]: !fir.ref<i32> {fir.bindc_name = "n"}) {
140656b8d6cSValentin Clement! CHECK-DAG:     %[[VAL_1:.*]] = arith.constant -1 : index
141656b8d6cSValentin Clement! CHECK-DAG:     %[[VAL_2:.*]] = arith.constant 2 : index
142656b8d6cSValentin Clement! CHECK-DAG:     %[[VAL_3:.*]] = arith.constant 1 : index
143656b8d6cSValentin Clement! CHECK-DAG:     %[[VAL_4:.*]] = arith.constant -2 : i32
144656b8d6cSValentin Clement! CHECK-DAG:     %[[VAL_5:.*]] = arith.constant 0 : index
145656b8d6cSValentin Clement! CHECK-DAG:     %[[VAL_6:.*]] = arith.constant 1 : i32
146656b8d6cSValentin Clement! CHECK-DAG:     %[[VAL_7:.*]] = arith.constant 7.000000e+00 : f32
147656b8d6cSValentin Clement! CHECK-DAG:     %[[VAL_8:.*]] = arith.constant -1 : i32
148656b8d6cSValentin Clement! CHECK:         %[[VAL_10:.*]] = fir.load %[[VAL_0]] : !fir.ref<i32>
149656b8d6cSValentin Clement! CHECK:         %[[VAL_11:.*]] = fir.convert %[[VAL_10]] : (i32) -> index
150656b8d6cSValentin Clement! CHECK:         %[[CMP:.*]] = arith.cmpi sgt, %[[VAL_11A]], %[[VAL_5]] : index
151656b8d6cSValentin Clement! CHECK:         %[[VAL_11:.*]] = arith.select %[[CMP]], %[[VAL_11A]], %[[VAL_5]] : index
152656b8d6cSValentin Clement! CHECK:         %[[VAL_12:.*]] = fir.alloca !fir.array<2x?xf32>, %[[VAL_11]] {bindc_name = "aa", uniq_name = "_QFss3Eaa"}
153656b8d6cSValentin Clement! CHECK:         %[[VAL_13:.*]] = fir.shape %[[VAL_2]], %[[VAL_11]] : (index, index) -> !fir.shape<2>
154656b8d6cSValentin Clement! CHECK:         %[[VAL_14:.*]] = fir.convert %[[VAL_4]] : (i32) -> f32
155656b8d6cSValentin Clement! CHECK:         br ^bb1(%[[VAL_5]], %[[VAL_11]] : index, index)
156656b8d6cSValentin Clement! CHECK:       ^bb1(%[[VAL_15:.*]]: index, %[[VAL_16:.*]]: index):
157656b8d6cSValentin Clement! CHECK:         %[[VAL_17:.*]] = arith.cmpi sgt, %[[VAL_16]], %[[VAL_5]] : index
158656b8d6cSValentin Clement! CHECK:         cond_br %[[VAL_17]], ^bb2(%[[VAL_5]], %[[VAL_2]] : index, index), ^bb5
159656b8d6cSValentin Clement! CHECK:       ^bb2(%[[VAL_18:.*]]: index, %[[VAL_19:.*]]: index):
160656b8d6cSValentin Clement! CHECK:         %[[VAL_20:.*]] = arith.cmpi sgt, %[[VAL_19]], %[[VAL_5]] : index
161656b8d6cSValentin Clement! CHECK:         cond_br %[[VAL_20]], ^bb3, ^bb4
162656b8d6cSValentin Clement! CHECK:       ^bb3:
163656b8d6cSValentin Clement! CHECK:         %[[VAL_21:.*]] = arith.addi %[[VAL_18]], %[[VAL_3]] : index
164656b8d6cSValentin Clement! CHECK:         %[[VAL_22:.*]] = arith.addi %[[VAL_15]], %[[VAL_3]] : index
165656b8d6cSValentin Clement! CHECK:         %[[VAL_23:.*]] = fir.array_coor %[[VAL_12]](%[[VAL_13]]) %[[VAL_21]], %[[VAL_22]] : (!fir.ref<!fir.array<2x?xf32>>, !fir.shape<2>, index, index) -> !fir.ref<f32>
166656b8d6cSValentin Clement! CHECK:         fir.store %[[VAL_14]] to %[[VAL_23]] : !fir.ref<f32>
167656b8d6cSValentin Clement! CHECK:         %[[VAL_24:.*]] = arith.subi %[[VAL_19]], %[[VAL_3]] : index
168656b8d6cSValentin Clement! CHECK:         br ^bb2(%[[VAL_21]], %[[VAL_24]] : index, index)
169656b8d6cSValentin Clement! CHECK:       ^bb4:
170656b8d6cSValentin Clement! CHECK:         %[[VAL_25:.*]] = arith.addi %[[VAL_15]], %[[VAL_3]] : index
171656b8d6cSValentin Clement! CHECK:         %[[VAL_26:.*]] = arith.subi %[[VAL_16]], %[[VAL_3]] : index
172656b8d6cSValentin Clement! CHECK:         br ^bb1(%[[VAL_25]], %[[VAL_26]] : index, index)
173656b8d6cSValentin Clement! CHECK:       ^bb5:
174656b8d6cSValentin Clement! CHECK:         %[[VAL_27:.*]] = fir.load %[[VAL_0]] : !fir.ref<i32>
175656b8d6cSValentin Clement! CHECK:         %[[VAL_28:.*]] = fir.convert %[[VAL_27]] : (i32) -> index
176656b8d6cSValentin Clement! CHECK:         %[[VAL_29:.*]] = arith.addi %[[VAL_28]], %[[VAL_1]] : index
177656b8d6cSValentin Clement! CHECK:         %[[VAL_30:.*]] = arith.cmpi sgt, %[[VAL_29]], %[[VAL_5]] : index
178656b8d6cSValentin Clement! CHECK:         %[[VAL_31:.*]] = arith.select %[[VAL_30]], %[[VAL_29]], %[[VAL_5]] : index
179656b8d6cSValentin Clement! CHECK:         %[[VAL_32:.*]] = fir.slice %[[VAL_3]], %[[VAL_2]], %[[VAL_3]], %[[VAL_2]], %[[VAL_28]], %[[VAL_3]] : (index, index, index, index, index, index) -> !fir.slice<2>
180656b8d6cSValentin Clement! CHECK:         %[[VAL_33:.*]] = fir.allocmem !fir.array<2x?xf32>, %[[VAL_11]]
181656b8d6cSValentin Clement! CHECK:         br ^bb6(%[[VAL_5]], %[[VAL_11]] : index, index)
182656b8d6cSValentin Clement! CHECK:       ^bb6(%[[VAL_34:.*]]: index, %[[VAL_35:.*]]: index):
183656b8d6cSValentin Clement! CHECK:         %[[VAL_36:.*]] = arith.cmpi sgt, %[[VAL_35]], %[[VAL_5]] : index
184656b8d6cSValentin Clement! CHECK:         cond_br %[[VAL_36]], ^bb7(%[[VAL_5]], %[[VAL_2]] : index, index), ^bb10
185656b8d6cSValentin Clement! CHECK:       ^bb7(%[[VAL_37:.*]]: index, %[[VAL_38:.*]]: index):
186656b8d6cSValentin Clement! CHECK:         %[[VAL_39:.*]] = arith.cmpi sgt, %[[VAL_38]], %[[VAL_5]] : index
187656b8d6cSValentin Clement! CHECK:         cond_br %[[VAL_39]], ^bb8, ^bb9
188656b8d6cSValentin Clement! CHECK:       ^bb8:
189656b8d6cSValentin Clement! CHECK:         %[[VAL_40:.*]] = arith.addi %[[VAL_37]], %[[VAL_3]] : index
190656b8d6cSValentin Clement! CHECK:         %[[VAL_41:.*]] = arith.addi %[[VAL_34]], %[[VAL_3]] : index
191656b8d6cSValentin Clement! CHECK:         %[[VAL_42:.*]] = fir.array_coor %[[VAL_12]](%[[VAL_13]]) %[[VAL_40]], %[[VAL_41]] : (!fir.ref<!fir.array<2x?xf32>>, !fir.shape<2>, index, index) -> !fir.ref<f32>
192656b8d6cSValentin Clement! CHECK:         %[[VAL_43:.*]] = fir.array_coor %[[VAL_33]](%[[VAL_13]]) %[[VAL_40]], %[[VAL_41]] : (!fir.heap<!fir.array<2x?xf32>>, !fir.shape<2>, index, index) -> !fir.ref<f32>
193656b8d6cSValentin Clement! CHECK:         %[[VAL_44:.*]] = fir.load %[[VAL_42]] : !fir.ref<f32>
194656b8d6cSValentin Clement! CHECK:         fir.store %[[VAL_44]] to %[[VAL_43]] : !fir.ref<f32>
195656b8d6cSValentin Clement! CHECK:         %[[VAL_45:.*]] = arith.subi %[[VAL_38]], %[[VAL_3]] : index
196656b8d6cSValentin Clement! CHECK:         br ^bb7(%[[VAL_40]], %[[VAL_45]] : index, index)
197656b8d6cSValentin Clement! CHECK:       ^bb9:
198656b8d6cSValentin Clement! CHECK:         %[[VAL_46:.*]] = arith.addi %[[VAL_34]], %[[VAL_3]] : index
199656b8d6cSValentin Clement! CHECK:         %[[VAL_47:.*]] = arith.subi %[[VAL_35]], %[[VAL_3]] : index
200656b8d6cSValentin Clement! CHECK:         br ^bb6(%[[VAL_46]], %[[VAL_47]] : index, index)
201656b8d6cSValentin Clement! CHECK:       ^bb10:
202656b8d6cSValentin Clement! CHECK:         %[[VAL_48:.*]] = arith.subi %[[VAL_27]], %[[VAL_6]] : i32
203656b8d6cSValentin Clement! CHECK:         %[[VAL_49:.*]] = fir.convert %[[VAL_48]] : (i32) -> index
204656b8d6cSValentin Clement! CHECK:         %[[VAL_50:.*]] = fir.slice %[[VAL_3]], %[[VAL_2]], %[[VAL_3]], %[[VAL_3]], %[[VAL_49]], %[[VAL_3]] : (index, index, index, index, index, index) -> !fir.slice<2>
205656b8d6cSValentin Clement! CHECK:         br ^bb11(%[[VAL_5]], %[[VAL_31]] : index, index)
206656b8d6cSValentin Clement! CHECK:       ^bb11(%[[VAL_51:.*]]: index, %[[VAL_52:.*]]: index):
207656b8d6cSValentin Clement! CHECK:         %[[VAL_53:.*]] = arith.cmpi sgt, %[[VAL_52]], %[[VAL_5]] : index
208656b8d6cSValentin Clement! CHECK:         cond_br %[[VAL_53]], ^bb12(%[[VAL_5]], %[[VAL_2]] : index, index), ^bb15(%[[VAL_5]], %[[VAL_11]] : index, index)
209656b8d6cSValentin Clement! CHECK:       ^bb12(%[[VAL_54:.*]]: index, %[[VAL_55:.*]]: index):
210656b8d6cSValentin Clement! CHECK:         %[[VAL_56:.*]] = arith.cmpi sgt, %[[VAL_55]], %[[VAL_5]] : index
211656b8d6cSValentin Clement! CHECK:         cond_br %[[VAL_56]], ^bb13, ^bb14
212656b8d6cSValentin Clement! CHECK:       ^bb13:
213656b8d6cSValentin Clement! CHECK:         %[[VAL_57:.*]] = arith.addi %[[VAL_54]], %[[VAL_3]] : index
214656b8d6cSValentin Clement! CHECK:         %[[VAL_58:.*]] = arith.addi %[[VAL_51]], %[[VAL_3]] : index
215656b8d6cSValentin Clement! CHECK:         %[[VAL_59:.*]] = fir.array_coor %[[VAL_12]](%[[VAL_13]]) {{\[}}%[[VAL_50]]] %[[VAL_57]], %[[VAL_58]] : (!fir.ref<!fir.array<2x?xf32>>, !fir.shape<2>, !fir.slice<2>, index, index) -> !fir.ref<f32>
216656b8d6cSValentin Clement! CHECK:         %[[VAL_60:.*]] = fir.load %[[VAL_59]] : !fir.ref<f32>
217656b8d6cSValentin Clement! CHECK:         %[[VAL_61:.*]] = arith.addf %[[VAL_60]], %[[VAL_7]] : f32
218656b8d6cSValentin Clement! CHECK:         %[[VAL_62:.*]] = fir.array_coor %[[VAL_33]](%[[VAL_13]]) {{\[}}%[[VAL_32]]] %[[VAL_57]], %[[VAL_58]] : (!fir.heap<!fir.array<2x?xf32>>, !fir.shape<2>, !fir.slice<2>, index, index) -> !fir.ref<f32>
219656b8d6cSValentin Clement! CHECK:         fir.store %[[VAL_61]] to %[[VAL_62]] : !fir.ref<f32>
220656b8d6cSValentin Clement! CHECK:         %[[VAL_63:.*]] = arith.subi %[[VAL_55]], %[[VAL_3]] : index
221656b8d6cSValentin Clement! CHECK:         br ^bb12(%[[VAL_57]], %[[VAL_63]] : index, index)
222656b8d6cSValentin Clement! CHECK:       ^bb14:
223656b8d6cSValentin Clement! CHECK:         %[[VAL_64:.*]] = arith.addi %[[VAL_51]], %[[VAL_3]] : index
224656b8d6cSValentin Clement! CHECK:         %[[VAL_65:.*]] = arith.subi %[[VAL_52]], %[[VAL_3]] : index
225656b8d6cSValentin Clement! CHECK:         br ^bb11(%[[VAL_64]], %[[VAL_65]] : index, index)
226656b8d6cSValentin Clement! CHECK:       ^bb15(%[[VAL_66:.*]]: index, %[[VAL_67:.*]]: index):
227656b8d6cSValentin Clement! CHECK:         %[[VAL_68:.*]] = arith.cmpi sgt, %[[VAL_67]], %[[VAL_5]] : index
228656b8d6cSValentin Clement! CHECK:         cond_br %[[VAL_68]], ^bb16(%[[VAL_5]], %[[VAL_2]] : index, index), ^bb19
229656b8d6cSValentin Clement! CHECK:       ^bb16(%[[VAL_69:.*]]: index, %[[VAL_70:.*]]: index):
230656b8d6cSValentin Clement! CHECK:         %[[VAL_71:.*]] = arith.cmpi sgt, %[[VAL_70]], %[[VAL_5]] : index
231656b8d6cSValentin Clement! CHECK:         cond_br %[[VAL_71]], ^bb17, ^bb18
232656b8d6cSValentin Clement! CHECK:       ^bb17:
233656b8d6cSValentin Clement! CHECK:         %[[VAL_72:.*]] = arith.addi %[[VAL_69]], %[[VAL_3]] : index
234656b8d6cSValentin Clement! CHECK:         %[[VAL_73:.*]] = arith.addi %[[VAL_66]], %[[VAL_3]] : index
235656b8d6cSValentin Clement! CHECK:         %[[VAL_74:.*]] = fir.array_coor %[[VAL_33]](%[[VAL_13]]) %[[VAL_72]], %[[VAL_73]] : (!fir.heap<!fir.array<2x?xf32>>, !fir.shape<2>, index, index) -> !fir.ref<f32>
236656b8d6cSValentin Clement! CHECK:         %[[VAL_75:.*]] = fir.array_coor %[[VAL_12]](%[[VAL_13]]) %[[VAL_72]], %[[VAL_73]] : (!fir.ref<!fir.array<2x?xf32>>, !fir.shape<2>, index, index) -> !fir.ref<f32>
237656b8d6cSValentin Clement! CHECK:         %[[VAL_76:.*]] = fir.load %[[VAL_74]] : !fir.ref<f32>
238656b8d6cSValentin Clement! CHECK:         fir.store %[[VAL_76]] to %[[VAL_75]] : !fir.ref<f32>
239656b8d6cSValentin Clement! CHECK:         %[[VAL_77:.*]] = arith.subi %[[VAL_70]], %[[VAL_3]] : index
240656b8d6cSValentin Clement! CHECK:         br ^bb16(%[[VAL_72]], %[[VAL_77]] : index, index)
241656b8d6cSValentin Clement! CHECK:       ^bb18:
242656b8d6cSValentin Clement! CHECK:         %[[VAL_78:.*]] = arith.addi %[[VAL_66]], %[[VAL_3]] : index
243656b8d6cSValentin Clement! CHECK:         %[[VAL_79:.*]] = arith.subi %[[VAL_67]], %[[VAL_3]] : index
244656b8d6cSValentin Clement! CHECK:         br ^bb15(%[[VAL_78]], %[[VAL_79]] : index, index)
245656b8d6cSValentin Clement! CHECK:       ^bb19:
246656b8d6cSValentin Clement! CHECK:         fir.freemem %[[VAL_33]] : !fir.heap<!fir.array<2x?xf32>>
247656b8d6cSValentin Clement! CHECK:         %[[VAL_82:.*]] = fir.call @_FortranAioBeginExternalListOutput(%[[VAL_8]], %{{.*}}, %{{.*}}) : (i32, !fir.ref<i8>, i32) -> !fir.ref<i8>
248656b8d6cSValentin Clement! CHECK:         %[[VAL_83:.*]] = fir.slice %[[VAL_3]], %[[VAL_2]], %[[VAL_3]], %[[VAL_3]], %[[VAL_2]], %[[VAL_3]] : (index, index, index, index, index, index) -> !fir.slice<2>
249*13f9089aSPeixin Qiao! CHECK:         %[[VAL_84:.*]] = fir.embox %[[VAL_12]](%[[VAL_13]]) {{\[}}%[[VAL_83]]] : (!fir.ref<!fir.array<2x?xf32>>, !fir.shape<2>, !fir.slice<2>) -> !fir.box<!fir.array<?x2xf32>>
250*13f9089aSPeixin Qiao! CHECK:         %[[VAL_85:.*]] = fir.convert %[[VAL_84]] : (!fir.box<!fir.array<?x2xf32>>) -> !fir.box<none>
251656b8d6cSValentin Clement! CHECK:         %[[VAL_86:.*]] = fir.call @_FortranAioOutputDescriptor(%[[VAL_82]], %[[VAL_85]]) : (!fir.ref<i8>, !fir.box<none>) -> i1
252656b8d6cSValentin Clement! CHECK:         %[[VAL_87:.*]] = fir.load %[[VAL_0]] : !fir.ref<i32>
253656b8d6cSValentin Clement! CHECK:         %[[VAL_88:.*]] = arith.subi %[[VAL_87]], %[[VAL_6]] : i32
254656b8d6cSValentin Clement! CHECK:         %[[VAL_89:.*]] = fir.convert %[[VAL_88]] : (i32) -> index
255656b8d6cSValentin Clement! CHECK:         %[[VAL_90:.*]] = fir.convert %[[VAL_87]] : (i32) -> index
256656b8d6cSValentin Clement! CHECK:         %[[VAL_91:.*]] = fir.slice %[[VAL_3]], %[[VAL_2]], %[[VAL_3]], %[[VAL_89]], %[[VAL_90]], %[[VAL_3]] : (index, index, index, index, index, index) -> !fir.slice<2>
257656b8d6cSValentin Clement! CHECK:         %[[VAL_92:.*]] = fir.embox %[[VAL_12]](%[[VAL_13]]) {{\[}}%[[VAL_91]]] : (!fir.ref<!fir.array<2x?xf32>>, !fir.shape<2>, !fir.slice<2>) -> !fir.box<!fir.array<?x?xf32>>
258656b8d6cSValentin Clement! CHECK:         %[[VAL_93:.*]] = fir.convert %[[VAL_92]] : (!fir.box<!fir.array<?x?xf32>>) -> !fir.box<none>
259656b8d6cSValentin Clement! CHECK:         %[[VAL_94:.*]] = fir.call @_FortranAioOutputDescriptor(%[[VAL_82]], %[[VAL_93]]) : (!fir.ref<i8>, !fir.box<none>) -> i1
260656b8d6cSValentin Clement! CHECK:         %[[VAL_95:.*]] = fir.call @_FortranAioEndIoStatement(%[[VAL_82]]) : (!fir.ref<i8>) -> i32
261656b8d6cSValentin Clement! CHECK:         return
262656b8d6cSValentin Clement! CHECK:       }
263656b8d6cSValentin Clement
264656b8d6cSValentin Clement! CHECK-LABEL: func @_QPss4(
265656b8d6cSValentin Clement! CHECK-SAME:               %[[VAL_0:.*]]: !fir.ref<i32> {fir.bindc_name = "n"}) {
266656b8d6cSValentin Clement! CHECK-DAG:     %[[VAL_1:.*]] = arith.constant -1 : index
267656b8d6cSValentin Clement! CHECK-DAG:     %[[VAL_2:.*]] = arith.constant 2 : index
268656b8d6cSValentin Clement! CHECK-DAG:     %[[VAL_3:.*]] = arith.constant 1 : index
269656b8d6cSValentin Clement! CHECK-DAG:     %[[VAL_4:.*]] = arith.constant -2 : i32
270656b8d6cSValentin Clement! CHECK-DAG:     %[[VAL_5:.*]] = arith.constant 0 : index
271656b8d6cSValentin Clement! CHECK-DAG:     %[[VAL_6:.*]] = arith.constant 1 : i32
272656b8d6cSValentin Clement! CHECK-DAG:     %[[VAL_7:.*]] = arith.constant 7.000000e+00 : f32
273656b8d6cSValentin Clement! CHECK-DAG:     %[[VAL_8:.*]] = arith.constant -1 : i32
274656b8d6cSValentin Clement! CHECK:         %[[VAL_10:.*]] = fir.load %[[VAL_0]] : !fir.ref<i32>
275656b8d6cSValentin Clement! CHECK:         %[[VAL_11A:.*]] = fir.convert %[[VAL_10]] : (i32) -> index
276656b8d6cSValentin Clement! CHECK:         %[[CMP:.*]] = arith.cmpi sgt, %[[VAL_11A]], %[[VAL_5]] : index
277656b8d6cSValentin Clement! CHECK:         %[[VAL_11:.*]] = arith.select %[[CMP]], %[[VAL_11A]], %[[VAL_5]] : index
278656b8d6cSValentin Clement! CHECK:         %[[VAL_12:.*]] = fir.alloca !fir.array<?x2xf32>, %[[VAL_11]] {bindc_name = "aa", uniq_name = "_QFss4Eaa"}
279656b8d6cSValentin Clement! CHECK:         %[[VAL_13:.*]] = fir.shape %[[VAL_11]], %[[VAL_2]] : (index, index) -> !fir.shape<2>
280656b8d6cSValentin Clement! CHECK:         %[[VAL_14:.*]] = fir.convert %[[VAL_4]] : (i32) -> f32
281656b8d6cSValentin Clement! CHECK:         br ^bb1(%[[VAL_5]], %[[VAL_2]] : index, index)
282656b8d6cSValentin Clement! CHECK:       ^bb1(%[[VAL_15:.*]]: index, %[[VAL_16:.*]]: index):
283656b8d6cSValentin Clement! CHECK:         %[[VAL_17:.*]] = arith.cmpi sgt, %[[VAL_16]], %[[VAL_5]] : index
284656b8d6cSValentin Clement! CHECK:         cond_br %[[VAL_17]], ^bb2(%[[VAL_5]], %[[VAL_11]] : index, index), ^bb5
285656b8d6cSValentin Clement! CHECK:       ^bb2(%[[VAL_18:.*]]: index, %[[VAL_19:.*]]: index):
286656b8d6cSValentin Clement! CHECK:         %[[VAL_20:.*]] = arith.cmpi sgt, %[[VAL_19]], %[[VAL_5]] : index
287656b8d6cSValentin Clement! CHECK:         cond_br %[[VAL_20]], ^bb3, ^bb4
288656b8d6cSValentin Clement! CHECK:       ^bb3:
289656b8d6cSValentin Clement! CHECK:         %[[VAL_21:.*]] = arith.addi %[[VAL_18]], %[[VAL_3]] : index
290656b8d6cSValentin Clement! CHECK:         %[[VAL_22:.*]] = arith.addi %[[VAL_15]], %[[VAL_3]] : index
291656b8d6cSValentin Clement! CHECK:         %[[VAL_23:.*]] = fir.array_coor %[[VAL_12]](%[[VAL_13]]) %[[VAL_21]], %[[VAL_22]] : (!fir.ref<!fir.array<?x2xf32>>, !fir.shape<2>, index, index) -> !fir.ref<f32>
292656b8d6cSValentin Clement! CHECK:         fir.store %[[VAL_14]] to %[[VAL_23]] : !fir.ref<f32>
293656b8d6cSValentin Clement! CHECK:         %[[VAL_24:.*]] = arith.subi %[[VAL_19]], %[[VAL_3]] : index
294656b8d6cSValentin Clement! CHECK:         br ^bb2(%[[VAL_21]], %[[VAL_24]] : index, index)
295656b8d6cSValentin Clement! CHECK:       ^bb4:
296656b8d6cSValentin Clement! CHECK:         %[[VAL_25:.*]] = arith.addi %[[VAL_15]], %[[VAL_3]] : index
297656b8d6cSValentin Clement! CHECK:         %[[VAL_26:.*]] = arith.subi %[[VAL_16]], %[[VAL_3]] : index
298656b8d6cSValentin Clement! CHECK:         br ^bb1(%[[VAL_25]], %[[VAL_26]] : index, index)
299656b8d6cSValentin Clement! CHECK:       ^bb5:
300656b8d6cSValentin Clement! CHECK:         %[[VAL_27:.*]] = fir.load %[[VAL_0]] : !fir.ref<i32>
301656b8d6cSValentin Clement! CHECK:         %[[VAL_28:.*]] = fir.convert %[[VAL_27]] : (i32) -> index
302656b8d6cSValentin Clement! CHECK:         %[[VAL_29:.*]] = arith.addi %[[VAL_28]], %[[VAL_1]] : index
303656b8d6cSValentin Clement! CHECK:         %[[VAL_30:.*]] = arith.cmpi sgt, %[[VAL_29]], %[[VAL_5]] : index
304656b8d6cSValentin Clement! CHECK:         %[[VAL_31:.*]] = arith.select %[[VAL_30]], %[[VAL_29]], %[[VAL_5]] : index
305656b8d6cSValentin Clement! CHECK:         %[[VAL_32:.*]] = fir.slice %[[VAL_2]], %[[VAL_28]], %[[VAL_3]], %[[VAL_3]], %[[VAL_2]], %[[VAL_3]] : (index, index, index, index, index, index) -> !fir.slice<2>
306656b8d6cSValentin Clement! CHECK:         %[[VAL_33:.*]] = fir.allocmem !fir.array<?x2xf32>, %[[VAL_11]]
307656b8d6cSValentin Clement! CHECK:         br ^bb6(%[[VAL_5]], %[[VAL_2]] : index, index)
308656b8d6cSValentin Clement! CHECK:       ^bb6(%[[VAL_34:.*]]: index, %[[VAL_35:.*]]: index):
309656b8d6cSValentin Clement! CHECK:         %[[VAL_36:.*]] = arith.cmpi sgt, %[[VAL_35]], %[[VAL_5]] : index
310656b8d6cSValentin Clement! CHECK:         cond_br %[[VAL_36]], ^bb7(%[[VAL_5]], %[[VAL_11]] : index, index), ^bb10
311656b8d6cSValentin Clement! CHECK:       ^bb7(%[[VAL_37:.*]]: index, %[[VAL_38:.*]]: index):
312656b8d6cSValentin Clement! CHECK:         %[[VAL_39:.*]] = arith.cmpi sgt, %[[VAL_38]], %[[VAL_5]] : index
313656b8d6cSValentin Clement! CHECK:         cond_br %[[VAL_39]], ^bb8, ^bb9
314656b8d6cSValentin Clement! CHECK:       ^bb8:
315656b8d6cSValentin Clement! CHECK:         %[[VAL_40:.*]] = arith.addi %[[VAL_37]], %[[VAL_3]] : index
316656b8d6cSValentin Clement! CHECK:         %[[VAL_41:.*]] = arith.addi %[[VAL_34]], %[[VAL_3]] : index
317656b8d6cSValentin Clement! CHECK:         %[[VAL_42:.*]] = fir.array_coor %[[VAL_12]](%[[VAL_13]]) %[[VAL_40]], %[[VAL_41]] : (!fir.ref<!fir.array<?x2xf32>>, !fir.shape<2>, index, index) -> !fir.ref<f32>
318656b8d6cSValentin Clement! CHECK:         %[[VAL_43:.*]] = fir.array_coor %[[VAL_33]](%[[VAL_13]]) %[[VAL_40]], %[[VAL_41]] : (!fir.heap<!fir.array<?x2xf32>>, !fir.shape<2>, index, index) -> !fir.ref<f32>
319656b8d6cSValentin Clement! CHECK:         %[[VAL_44:.*]] = fir.load %[[VAL_42]] : !fir.ref<f32>
320656b8d6cSValentin Clement! CHECK:         fir.store %[[VAL_44]] to %[[VAL_43]] : !fir.ref<f32>
321656b8d6cSValentin Clement! CHECK:         %[[VAL_45:.*]] = arith.subi %[[VAL_38]], %[[VAL_3]] : index
322656b8d6cSValentin Clement! CHECK:         br ^bb7(%[[VAL_40]], %[[VAL_45]] : index, index)
323656b8d6cSValentin Clement! CHECK:       ^bb9:
324656b8d6cSValentin Clement! CHECK:         %[[VAL_46:.*]] = arith.addi %[[VAL_34]], %[[VAL_3]] : index
325656b8d6cSValentin Clement! CHECK:         %[[VAL_47:.*]] = arith.subi %[[VAL_35]], %[[VAL_3]] : index
326656b8d6cSValentin Clement! CHECK:         br ^bb6(%[[VAL_46]], %[[VAL_47]] : index, index)
327656b8d6cSValentin Clement! CHECK:       ^bb10:
328656b8d6cSValentin Clement! CHECK:         %[[VAL_48:.*]] = arith.subi %[[VAL_27]], %[[VAL_6]] : i32
329656b8d6cSValentin Clement! CHECK:         %[[VAL_49:.*]] = fir.convert %[[VAL_48]] : (i32) -> index
330656b8d6cSValentin Clement! CHECK:         %[[VAL_50:.*]] = fir.slice %[[VAL_3]], %[[VAL_49]], %[[VAL_3]], %[[VAL_3]], %[[VAL_2]], %[[VAL_3]] : (index, index, index, index, index, index) -> !fir.slice<2>
331656b8d6cSValentin Clement! CHECK:         br ^bb11(%[[VAL_5]], %[[VAL_2]] : index, index)
332656b8d6cSValentin Clement! CHECK:       ^bb11(%[[VAL_51:.*]]: index, %[[VAL_52:.*]]: index):
333656b8d6cSValentin Clement! CHECK:         %[[VAL_53:.*]] = arith.cmpi sgt, %[[VAL_52]], %[[VAL_5]] : index
334656b8d6cSValentin Clement! CHECK:         cond_br %[[VAL_53]], ^bb12(%[[VAL_5]], %[[VAL_31]] : index, index), ^bb15(%[[VAL_5]], %[[VAL_2]] : index, index)
335656b8d6cSValentin Clement! CHECK:       ^bb12(%[[VAL_54:.*]]: index, %[[VAL_55:.*]]: index):
336656b8d6cSValentin Clement! CHECK:         %[[VAL_56:.*]] = arith.cmpi sgt, %[[VAL_55]], %[[VAL_5]] : index
337656b8d6cSValentin Clement! CHECK:         cond_br %[[VAL_56]], ^bb13, ^bb14
338656b8d6cSValentin Clement! CHECK:       ^bb13:
339656b8d6cSValentin Clement! CHECK:         %[[VAL_57:.*]] = arith.addi %[[VAL_54]], %[[VAL_3]] : index
340656b8d6cSValentin Clement! CHECK:         %[[VAL_58:.*]] = arith.addi %[[VAL_51]], %[[VAL_3]] : index
341656b8d6cSValentin Clement! CHECK:         %[[VAL_59:.*]] = fir.array_coor %[[VAL_12]](%[[VAL_13]]) {{\[}}%[[VAL_50]]] %[[VAL_57]], %[[VAL_58]] : (!fir.ref<!fir.array<?x2xf32>>, !fir.shape<2>, !fir.slice<2>, index, index) -> !fir.ref<f32>
342656b8d6cSValentin Clement! CHECK:         %[[VAL_60:.*]] = fir.load %[[VAL_59]] : !fir.ref<f32>
343656b8d6cSValentin Clement! CHECK:         %[[VAL_61:.*]] = arith.addf %[[VAL_60]], %[[VAL_7]] : f32
344656b8d6cSValentin Clement! CHECK:         %[[VAL_62:.*]] = fir.array_coor %[[VAL_33]](%[[VAL_13]]) {{\[}}%[[VAL_32]]] %[[VAL_57]], %[[VAL_58]] : (!fir.heap<!fir.array<?x2xf32>>, !fir.shape<2>, !fir.slice<2>, index, index) -> !fir.ref<f32>
345656b8d6cSValentin Clement! CHECK:         fir.store %[[VAL_61]] to %[[VAL_62]] : !fir.ref<f32>
346656b8d6cSValentin Clement! CHECK:         %[[VAL_63:.*]] = arith.subi %[[VAL_55]], %[[VAL_3]] : index
347656b8d6cSValentin Clement! CHECK:         br ^bb12(%[[VAL_57]], %[[VAL_63]] : index, index)
348656b8d6cSValentin Clement! CHECK:       ^bb14:
349656b8d6cSValentin Clement! CHECK:         %[[VAL_64:.*]] = arith.addi %[[VAL_51]], %[[VAL_3]] : index
350656b8d6cSValentin Clement! CHECK:         %[[VAL_65:.*]] = arith.subi %[[VAL_52]], %[[VAL_3]] : index
351656b8d6cSValentin Clement! CHECK:         br ^bb11(%[[VAL_64]], %[[VAL_65]] : index, index)
352656b8d6cSValentin Clement! CHECK:       ^bb15(%[[VAL_66:.*]]: index, %[[VAL_67:.*]]: index):
353656b8d6cSValentin Clement! CHECK:         %[[VAL_68:.*]] = arith.cmpi sgt, %[[VAL_67]], %[[VAL_5]] : index
354656b8d6cSValentin Clement! CHECK:         cond_br %[[VAL_68]], ^bb16(%[[VAL_5]], %[[VAL_11]] : index, index), ^bb19
355656b8d6cSValentin Clement! CHECK:       ^bb16(%[[VAL_69:.*]]: index, %[[VAL_70:.*]]: index):
356656b8d6cSValentin Clement! CHECK:         %[[VAL_71:.*]] = arith.cmpi sgt, %[[VAL_70]], %[[VAL_5]] : index
357656b8d6cSValentin Clement! CHECK:         cond_br %[[VAL_71]], ^bb17, ^bb18
358656b8d6cSValentin Clement! CHECK:       ^bb17:
359656b8d6cSValentin Clement! CHECK:         %[[VAL_72:.*]] = arith.addi %[[VAL_69]], %[[VAL_3]] : index
360656b8d6cSValentin Clement! CHECK:         %[[VAL_73:.*]] = arith.addi %[[VAL_66]], %[[VAL_3]] : index
361656b8d6cSValentin Clement! CHECK:         %[[VAL_74:.*]] = fir.array_coor %[[VAL_33]](%[[VAL_13]]) %[[VAL_72]], %[[VAL_73]] : (!fir.heap<!fir.array<?x2xf32>>, !fir.shape<2>, index, index) -> !fir.ref<f32>
362656b8d6cSValentin Clement! CHECK:         %[[VAL_75:.*]] = fir.array_coor %[[VAL_12]](%[[VAL_13]]) %[[VAL_72]], %[[VAL_73]] : (!fir.ref<!fir.array<?x2xf32>>, !fir.shape<2>, index, index) -> !fir.ref<f32>
363656b8d6cSValentin Clement! CHECK:         %[[VAL_76:.*]] = fir.load %[[VAL_74]] : !fir.ref<f32>
364656b8d6cSValentin Clement! CHECK:         fir.store %[[VAL_76]] to %[[VAL_75]] : !fir.ref<f32>
365656b8d6cSValentin Clement! CHECK:         %[[VAL_77:.*]] = arith.subi %[[VAL_70]], %[[VAL_3]] : index
366656b8d6cSValentin Clement! CHECK:         br ^bb16(%[[VAL_72]], %[[VAL_77]] : index, index)
367656b8d6cSValentin Clement! CHECK:       ^bb18:
368656b8d6cSValentin Clement! CHECK:         %[[VAL_78:.*]] = arith.addi %[[VAL_66]], %[[VAL_3]] : index
369656b8d6cSValentin Clement! CHECK:         %[[VAL_79:.*]] = arith.subi %[[VAL_67]], %[[VAL_3]] : index
370656b8d6cSValentin Clement! CHECK:         br ^bb15(%[[VAL_78]], %[[VAL_79]] : index, index)
371656b8d6cSValentin Clement! CHECK:       ^bb19:
372656b8d6cSValentin Clement! CHECK:         fir.freemem %[[VAL_33]] : !fir.heap<!fir.array<?x2xf32>>
373656b8d6cSValentin Clement! CHECK:         %[[VAL_82:.*]] = fir.call @_FortranAioBeginExternalListOutput(%[[VAL_8]], %{{.*}}, %{{.*}}) : (i32, !fir.ref<i8>, i32) -> !fir.ref<i8>
374656b8d6cSValentin Clement! CHECK:         %[[VAL_83:.*]] = fir.slice %[[VAL_3]], %[[VAL_2]], %[[VAL_3]], %[[VAL_3]], %[[VAL_2]], %[[VAL_3]] : (index, index, index, index, index, index) -> !fir.slice<2>
375*13f9089aSPeixin Qiao! CHECK:         %[[VAL_84:.*]] = fir.embox %[[VAL_12]](%[[VAL_13]]) {{\[}}%[[VAL_83]]] : (!fir.ref<!fir.array<?x2xf32>>, !fir.shape<2>, !fir.slice<2>) -> !fir.box<!fir.array<2x?xf32>>
376*13f9089aSPeixin Qiao! CHECK:         %[[VAL_85:.*]] = fir.convert %[[VAL_84]] : (!fir.box<!fir.array<2x?xf32>>) -> !fir.box<none>
377656b8d6cSValentin Clement! CHECK:         %[[VAL_86:.*]] = fir.call @_FortranAioOutputDescriptor(%[[VAL_82]], %[[VAL_85]]) : (!fir.ref<i8>, !fir.box<none>) -> i1
378656b8d6cSValentin Clement! CHECK:         %[[VAL_87:.*]] = fir.load %[[VAL_0]] : !fir.ref<i32>
379656b8d6cSValentin Clement! CHECK:         %[[VAL_88:.*]] = arith.subi %[[VAL_87]], %[[VAL_6]] : i32
380656b8d6cSValentin Clement! CHECK:         %[[VAL_89:.*]] = fir.convert %[[VAL_88]] : (i32) -> index
381656b8d6cSValentin Clement! CHECK:         %[[VAL_90:.*]] = fir.convert %[[VAL_87]] : (i32) -> index
382656b8d6cSValentin Clement! CHECK:         %[[VAL_91:.*]] = fir.slice %[[VAL_89]], %[[VAL_90]], %[[VAL_3]], %[[VAL_3]], %[[VAL_2]], %[[VAL_3]] : (index, index, index, index, index, index) -> !fir.slice<2>
383656b8d6cSValentin Clement! CHECK:         %[[VAL_92:.*]] = fir.embox %[[VAL_12]](%[[VAL_13]]) {{\[}}%[[VAL_91]]] : (!fir.ref<!fir.array<?x2xf32>>, !fir.shape<2>, !fir.slice<2>) -> !fir.box<!fir.array<?x?xf32>>
384656b8d6cSValentin Clement! CHECK:         %[[VAL_93:.*]] = fir.convert %[[VAL_92]] : (!fir.box<!fir.array<?x?xf32>>) -> !fir.box<none>
385656b8d6cSValentin Clement! CHECK:         %[[VAL_94:.*]] = fir.call @_FortranAioOutputDescriptor(%[[VAL_82]], %[[VAL_93]]) : (!fir.ref<i8>, !fir.box<none>) -> i1
386656b8d6cSValentin Clement! CHECK:         %[[VAL_95:.*]] = fir.call @_FortranAioEndIoStatement(%[[VAL_82]]) : (!fir.ref<i8>) -> i32
387656b8d6cSValentin Clement! CHECK:         return
388656b8d6cSValentin Clement! CHECK:       }
389656b8d6cSValentin Clement
390656b8d6cSValentin Clement
391656b8d6cSValentin Clement! CHECK-LABEL: func @_QPtt1
392656b8d6cSValentin Clementsubroutine tt1
393656b8d6cSValentin Clement  ! CHECK: fir.call @_FortranAioBeginExternalListOutput
394656b8d6cSValentin Clement  ! CHECK: %[[temp3:[0-9]+]] = fir.allocmem !fir.array<3xf32>
395656b8d6cSValentin Clement  ! CHECK: br ^bb1(%[[temp3]]
396656b8d6cSValentin Clement  ! CHECK-NEXT: ^bb1(%[[temp3arg:[0-9]+]]: !fir.heap<!fir.array<3xf32>>
397656b8d6cSValentin Clement  ! CHECK: %[[temp1:[0-9]+]] = fir.allocmem !fir.array<1xf32>
398656b8d6cSValentin Clement  ! CHECK: fir.call @_QFtt1Pr
399656b8d6cSValentin Clement  ! CHECK: fir.call @realloc
400656b8d6cSValentin Clement  ! CHECK: fir.freemem %[[temp1]] : !fir.heap<!fir.array<1xf32>>
401656b8d6cSValentin Clement  ! CHECK: %[[temp3x:[0-9]+]] = fir.allocmem !fir.array<3xf32>
402656b8d6cSValentin Clement  ! CHECK: fir.call @_FortranAioOutputDescriptor
403656b8d6cSValentin Clement  ! CHECK-NEXT: fir.freemem %[[temp3x]] : !fir.heap<!fir.array<3xf32>>
404656b8d6cSValentin Clement  ! CHECK-NEXT: fir.freemem %[[temp3arg]] : !fir.heap<!fir.array<3xf32>>
405656b8d6cSValentin Clement  ! CHECK-NEXT: fir.call @_FortranAioEndIoStatement
406656b8d6cSValentin Clement  print*, [(r([7.0]),i=1,3)]
407656b8d6cSValentin Clementcontains
408656b8d6cSValentin Clement  ! CHECK-LABEL: func @_QFtt1Pr
409656b8d6cSValentin Clement  function r(x)
410656b8d6cSValentin Clement    real x(:)
411656b8d6cSValentin Clement    r = x(1)
412656b8d6cSValentin Clement  end
413656b8d6cSValentin Clementend
414