1! RUN: bbc %s -o - | FileCheck %s 2 3! CHECK-LABEL: func @_QPss1() 4subroutine ss1 5 ! CHECK: %[[aa:[0-9]+]] = fir.alloca !fir.array<2650000xf32> {bindc_name = "aa", uniq_name = "_QFss1Eaa"} 6 ! CHECK: %[[shape:[0-9]+]] = fir.shape {{.*}} : (index) -> !fir.shape<1> 7 integer, parameter :: N = 2650000 8 real aa(N) 9 ! CHECK: fir.array_coor %[[aa]](%[[shape]]) {{.*}} : (!fir.ref<!fir.array<2650000xf32>>, !fir.shape<1>, index) -> !fir.ref<f32> 10 aa = -2 11 ! CHECK: %[[temp:[0-9]+]] = fir.allocmem !fir.array<2650000xf32> 12 ! CHECK: fir.array_coor %[[aa]](%[[shape]]) {{.*}} : (!fir.ref<!fir.array<2650000xf32>>, !fir.shape<1>, index) -> !fir.ref<f32> 13 ! CHECK: fir.array_coor %[[temp]](%[[shape]]) {{.*}} : (!fir.heap<!fir.array<2650000xf32>>, !fir.shape<1>, index) -> !fir.ref<f32> 14 ! CHECK: fir.array_coor %[[aa]](%[[shape]]) [{{.*}}] {{.*}} : (!fir.ref<!fir.array<2650000xf32>>, !fir.shape<1>, !fir.slice<1>, index) -> !fir.ref<f32> 15 ! CHECK: fir.array_coor %[[temp]](%[[shape]]) [{{.*}}] {{.*}} : (!fir.heap<!fir.array<2650000xf32>>, !fir.shape<1>, !fir.slice<1>, index) -> !fir.ref<f32> 16 ! CHECK: fir.array_coor %[[temp]](%[[shape]]) {{.*}} : (!fir.heap<!fir.array<2650000xf32>>, !fir.shape<1>, index) -> !fir.ref<f32> 17 ! CHECK: fir.array_coor %[[aa]](%[[shape]]) {{.*}} : (!fir.ref<!fir.array<2650000xf32>>, !fir.shape<1>, index) -> !fir.ref<f32> 18 ! CHECK: fir.freemem %[[temp]] : !fir.heap<!fir.array<2650000xf32>> 19 aa(2:N) = aa(1:N-1) + 7.0 20! print*, aa(1:2), aa(N-1:N) 21end 22 23subroutine ss2(N) 24 real aa(N) 25 aa = -2 26 aa(2:N) = aa(1:N-1) + 7.0 27 print*, aa(1:2), aa(N-1:N) 28end 29 30subroutine ss3(N) 31 real aa(2,N) 32 aa = -2 33 aa(:,2:N) = aa(:,1:N-1) + 7.0 34 print*, aa(:,1:2), aa(:,N-1:N) 35end 36 37subroutine ss4(N) 38 real aa(N,2) 39 aa = -2 40 aa(2:N,:) = aa(1:N-1,:) + 7.0 41 print*, aa(1:2,:), aa(N-1:N,:) 42end 43 44! CHECK-LABEL: func @_QPss2( 45! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<i32> {fir.bindc_name = "n"}) { 46! CHECK-DAG: %[[VAL_1:.*]] = arith.constant -1 : index 47! CHECK-DAG: %[[VAL_2:.*]] = arith.constant -2 : i32 48! CHECK-DAG: %[[VAL_3:.*]] = arith.constant 1 : index 49! CHECK-DAG: %[[VAL_4:.*]] = arith.constant 0 : index 50! CHECK-DAG: %[[VAL_5:.*]] = arith.constant 2 : index 51! CHECK-DAG: %[[VAL_6:.*]] = arith.constant 1 : i32 52! CHECK-DAG: %[[VAL_7:.*]] = arith.constant 7.000000e+00 : f32 53! CHECK-DAG: %[[VAL_8:.*]] = arith.constant -1 : i32 54! CHECK: %[[VAL_10:.*]] = fir.load %[[VAL_0]] : !fir.ref<i32> 55! CHECK: %[[VAL_11A:.*]] = fir.convert %[[VAL_10]] : (i32) -> index 56! CHECK: %[[CMP:.*]] = arith.cmpi sgt, %[[VAL_11A]], %[[VAL_4]] : index 57! CHECK: %[[VAL_11:.*]] = arith.select %[[CMP]], %[[VAL_11A]], %[[VAL_4]] : index 58! CHECK: %[[VAL_12:.*]] = fir.alloca !fir.array<?xf32>, %[[VAL_11]] {bindc_name = "aa", uniq_name = "_QFss2Eaa"} 59! CHECK: %[[VAL_13:.*]] = fir.shape %[[VAL_11]] : (index) -> !fir.shape<1> 60! CHECK: %[[VAL_14:.*]] = fir.convert %[[VAL_2]] : (i32) -> f32 61! CHECK: br ^bb1(%[[VAL_4]], %[[VAL_11]] : index, index) 62! CHECK: ^bb1(%[[VAL_15:.*]]: index, %[[VAL_16:.*]]: index): 63! CHECK: %[[VAL_17:.*]] = arith.cmpi sgt, %[[VAL_16]], %[[VAL_4]] : index 64! CHECK: cond_br %[[VAL_17]], ^bb2, ^bb3 65! CHECK: ^bb2: 66! CHECK: %[[VAL_18:.*]] = arith.addi %[[VAL_15]], %[[VAL_3]] : index 67! CHECK: %[[VAL_19:.*]] = fir.array_coor %[[VAL_12]](%[[VAL_13]]) %[[VAL_18]] : (!fir.ref<!fir.array<?xf32>>, !fir.shape<1>, index) -> !fir.ref<f32> 68! CHECK: fir.store %[[VAL_14]] to %[[VAL_19]] : !fir.ref<f32> 69! CHECK: %[[VAL_20:.*]] = arith.subi %[[VAL_16]], %[[VAL_3]] : index 70! CHECK: br ^bb1(%[[VAL_18]], %[[VAL_20]] : index, index) 71! CHECK: ^bb3: 72! CHECK: %[[VAL_21:.*]] = fir.load %[[VAL_0]] : !fir.ref<i32> 73! CHECK: %[[VAL_22:.*]] = fir.convert %[[VAL_21]] : (i32) -> index 74! CHECK: %[[VAL_23:.*]] = arith.addi %[[VAL_22]], %[[VAL_1]] : index 75! CHECK: %[[VAL_24:.*]] = arith.cmpi sgt, %[[VAL_23]], %[[VAL_4]] : index 76! CHECK: %[[VAL_25:.*]] = arith.select %[[VAL_24]], %[[VAL_23]], %[[VAL_4]] : index 77! CHECK: %[[VAL_26:.*]] = fir.slice %[[VAL_5]], %[[VAL_22]], %[[VAL_3]] : (index, index, index) -> !fir.slice<1> 78! CHECK: %[[VAL_27:.*]] = fir.allocmem !fir.array<?xf32>, %[[VAL_11]] 79! CHECK: br ^bb4(%[[VAL_4]], %[[VAL_11]] : index, index) 80! CHECK: ^bb4(%[[VAL_28:.*]]: index, %[[VAL_29:.*]]: index): 81! CHECK: %[[VAL_30:.*]] = arith.cmpi sgt, %[[VAL_29]], %[[VAL_4]] : index 82! CHECK: cond_br %[[VAL_30]], ^bb5, ^bb6 83! CHECK: ^bb5: 84! CHECK: %[[VAL_31:.*]] = arith.addi %[[VAL_28]], %[[VAL_3]] : index 85! CHECK: %[[VAL_32:.*]] = fir.array_coor %[[VAL_12]](%[[VAL_13]]) %[[VAL_31]] : (!fir.ref<!fir.array<?xf32>>, !fir.shape<1>, index) -> !fir.ref<f32> 86! CHECK: %[[VAL_33:.*]] = fir.array_coor %[[VAL_27]](%[[VAL_13]]) %[[VAL_31]] : (!fir.heap<!fir.array<?xf32>>, !fir.shape<1>, index) -> !fir.ref<f32> 87! CHECK: %[[VAL_34:.*]] = fir.load %[[VAL_32]] : !fir.ref<f32> 88! CHECK: fir.store %[[VAL_34]] to %[[VAL_33]] : !fir.ref<f32> 89! CHECK: %[[VAL_35:.*]] = arith.subi %[[VAL_29]], %[[VAL_3]] : index 90! CHECK: br ^bb4(%[[VAL_31]], %[[VAL_35]] : index, index) 91! CHECK: ^bb6: 92! CHECK: %[[VAL_36:.*]] = arith.subi %[[VAL_21]], %[[VAL_6]] : i32 93! CHECK: %[[VAL_37:.*]] = fir.convert %[[VAL_36]] : (i32) -> index 94! CHECK: %[[VAL_38:.*]] = fir.slice %[[VAL_3]], %[[VAL_37]], %[[VAL_3]] : (index, index, index) -> !fir.slice<1> 95! CHECK: br ^bb7(%[[VAL_4]], %[[VAL_25]] : index, index) 96! CHECK: ^bb7(%[[VAL_39:.*]]: index, %[[VAL_40:.*]]: index): 97! CHECK: %[[VAL_41:.*]] = arith.cmpi sgt, %[[VAL_40]], %[[VAL_4]] : index 98! CHECK: cond_br %[[VAL_41]], ^bb8, ^bb9(%[[VAL_4]], %[[VAL_11]] : index, index) 99! CHECK: ^bb8: 100! CHECK: %[[VAL_42:.*]] = arith.addi %[[VAL_39]], %[[VAL_3]] : index 101! 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> 102! CHECK: %[[VAL_44:.*]] = fir.load %[[VAL_43]] : !fir.ref<f32> 103! CHECK: %[[VAL_45:.*]] = arith.addf %[[VAL_44]], %[[VAL_7]] : f32 104! 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> 105! CHECK: fir.store %[[VAL_45]] to %[[VAL_46]] : !fir.ref<f32> 106! CHECK: %[[VAL_47:.*]] = arith.subi %[[VAL_40]], %[[VAL_3]] : index 107! CHECK: br ^bb7(%[[VAL_42]], %[[VAL_47]] : index, index) 108! CHECK: ^bb9(%[[VAL_48:.*]]: index, %[[VAL_49:.*]]: index): 109! CHECK: %[[VAL_50:.*]] = arith.cmpi sgt, %[[VAL_49]], %[[VAL_4]] : index 110! CHECK: cond_br %[[VAL_50]], ^bb10, ^bb11 111! CHECK: ^bb10: 112! CHECK: %[[VAL_51:.*]] = arith.addi %[[VAL_48]], %[[VAL_3]] : index 113! CHECK: %[[VAL_52:.*]] = fir.array_coor %[[VAL_27]](%[[VAL_13]]) %[[VAL_51]] : (!fir.heap<!fir.array<?xf32>>, !fir.shape<1>, index) -> !fir.ref<f32> 114! CHECK: %[[VAL_53:.*]] = fir.array_coor %[[VAL_12]](%[[VAL_13]]) %[[VAL_51]] : (!fir.ref<!fir.array<?xf32>>, !fir.shape<1>, index) -> !fir.ref<f32> 115! CHECK: %[[VAL_54:.*]] = fir.load %[[VAL_52]] : !fir.ref<f32> 116! CHECK: fir.store %[[VAL_54]] to %[[VAL_53]] : !fir.ref<f32> 117! CHECK: %[[VAL_55:.*]] = arith.subi %[[VAL_49]], %[[VAL_3]] : index 118! CHECK: br ^bb9(%[[VAL_51]], %[[VAL_55]] : index, index) 119! CHECK: ^bb11: 120! CHECK: fir.freemem %[[VAL_27]] : !fir.heap<!fir.array<?xf32>> 121! CHECK: %[[VAL_58:.*]] = fir.call @_FortranAioBeginExternalListOutput(%[[VAL_8]], %{{.*}}, %{{.*}}) : (i32, !fir.ref<i8>, i32) -> !fir.ref<i8> 122! CHECK: %[[VAL_59:.*]] = fir.slice %[[VAL_3]], %[[VAL_5]], %[[VAL_3]] : (index, index, index) -> !fir.slice<1> 123! 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! CHECK: %[[VAL_61:.*]] = fir.convert %[[VAL_60]] : (!fir.box<!fir.array<2xf32>>) -> !fir.box<none> 125! CHECK: %[[VAL_62:.*]] = fir.call @_FortranAioOutputDescriptor(%[[VAL_58]], %[[VAL_61]]) : (!fir.ref<i8>, !fir.box<none>) -> i1 126! CHECK: %[[VAL_63:.*]] = fir.load %[[VAL_0]] : !fir.ref<i32> 127! CHECK: %[[VAL_64:.*]] = arith.subi %[[VAL_63]], %[[VAL_6]] : i32 128! CHECK: %[[VAL_65:.*]] = fir.convert %[[VAL_64]] : (i32) -> index 129! CHECK: %[[VAL_66:.*]] = fir.convert %[[VAL_63]] : (i32) -> index 130! CHECK: %[[VAL_67:.*]] = fir.slice %[[VAL_65]], %[[VAL_66]], %[[VAL_3]] : (index, index, index) -> !fir.slice<1> 131! 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>> 132! CHECK: %[[VAL_69:.*]] = fir.convert %[[VAL_68]] : (!fir.box<!fir.array<?xf32>>) -> !fir.box<none> 133! CHECK: %[[VAL_70:.*]] = fir.call @_FortranAioOutputDescriptor(%[[VAL_58]], %[[VAL_69]]) : (!fir.ref<i8>, !fir.box<none>) -> i1 134! CHECK: %[[VAL_71:.*]] = fir.call @_FortranAioEndIoStatement(%[[VAL_58]]) : (!fir.ref<i8>) -> i32 135! CHECK: return 136! CHECK: } 137 138! CHECK-LABEL: func @_QPss3( 139! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<i32> {fir.bindc_name = "n"}) { 140! CHECK-DAG: %[[VAL_1:.*]] = arith.constant -1 : index 141! CHECK-DAG: %[[VAL_2:.*]] = arith.constant 2 : index 142! CHECK-DAG: %[[VAL_3:.*]] = arith.constant 1 : index 143! CHECK-DAG: %[[VAL_4:.*]] = arith.constant -2 : i32 144! CHECK-DAG: %[[VAL_5:.*]] = arith.constant 0 : index 145! CHECK-DAG: %[[VAL_6:.*]] = arith.constant 1 : i32 146! CHECK-DAG: %[[VAL_7:.*]] = arith.constant 7.000000e+00 : f32 147! CHECK-DAG: %[[VAL_8:.*]] = arith.constant -1 : i32 148! CHECK: %[[VAL_10:.*]] = fir.load %[[VAL_0]] : !fir.ref<i32> 149! CHECK: %[[VAL_11:.*]] = fir.convert %[[VAL_10]] : (i32) -> index 150! CHECK: %[[CMP:.*]] = arith.cmpi sgt, %[[VAL_11A]], %[[VAL_5]] : index 151! CHECK: %[[VAL_11:.*]] = arith.select %[[CMP]], %[[VAL_11A]], %[[VAL_5]] : index 152! CHECK: %[[VAL_12:.*]] = fir.alloca !fir.array<2x?xf32>, %[[VAL_11]] {bindc_name = "aa", uniq_name = "_QFss3Eaa"} 153! CHECK: %[[VAL_13:.*]] = fir.shape %[[VAL_2]], %[[VAL_11]] : (index, index) -> !fir.shape<2> 154! CHECK: %[[VAL_14:.*]] = fir.convert %[[VAL_4]] : (i32) -> f32 155! CHECK: br ^bb1(%[[VAL_5]], %[[VAL_11]] : index, index) 156! CHECK: ^bb1(%[[VAL_15:.*]]: index, %[[VAL_16:.*]]: index): 157! CHECK: %[[VAL_17:.*]] = arith.cmpi sgt, %[[VAL_16]], %[[VAL_5]] : index 158! CHECK: cond_br %[[VAL_17]], ^bb2(%[[VAL_5]], %[[VAL_2]] : index, index), ^bb5 159! CHECK: ^bb2(%[[VAL_18:.*]]: index, %[[VAL_19:.*]]: index): 160! CHECK: %[[VAL_20:.*]] = arith.cmpi sgt, %[[VAL_19]], %[[VAL_5]] : index 161! CHECK: cond_br %[[VAL_20]], ^bb3, ^bb4 162! CHECK: ^bb3: 163! CHECK: %[[VAL_21:.*]] = arith.addi %[[VAL_18]], %[[VAL_3]] : index 164! CHECK: %[[VAL_22:.*]] = arith.addi %[[VAL_15]], %[[VAL_3]] : index 165! 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> 166! CHECK: fir.store %[[VAL_14]] to %[[VAL_23]] : !fir.ref<f32> 167! CHECK: %[[VAL_24:.*]] = arith.subi %[[VAL_19]], %[[VAL_3]] : index 168! CHECK: br ^bb2(%[[VAL_21]], %[[VAL_24]] : index, index) 169! CHECK: ^bb4: 170! CHECK: %[[VAL_25:.*]] = arith.addi %[[VAL_15]], %[[VAL_3]] : index 171! CHECK: %[[VAL_26:.*]] = arith.subi %[[VAL_16]], %[[VAL_3]] : index 172! CHECK: br ^bb1(%[[VAL_25]], %[[VAL_26]] : index, index) 173! CHECK: ^bb5: 174! CHECK: %[[VAL_27:.*]] = fir.load %[[VAL_0]] : !fir.ref<i32> 175! CHECK: %[[VAL_28:.*]] = fir.convert %[[VAL_27]] : (i32) -> index 176! CHECK: %[[VAL_29:.*]] = arith.addi %[[VAL_28]], %[[VAL_1]] : index 177! CHECK: %[[VAL_30:.*]] = arith.cmpi sgt, %[[VAL_29]], %[[VAL_5]] : index 178! CHECK: %[[VAL_31:.*]] = arith.select %[[VAL_30]], %[[VAL_29]], %[[VAL_5]] : index 179! 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> 180! CHECK: %[[VAL_33:.*]] = fir.allocmem !fir.array<2x?xf32>, %[[VAL_11]] 181! CHECK: br ^bb6(%[[VAL_5]], %[[VAL_11]] : index, index) 182! CHECK: ^bb6(%[[VAL_34:.*]]: index, %[[VAL_35:.*]]: index): 183! CHECK: %[[VAL_36:.*]] = arith.cmpi sgt, %[[VAL_35]], %[[VAL_5]] : index 184! CHECK: cond_br %[[VAL_36]], ^bb7(%[[VAL_5]], %[[VAL_2]] : index, index), ^bb10 185! CHECK: ^bb7(%[[VAL_37:.*]]: index, %[[VAL_38:.*]]: index): 186! CHECK: %[[VAL_39:.*]] = arith.cmpi sgt, %[[VAL_38]], %[[VAL_5]] : index 187! CHECK: cond_br %[[VAL_39]], ^bb8, ^bb9 188! CHECK: ^bb8: 189! CHECK: %[[VAL_40:.*]] = arith.addi %[[VAL_37]], %[[VAL_3]] : index 190! CHECK: %[[VAL_41:.*]] = arith.addi %[[VAL_34]], %[[VAL_3]] : index 191! 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> 192! 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> 193! CHECK: %[[VAL_44:.*]] = fir.load %[[VAL_42]] : !fir.ref<f32> 194! CHECK: fir.store %[[VAL_44]] to %[[VAL_43]] : !fir.ref<f32> 195! CHECK: %[[VAL_45:.*]] = arith.subi %[[VAL_38]], %[[VAL_3]] : index 196! CHECK: br ^bb7(%[[VAL_40]], %[[VAL_45]] : index, index) 197! CHECK: ^bb9: 198! CHECK: %[[VAL_46:.*]] = arith.addi %[[VAL_34]], %[[VAL_3]] : index 199! CHECK: %[[VAL_47:.*]] = arith.subi %[[VAL_35]], %[[VAL_3]] : index 200! CHECK: br ^bb6(%[[VAL_46]], %[[VAL_47]] : index, index) 201! CHECK: ^bb10: 202! CHECK: %[[VAL_48:.*]] = arith.subi %[[VAL_27]], %[[VAL_6]] : i32 203! CHECK: %[[VAL_49:.*]] = fir.convert %[[VAL_48]] : (i32) -> index 204! 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> 205! CHECK: br ^bb11(%[[VAL_5]], %[[VAL_31]] : index, index) 206! CHECK: ^bb11(%[[VAL_51:.*]]: index, %[[VAL_52:.*]]: index): 207! CHECK: %[[VAL_53:.*]] = arith.cmpi sgt, %[[VAL_52]], %[[VAL_5]] : index 208! CHECK: cond_br %[[VAL_53]], ^bb12(%[[VAL_5]], %[[VAL_2]] : index, index), ^bb15(%[[VAL_5]], %[[VAL_11]] : index, index) 209! CHECK: ^bb12(%[[VAL_54:.*]]: index, %[[VAL_55:.*]]: index): 210! CHECK: %[[VAL_56:.*]] = arith.cmpi sgt, %[[VAL_55]], %[[VAL_5]] : index 211! CHECK: cond_br %[[VAL_56]], ^bb13, ^bb14 212! CHECK: ^bb13: 213! CHECK: %[[VAL_57:.*]] = arith.addi %[[VAL_54]], %[[VAL_3]] : index 214! CHECK: %[[VAL_58:.*]] = arith.addi %[[VAL_51]], %[[VAL_3]] : index 215! 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> 216! CHECK: %[[VAL_60:.*]] = fir.load %[[VAL_59]] : !fir.ref<f32> 217! CHECK: %[[VAL_61:.*]] = arith.addf %[[VAL_60]], %[[VAL_7]] : f32 218! 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> 219! CHECK: fir.store %[[VAL_61]] to %[[VAL_62]] : !fir.ref<f32> 220! CHECK: %[[VAL_63:.*]] = arith.subi %[[VAL_55]], %[[VAL_3]] : index 221! CHECK: br ^bb12(%[[VAL_57]], %[[VAL_63]] : index, index) 222! CHECK: ^bb14: 223! CHECK: %[[VAL_64:.*]] = arith.addi %[[VAL_51]], %[[VAL_3]] : index 224! CHECK: %[[VAL_65:.*]] = arith.subi %[[VAL_52]], %[[VAL_3]] : index 225! CHECK: br ^bb11(%[[VAL_64]], %[[VAL_65]] : index, index) 226! CHECK: ^bb15(%[[VAL_66:.*]]: index, %[[VAL_67:.*]]: index): 227! CHECK: %[[VAL_68:.*]] = arith.cmpi sgt, %[[VAL_67]], %[[VAL_5]] : index 228! CHECK: cond_br %[[VAL_68]], ^bb16(%[[VAL_5]], %[[VAL_2]] : index, index), ^bb19 229! CHECK: ^bb16(%[[VAL_69:.*]]: index, %[[VAL_70:.*]]: index): 230! CHECK: %[[VAL_71:.*]] = arith.cmpi sgt, %[[VAL_70]], %[[VAL_5]] : index 231! CHECK: cond_br %[[VAL_71]], ^bb17, ^bb18 232! CHECK: ^bb17: 233! CHECK: %[[VAL_72:.*]] = arith.addi %[[VAL_69]], %[[VAL_3]] : index 234! CHECK: %[[VAL_73:.*]] = arith.addi %[[VAL_66]], %[[VAL_3]] : index 235! 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> 236! 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> 237! CHECK: %[[VAL_76:.*]] = fir.load %[[VAL_74]] : !fir.ref<f32> 238! CHECK: fir.store %[[VAL_76]] to %[[VAL_75]] : !fir.ref<f32> 239! CHECK: %[[VAL_77:.*]] = arith.subi %[[VAL_70]], %[[VAL_3]] : index 240! CHECK: br ^bb16(%[[VAL_72]], %[[VAL_77]] : index, index) 241! CHECK: ^bb18: 242! CHECK: %[[VAL_78:.*]] = arith.addi %[[VAL_66]], %[[VAL_3]] : index 243! CHECK: %[[VAL_79:.*]] = arith.subi %[[VAL_67]], %[[VAL_3]] : index 244! CHECK: br ^bb15(%[[VAL_78]], %[[VAL_79]] : index, index) 245! CHECK: ^bb19: 246! CHECK: fir.freemem %[[VAL_33]] : !fir.heap<!fir.array<2x?xf32>> 247! CHECK: %[[VAL_82:.*]] = fir.call @_FortranAioBeginExternalListOutput(%[[VAL_8]], %{{.*}}, %{{.*}}) : (i32, !fir.ref<i8>, i32) -> !fir.ref<i8> 248! 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! 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! CHECK: %[[VAL_85:.*]] = fir.convert %[[VAL_84]] : (!fir.box<!fir.array<?x2xf32>>) -> !fir.box<none> 251! CHECK: %[[VAL_86:.*]] = fir.call @_FortranAioOutputDescriptor(%[[VAL_82]], %[[VAL_85]]) : (!fir.ref<i8>, !fir.box<none>) -> i1 252! CHECK: %[[VAL_87:.*]] = fir.load %[[VAL_0]] : !fir.ref<i32> 253! CHECK: %[[VAL_88:.*]] = arith.subi %[[VAL_87]], %[[VAL_6]] : i32 254! CHECK: %[[VAL_89:.*]] = fir.convert %[[VAL_88]] : (i32) -> index 255! CHECK: %[[VAL_90:.*]] = fir.convert %[[VAL_87]] : (i32) -> index 256! 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> 257! 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>> 258! CHECK: %[[VAL_93:.*]] = fir.convert %[[VAL_92]] : (!fir.box<!fir.array<?x?xf32>>) -> !fir.box<none> 259! CHECK: %[[VAL_94:.*]] = fir.call @_FortranAioOutputDescriptor(%[[VAL_82]], %[[VAL_93]]) : (!fir.ref<i8>, !fir.box<none>) -> i1 260! CHECK: %[[VAL_95:.*]] = fir.call @_FortranAioEndIoStatement(%[[VAL_82]]) : (!fir.ref<i8>) -> i32 261! CHECK: return 262! CHECK: } 263 264! CHECK-LABEL: func @_QPss4( 265! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<i32> {fir.bindc_name = "n"}) { 266! CHECK-DAG: %[[VAL_1:.*]] = arith.constant -1 : index 267! CHECK-DAG: %[[VAL_2:.*]] = arith.constant 2 : index 268! CHECK-DAG: %[[VAL_3:.*]] = arith.constant 1 : index 269! CHECK-DAG: %[[VAL_4:.*]] = arith.constant -2 : i32 270! CHECK-DAG: %[[VAL_5:.*]] = arith.constant 0 : index 271! CHECK-DAG: %[[VAL_6:.*]] = arith.constant 1 : i32 272! CHECK-DAG: %[[VAL_7:.*]] = arith.constant 7.000000e+00 : f32 273! CHECK-DAG: %[[VAL_8:.*]] = arith.constant -1 : i32 274! CHECK: %[[VAL_10:.*]] = fir.load %[[VAL_0]] : !fir.ref<i32> 275! CHECK: %[[VAL_11A:.*]] = fir.convert %[[VAL_10]] : (i32) -> index 276! CHECK: %[[CMP:.*]] = arith.cmpi sgt, %[[VAL_11A]], %[[VAL_5]] : index 277! CHECK: %[[VAL_11:.*]] = arith.select %[[CMP]], %[[VAL_11A]], %[[VAL_5]] : index 278! CHECK: %[[VAL_12:.*]] = fir.alloca !fir.array<?x2xf32>, %[[VAL_11]] {bindc_name = "aa", uniq_name = "_QFss4Eaa"} 279! CHECK: %[[VAL_13:.*]] = fir.shape %[[VAL_11]], %[[VAL_2]] : (index, index) -> !fir.shape<2> 280! CHECK: %[[VAL_14:.*]] = fir.convert %[[VAL_4]] : (i32) -> f32 281! CHECK: br ^bb1(%[[VAL_5]], %[[VAL_2]] : index, index) 282! CHECK: ^bb1(%[[VAL_15:.*]]: index, %[[VAL_16:.*]]: index): 283! CHECK: %[[VAL_17:.*]] = arith.cmpi sgt, %[[VAL_16]], %[[VAL_5]] : index 284! CHECK: cond_br %[[VAL_17]], ^bb2(%[[VAL_5]], %[[VAL_11]] : index, index), ^bb5 285! CHECK: ^bb2(%[[VAL_18:.*]]: index, %[[VAL_19:.*]]: index): 286! CHECK: %[[VAL_20:.*]] = arith.cmpi sgt, %[[VAL_19]], %[[VAL_5]] : index 287! CHECK: cond_br %[[VAL_20]], ^bb3, ^bb4 288! CHECK: ^bb3: 289! CHECK: %[[VAL_21:.*]] = arith.addi %[[VAL_18]], %[[VAL_3]] : index 290! CHECK: %[[VAL_22:.*]] = arith.addi %[[VAL_15]], %[[VAL_3]] : index 291! 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> 292! CHECK: fir.store %[[VAL_14]] to %[[VAL_23]] : !fir.ref<f32> 293! CHECK: %[[VAL_24:.*]] = arith.subi %[[VAL_19]], %[[VAL_3]] : index 294! CHECK: br ^bb2(%[[VAL_21]], %[[VAL_24]] : index, index) 295! CHECK: ^bb4: 296! CHECK: %[[VAL_25:.*]] = arith.addi %[[VAL_15]], %[[VAL_3]] : index 297! CHECK: %[[VAL_26:.*]] = arith.subi %[[VAL_16]], %[[VAL_3]] : index 298! CHECK: br ^bb1(%[[VAL_25]], %[[VAL_26]] : index, index) 299! CHECK: ^bb5: 300! CHECK: %[[VAL_27:.*]] = fir.load %[[VAL_0]] : !fir.ref<i32> 301! CHECK: %[[VAL_28:.*]] = fir.convert %[[VAL_27]] : (i32) -> index 302! CHECK: %[[VAL_29:.*]] = arith.addi %[[VAL_28]], %[[VAL_1]] : index 303! CHECK: %[[VAL_30:.*]] = arith.cmpi sgt, %[[VAL_29]], %[[VAL_5]] : index 304! CHECK: %[[VAL_31:.*]] = arith.select %[[VAL_30]], %[[VAL_29]], %[[VAL_5]] : index 305! 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> 306! CHECK: %[[VAL_33:.*]] = fir.allocmem !fir.array<?x2xf32>, %[[VAL_11]] 307! CHECK: br ^bb6(%[[VAL_5]], %[[VAL_2]] : index, index) 308! CHECK: ^bb6(%[[VAL_34:.*]]: index, %[[VAL_35:.*]]: index): 309! CHECK: %[[VAL_36:.*]] = arith.cmpi sgt, %[[VAL_35]], %[[VAL_5]] : index 310! CHECK: cond_br %[[VAL_36]], ^bb7(%[[VAL_5]], %[[VAL_11]] : index, index), ^bb10 311! CHECK: ^bb7(%[[VAL_37:.*]]: index, %[[VAL_38:.*]]: index): 312! CHECK: %[[VAL_39:.*]] = arith.cmpi sgt, %[[VAL_38]], %[[VAL_5]] : index 313! CHECK: cond_br %[[VAL_39]], ^bb8, ^bb9 314! CHECK: ^bb8: 315! CHECK: %[[VAL_40:.*]] = arith.addi %[[VAL_37]], %[[VAL_3]] : index 316! CHECK: %[[VAL_41:.*]] = arith.addi %[[VAL_34]], %[[VAL_3]] : index 317! 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> 318! 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> 319! CHECK: %[[VAL_44:.*]] = fir.load %[[VAL_42]] : !fir.ref<f32> 320! CHECK: fir.store %[[VAL_44]] to %[[VAL_43]] : !fir.ref<f32> 321! CHECK: %[[VAL_45:.*]] = arith.subi %[[VAL_38]], %[[VAL_3]] : index 322! CHECK: br ^bb7(%[[VAL_40]], %[[VAL_45]] : index, index) 323! CHECK: ^bb9: 324! CHECK: %[[VAL_46:.*]] = arith.addi %[[VAL_34]], %[[VAL_3]] : index 325! CHECK: %[[VAL_47:.*]] = arith.subi %[[VAL_35]], %[[VAL_3]] : index 326! CHECK: br ^bb6(%[[VAL_46]], %[[VAL_47]] : index, index) 327! CHECK: ^bb10: 328! CHECK: %[[VAL_48:.*]] = arith.subi %[[VAL_27]], %[[VAL_6]] : i32 329! CHECK: %[[VAL_49:.*]] = fir.convert %[[VAL_48]] : (i32) -> index 330! 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> 331! CHECK: br ^bb11(%[[VAL_5]], %[[VAL_2]] : index, index) 332! CHECK: ^bb11(%[[VAL_51:.*]]: index, %[[VAL_52:.*]]: index): 333! CHECK: %[[VAL_53:.*]] = arith.cmpi sgt, %[[VAL_52]], %[[VAL_5]] : index 334! CHECK: cond_br %[[VAL_53]], ^bb12(%[[VAL_5]], %[[VAL_31]] : index, index), ^bb15(%[[VAL_5]], %[[VAL_2]] : index, index) 335! CHECK: ^bb12(%[[VAL_54:.*]]: index, %[[VAL_55:.*]]: index): 336! CHECK: %[[VAL_56:.*]] = arith.cmpi sgt, %[[VAL_55]], %[[VAL_5]] : index 337! CHECK: cond_br %[[VAL_56]], ^bb13, ^bb14 338! CHECK: ^bb13: 339! CHECK: %[[VAL_57:.*]] = arith.addi %[[VAL_54]], %[[VAL_3]] : index 340! CHECK: %[[VAL_58:.*]] = arith.addi %[[VAL_51]], %[[VAL_3]] : index 341! 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> 342! CHECK: %[[VAL_60:.*]] = fir.load %[[VAL_59]] : !fir.ref<f32> 343! CHECK: %[[VAL_61:.*]] = arith.addf %[[VAL_60]], %[[VAL_7]] : f32 344! 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> 345! CHECK: fir.store %[[VAL_61]] to %[[VAL_62]] : !fir.ref<f32> 346! CHECK: %[[VAL_63:.*]] = arith.subi %[[VAL_55]], %[[VAL_3]] : index 347! CHECK: br ^bb12(%[[VAL_57]], %[[VAL_63]] : index, index) 348! CHECK: ^bb14: 349! CHECK: %[[VAL_64:.*]] = arith.addi %[[VAL_51]], %[[VAL_3]] : index 350! CHECK: %[[VAL_65:.*]] = arith.subi %[[VAL_52]], %[[VAL_3]] : index 351! CHECK: br ^bb11(%[[VAL_64]], %[[VAL_65]] : index, index) 352! CHECK: ^bb15(%[[VAL_66:.*]]: index, %[[VAL_67:.*]]: index): 353! CHECK: %[[VAL_68:.*]] = arith.cmpi sgt, %[[VAL_67]], %[[VAL_5]] : index 354! CHECK: cond_br %[[VAL_68]], ^bb16(%[[VAL_5]], %[[VAL_11]] : index, index), ^bb19 355! CHECK: ^bb16(%[[VAL_69:.*]]: index, %[[VAL_70:.*]]: index): 356! CHECK: %[[VAL_71:.*]] = arith.cmpi sgt, %[[VAL_70]], %[[VAL_5]] : index 357! CHECK: cond_br %[[VAL_71]], ^bb17, ^bb18 358! CHECK: ^bb17: 359! CHECK: %[[VAL_72:.*]] = arith.addi %[[VAL_69]], %[[VAL_3]] : index 360! CHECK: %[[VAL_73:.*]] = arith.addi %[[VAL_66]], %[[VAL_3]] : index 361! 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> 362! 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> 363! CHECK: %[[VAL_76:.*]] = fir.load %[[VAL_74]] : !fir.ref<f32> 364! CHECK: fir.store %[[VAL_76]] to %[[VAL_75]] : !fir.ref<f32> 365! CHECK: %[[VAL_77:.*]] = arith.subi %[[VAL_70]], %[[VAL_3]] : index 366! CHECK: br ^bb16(%[[VAL_72]], %[[VAL_77]] : index, index) 367! CHECK: ^bb18: 368! CHECK: %[[VAL_78:.*]] = arith.addi %[[VAL_66]], %[[VAL_3]] : index 369! CHECK: %[[VAL_79:.*]] = arith.subi %[[VAL_67]], %[[VAL_3]] : index 370! CHECK: br ^bb15(%[[VAL_78]], %[[VAL_79]] : index, index) 371! CHECK: ^bb19: 372! CHECK: fir.freemem %[[VAL_33]] : !fir.heap<!fir.array<?x2xf32>> 373! CHECK: %[[VAL_82:.*]] = fir.call @_FortranAioBeginExternalListOutput(%[[VAL_8]], %{{.*}}, %{{.*}}) : (i32, !fir.ref<i8>, i32) -> !fir.ref<i8> 374! 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! 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! CHECK: %[[VAL_85:.*]] = fir.convert %[[VAL_84]] : (!fir.box<!fir.array<2x?xf32>>) -> !fir.box<none> 377! CHECK: %[[VAL_86:.*]] = fir.call @_FortranAioOutputDescriptor(%[[VAL_82]], %[[VAL_85]]) : (!fir.ref<i8>, !fir.box<none>) -> i1 378! CHECK: %[[VAL_87:.*]] = fir.load %[[VAL_0]] : !fir.ref<i32> 379! CHECK: %[[VAL_88:.*]] = arith.subi %[[VAL_87]], %[[VAL_6]] : i32 380! CHECK: %[[VAL_89:.*]] = fir.convert %[[VAL_88]] : (i32) -> index 381! CHECK: %[[VAL_90:.*]] = fir.convert %[[VAL_87]] : (i32) -> index 382! 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> 383! 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>> 384! CHECK: %[[VAL_93:.*]] = fir.convert %[[VAL_92]] : (!fir.box<!fir.array<?x?xf32>>) -> !fir.box<none> 385! CHECK: %[[VAL_94:.*]] = fir.call @_FortranAioOutputDescriptor(%[[VAL_82]], %[[VAL_93]]) : (!fir.ref<i8>, !fir.box<none>) -> i1 386! CHECK: %[[VAL_95:.*]] = fir.call @_FortranAioEndIoStatement(%[[VAL_82]]) : (!fir.ref<i8>) -> i32 387! CHECK: return 388! CHECK: } 389 390 391! CHECK-LABEL: func @_QPtt1 392subroutine tt1 393 ! CHECK: fir.call @_FortranAioBeginExternalListOutput 394 ! CHECK: %[[temp3:[0-9]+]] = fir.allocmem !fir.array<3xf32> 395 ! CHECK: br ^bb1(%[[temp3]] 396 ! CHECK-NEXT: ^bb1(%[[temp3arg:[0-9]+]]: !fir.heap<!fir.array<3xf32>> 397 ! CHECK: %[[temp1:[0-9]+]] = fir.allocmem !fir.array<1xf32> 398 ! CHECK: fir.call @_QFtt1Pr 399 ! CHECK: fir.call @realloc 400 ! CHECK: fir.freemem %[[temp1]] : !fir.heap<!fir.array<1xf32>> 401 ! CHECK: %[[temp3x:[0-9]+]] = fir.allocmem !fir.array<3xf32> 402 ! CHECK: fir.call @_FortranAioOutputDescriptor 403 ! CHECK-NEXT: fir.freemem %[[temp3x]] : !fir.heap<!fir.array<3xf32>> 404 ! CHECK-NEXT: fir.freemem %[[temp3arg]] : !fir.heap<!fir.array<3xf32>> 405 ! CHECK-NEXT: fir.call @_FortranAioEndIoStatement 406 print*, [(r([7.0]),i=1,3)] 407contains 408 ! CHECK-LABEL: func @_QFtt1Pr 409 function r(x) 410 real x(:) 411 r = x(1) 412 end 413end 414