@@ -96,9 +96,112 @@ subroutine test1b(a,b,c)
96
96
b(c(1 :20 :2 )) = a
97
97
end subroutine test1b
98
98
99
+ ! CHECK-LABEL: func @_QPtest1c(
100
+ ! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<!fir.array<10xi32>>, %[[VAL_1:.*]]: !fir.ref<!fir.array<10xi32>>, %[[VAL_2:.*]]: !fir.ref<!fir.array<20xi32>>, %[[VAL_3:.*]]: !fir.ref<!fir.array<10xi32>>) {
101
+ ! CHECK: return
102
+ ! CHECK: }
99
103
subroutine test1c (a ,b ,c ,d )
100
104
integer :: a(10 ), b(10 ), d(10 ), c(20 )
101
105
102
106
! flang: parser FAIL (final position)
103
107
! a = b(d(c(1:20:2))
104
108
end subroutine test1c
109
+
110
+
111
+ ! CHECK-LABEL: func @_QPtest2a(
112
+ ! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<!fir.array<10xi32>>, %[[VAL_1:.*]]: !fir.ref<!fir.array<10xi32>>, %[[VAL_2:.*]]: !fir.ref<!fir.array<10xi32>>, %[[VAL_3:.*]]: !fir.ref<!fir.array<10xi32>>) {
113
+ ! CHECK: %[[VAL_4:.*]] = constant 10 : index
114
+ ! CHECK: %[[VAL_5:.*]] = constant 10 : index
115
+ ! CHECK: %[[VAL_6:.*]] = constant 10 : index
116
+ ! CHECK: %[[VAL_7:.*]] = constant 10 : index
117
+ ! CHECK: %[[VAL_8:.*]] = fir.shape %[[VAL_4]] : (index) -> !fir.shape<1>
118
+ ! CHECK: %[[VAL_9:.*]] = fir.array_load %[[VAL_0]](%[[VAL_8]]) : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>) -> !fir.array<10xi32>
119
+ ! CHECK: %[[VAL_10:.*]] = constant 10 : i64
120
+ ! CHECK: %[[VAL_11:.*]] = fir.convert %[[VAL_10]] : (i64) -> index
121
+ ! CHECK: %[[VAL_12:.*]] = constant 1 : index
122
+ ! CHECK: %[[VAL_13:.*]] = constant 1 : index
123
+ ! CHECK: %[[VAL_14:.*]] = fir.shape %[[VAL_7]] : (index) -> !fir.shape<1>
124
+ ! CHECK: %[[VAL_15:.*]] = fir.array_load %[[VAL_3]](%[[VAL_14]]) : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>) -> !fir.array<10xi32>
125
+ ! CHECK: %[[VAL_16:.*]] = fir.shape %[[VAL_6]] : (index) -> !fir.shape<1>
126
+ ! CHECK: %[[VAL_17:.*]] = fir.slice %[[VAL_13]], %[[VAL_7]], %[[VAL_13]] : (index, index, index) -> !fir.slice<1>
127
+ ! CHECK: %[[VAL_18:.*]] = fir.array_load %[[VAL_2]](%[[VAL_16]]) {{\[}}%[[VAL_17]]] : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>, !fir.slice<1>) -> !fir.array<10xi32>
128
+ ! CHECK: %[[VAL_19:.*]] = constant 0 : index
129
+ ! CHECK: %[[VAL_20:.*]] = subi %[[VAL_7]], %[[VAL_13]] : index
130
+ ! CHECK: %[[VAL_21:.*]] = addi %[[VAL_20]], %[[VAL_13]] : index
131
+ ! CHECK: %[[VAL_22:.*]] = divi_signed %[[VAL_21]], %[[VAL_13]] : index
132
+ ! CHECK: %[[VAL_23:.*]] = cmpi sgt, %[[VAL_22]], %[[VAL_19]] : index
133
+ ! CHECK: %[[VAL_24:.*]] = select %[[VAL_23]], %[[VAL_22]], %[[VAL_19]] : index
134
+ ! CHECK: %[[VAL_25:.*]] = fir.shape %[[VAL_5]] : (index) -> !fir.shape<1>
135
+ ! CHECK: %[[VAL_26:.*]] = fir.slice %[[VAL_12]], %[[VAL_24]], %[[VAL_12]] : (index, index, index) -> !fir.slice<1>
136
+ ! CHECK: %[[VAL_27:.*]] = fir.array_load %[[VAL_1]](%[[VAL_25]]) {{\[}}%[[VAL_26]]] : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>, !fir.slice<1>) -> !fir.array<10xi32>
137
+ ! CHECK: %[[VAL_28:.*]] = constant 1 : index
138
+ ! CHECK: %[[VAL_29:.*]] = constant 0 : index
139
+ ! CHECK: %[[VAL_30:.*]] = subi %[[VAL_11]], %[[VAL_28]] : index
140
+ ! CHECK: %[[VAL_31:.*]] = fir.do_loop %[[VAL_32:.*]] = %[[VAL_29]] to %[[VAL_30]] step %[[VAL_28]] unordered iter_args(%[[VAL_33:.*]] = %[[VAL_9]]) -> (!fir.array<10xi32>) {
141
+ ! CHECK: %[[VAL_34:.*]] = fir.array_fetch %[[VAL_15]], %[[VAL_32]] : (!fir.array<10xi32>, index) -> i32
142
+ ! CHECK: %[[VAL_35:.*]] = fir.convert %[[VAL_34]] : (i32) -> index
143
+ ! CHECK: %[[VAL_36:.*]] = subi %[[VAL_35]], %[[VAL_13]] : index
144
+ ! CHECK: %[[VAL_37:.*]] = fir.array_fetch %[[VAL_18]], %[[VAL_36]] : (!fir.array<10xi32>, index) -> i32
145
+ ! CHECK: %[[VAL_38:.*]] = fir.convert %[[VAL_37]] : (i32) -> index
146
+ ! CHECK: %[[VAL_39:.*]] = subi %[[VAL_38]], %[[VAL_12]] : index
147
+ ! CHECK: %[[VAL_40:.*]] = fir.array_fetch %[[VAL_27]], %[[VAL_39]] : (!fir.array<10xi32>, index) -> i32
148
+ ! CHECK: %[[VAL_41:.*]] = fir.array_update %[[VAL_33]], %[[VAL_40]], %[[VAL_32]] : (!fir.array<10xi32>, i32, index) -> !fir.array<10xi32>
149
+ ! CHECK: fir.result %[[VAL_41]] : !fir.array<10xi32>
150
+ ! CHECK: }
151
+ ! CHECK: fir.array_merge_store %[[VAL_9]], %[[VAL_42:.*]] to %[[VAL_0]] : !fir.array<10xi32>, !fir.array<10xi32>, !fir.ref<!fir.array<10xi32>>
152
+ ! CHECK: return
153
+ ! CHECK: }
154
+ subroutine test2a (a ,b ,c ,d )
155
+ integer :: a(10 ), b(10 ), c(10 ), d(10 )
156
+
157
+ a = b(c(d))
158
+ end subroutine test2a
159
+
160
+ ! CHECK-LABEL: func @_QPtest2b(
161
+ ! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<!fir.array<10xi32>>, %[[VAL_1:.*]]: !fir.ref<!fir.array<10xi32>>, %[[VAL_2:.*]]: !fir.ref<!fir.array<10xi32>>, %[[VAL_3:.*]]: !fir.ref<!fir.array<10xi32>>) {
162
+ ! CHECK: %[[VAL_4:.*]] = constant 10 : index
163
+ ! CHECK: %[[VAL_5:.*]] = constant 10 : index
164
+ ! CHECK: %[[VAL_6:.*]] = constant 10 : index
165
+ ! CHECK: %[[VAL_7:.*]] = constant 10 : index
166
+ ! CHECK: %[[VAL_8:.*]] = constant 1 : index
167
+ ! CHECK: %[[VAL_9:.*]] = constant 1 : index
168
+ ! CHECK: %[[VAL_10:.*]] = fir.shape %[[VAL_7]] : (index) -> !fir.shape<1>
169
+ ! CHECK: %[[VAL_11:.*]] = fir.array_load %[[VAL_3]](%[[VAL_10]]) : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>) -> !fir.array<10xi32>
170
+ ! CHECK: %[[VAL_12:.*]] = fir.shape %[[VAL_6]] : (index) -> !fir.shape<1>
171
+ ! CHECK: %[[VAL_13:.*]] = fir.slice %[[VAL_9]], %[[VAL_7]], %[[VAL_9]] : (index, index, index) -> !fir.slice<1>
172
+ ! CHECK: %[[VAL_14:.*]] = fir.array_load %[[VAL_2]](%[[VAL_12]]) {{\[}}%[[VAL_13]]] : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>, !fir.slice<1>) -> !fir.array<10xi32>
173
+ ! CHECK: %[[VAL_15:.*]] = constant 0 : index
174
+ ! CHECK: %[[VAL_16:.*]] = subi %[[VAL_7]], %[[VAL_9]] : index
175
+ ! CHECK: %[[VAL_17:.*]] = addi %[[VAL_16]], %[[VAL_9]] : index
176
+ ! CHECK: %[[VAL_18:.*]] = divi_signed %[[VAL_17]], %[[VAL_9]] : index
177
+ ! CHECK: %[[VAL_19:.*]] = cmpi sgt, %[[VAL_18]], %[[VAL_15]] : index
178
+ ! CHECK: %[[VAL_20:.*]] = select %[[VAL_19]], %[[VAL_18]], %[[VAL_15]] : index
179
+ ! CHECK: %[[VAL_21:.*]] = fir.shape %[[VAL_5]] : (index) -> !fir.shape<1>
180
+ ! CHECK: %[[VAL_22:.*]] = fir.slice %[[VAL_8]], %[[VAL_20]], %[[VAL_8]] : (index, index, index) -> !fir.slice<1>
181
+ ! CHECK: %[[VAL_23:.*]] = fir.array_load %[[VAL_1]](%[[VAL_21]]) {{\[}}%[[VAL_22]]] : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>, !fir.slice<1>) -> !fir.array<10xi32>
182
+ ! CHECK: %[[VAL_24:.*]] = constant 10 : i64
183
+ ! CHECK: %[[VAL_25:.*]] = fir.convert %[[VAL_24]] : (i64) -> index
184
+ ! CHECK: %[[VAL_26:.*]] = fir.shape %[[VAL_4]] : (index) -> !fir.shape<1>
185
+ ! CHECK: %[[VAL_27:.*]] = fir.array_load %[[VAL_0]](%[[VAL_26]]) : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>) -> !fir.array<10xi32>
186
+ ! CHECK: %[[VAL_28:.*]] = constant 1 : index
187
+ ! CHECK: %[[VAL_29:.*]] = constant 0 : index
188
+ ! CHECK: %[[VAL_30:.*]] = subi %[[VAL_25]], %[[VAL_28]] : index
189
+ ! CHECK: %[[VAL_31:.*]] = fir.do_loop %[[VAL_32:.*]] = %[[VAL_29]] to %[[VAL_30]] step %[[VAL_28]] unordered iter_args(%[[VAL_33:.*]] = %[[VAL_23]]) -> (!fir.array<10xi32>) {
190
+ ! CHECK: %[[VAL_34:.*]] = fir.array_fetch %[[VAL_27]], %[[VAL_32]] : (!fir.array<10xi32>, index) -> i32
191
+ ! CHECK: %[[VAL_35:.*]] = fir.array_fetch %[[VAL_11]], %[[VAL_32]] : (!fir.array<10xi32>, index) -> i32
192
+ ! CHECK: %[[VAL_36:.*]] = fir.convert %[[VAL_35]] : (i32) -> index
193
+ ! CHECK: %[[VAL_37:.*]] = subi %[[VAL_36]], %[[VAL_9]] : index
194
+ ! CHECK: %[[VAL_38:.*]] = fir.array_fetch %[[VAL_14]], %[[VAL_37]] : (!fir.array<10xi32>, index) -> i32
195
+ ! CHECK: %[[VAL_39:.*]] = fir.convert %[[VAL_38]] : (i32) -> index
196
+ ! CHECK: %[[VAL_40:.*]] = subi %[[VAL_39]], %[[VAL_8]] : index
197
+ ! CHECK: %[[VAL_41:.*]] = fir.array_update %[[VAL_33]], %[[VAL_34]], %[[VAL_40]] : (!fir.array<10xi32>, i32, index) -> !fir.array<10xi32>
198
+ ! CHECK: fir.result %[[VAL_41]] : !fir.array<10xi32>
199
+ ! CHECK: }
200
+ ! CHECK: fir.array_merge_store %[[VAL_23]], %[[VAL_42:.*]] to %[[VAL_1]]{{\[}}%[[VAL_22]]] : !fir.array<10xi32>, !fir.array<10xi32>, !fir.ref<!fir.array<10xi32>>, !fir.slice<1>
201
+ ! CHECK: return
202
+ ! CHECK: }
203
+ subroutine test2b (a ,b ,c ,d )
204
+ integer :: a(10 ), b(10 ), c(10 ), d(10 )
205
+
206
+ b(c(d)) = a
207
+ end subroutine test2b
0 commit comments