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