330 lines · plain
1! RUN: bbc -emit-fir -hlfir=false %s -o - | FileCheck %s2 3! CHECK-LABEL: func @_QQmain() attributes {fir.bindc_name = "NESTED_WHERE"} {4program nested_where5 6 ! CHECK: %[[VAL_0:.*]] = fir.alloca i32 {adapt.valuebyref, bindc_name = "i"}7 ! CHECK: %[[VAL_1:.*]] = fir.alloca i32 {adapt.valuebyref, bindc_name = "i"}8 ! CHECK: %[[VAL_2:.*]] = fir.alloca i32 {adapt.valuebyref, bindc_name = "i"}9 ! CHECK: %[[VAL_3:.*]] = fir.alloca tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>10 ! CHECK: %[[VAL_4:.*]] = fir.alloca tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>11 ! CHECK: %[[VAL_5:.*]] = fir.address_of(@_QFEa) : !fir.ref<!fir.array<3xi32>>12 ! CHECK: %[[VAL_6:.*]] = arith.constant 3 : index13 ! CHECK: %[[VAL_7:.*]] = fir.address_of(@_QFEmask1) : !fir.ref<!fir.array<3x!fir.logical<4>>>14 ! CHECK: %[[VAL_8:.*]] = arith.constant 3 : index15 ! CHECK: %[[VAL_9:.*]] = fir.address_of(@_QFEmask2) : !fir.ref<!fir.array<3x!fir.logical<4>>>16 ! CHECK: %[[VAL_10:.*]] = arith.constant 3 : index17 ! CHECK: %[[VAL_11:.*]] = arith.constant 0 : i3218 ! CHECK: %[[VAL_12:.*]] = arith.constant 0 : i6419 ! CHECK: %[[VAL_13:.*]] = fir.coordinate_of %[[VAL_4]], %[[VAL_11]] : (!fir.ref<tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>, i32) -> !fir.ref<i64>20 ! CHECK: fir.store %[[VAL_12]] to %[[VAL_13]] : !fir.ref<i64>21 ! CHECK: %[[VAL_14:.*]] = arith.constant 1 : i3222 ! CHECK: %[[VAL_15:.*]] = fir.zero_bits !fir.heap<!fir.array<?xi8>>23 ! CHECK: %[[VAL_16:.*]] = fir.coordinate_of %[[VAL_4]], %[[VAL_14]] : (!fir.ref<tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>, i32) -> !fir.ref<!fir.heap<!fir.array<?xi8>>>24 ! CHECK: fir.store %[[VAL_15]] to %[[VAL_16]] : !fir.ref<!fir.heap<!fir.array<?xi8>>>25 ! CHECK: %[[VAL_17:.*]] = arith.constant 2 : i3226 ! CHECK: %[[VAL_18:.*]] = fir.zero_bits !fir.heap<!fir.array<?xi64>>27 ! CHECK: %[[VAL_19:.*]] = fir.coordinate_of %[[VAL_4]], %[[VAL_17]] : (!fir.ref<tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>, i32) -> !fir.ref<!fir.heap<!fir.array<?xi64>>>28 ! CHECK: fir.store %[[VAL_18]] to %[[VAL_19]] : !fir.ref<!fir.heap<!fir.array<?xi64>>>29 ! CHECK: %[[VAL_20:.*]] = arith.constant 0 : i3230 ! CHECK: %[[VAL_21:.*]] = arith.constant 0 : i6431 ! CHECK: %[[VAL_22:.*]] = fir.coordinate_of %[[VAL_3]], %[[VAL_20]] : (!fir.ref<tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>, i32) -> !fir.ref<i64>32 ! CHECK: fir.store %[[VAL_21]] to %[[VAL_22]] : !fir.ref<i64>33 ! CHECK: %[[VAL_23:.*]] = arith.constant 1 : i3234 ! CHECK: %[[VAL_24:.*]] = fir.zero_bits !fir.heap<!fir.array<?xi8>>35 ! CHECK: %[[VAL_25:.*]] = fir.coordinate_of %[[VAL_3]], %[[VAL_23]] : (!fir.ref<tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>, i32) -> !fir.ref<!fir.heap<!fir.array<?xi8>>>36 ! CHECK: fir.store %[[VAL_24]] to %[[VAL_25]] : !fir.ref<!fir.heap<!fir.array<?xi8>>>37 ! CHECK: %[[VAL_26:.*]] = arith.constant 2 : i3238 ! CHECK: %[[VAL_27:.*]] = fir.zero_bits !fir.heap<!fir.array<?xi64>>39 ! CHECK: %[[VAL_28:.*]] = fir.coordinate_of %[[VAL_3]], %[[VAL_26]] : (!fir.ref<tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>, i32) -> !fir.ref<!fir.heap<!fir.array<?xi64>>>40 ! CHECK: fir.store %[[VAL_27]] to %[[VAL_28]] : !fir.ref<!fir.heap<!fir.array<?xi64>>>41 ! CHECK: %[[VAL_29:.*]] = arith.constant 1 : i3242 ! CHECK: %[[VAL_30:.*]] = fir.convert %[[VAL_29]] : (i32) -> index43 ! CHECK: %[[VAL_31:.*]] = arith.constant 3 : i3244 ! CHECK: %[[VAL_32:.*]] = fir.convert %[[VAL_31]] : (i32) -> index45 ! CHECK: %[[VAL_33:.*]] = arith.constant 1 : index46 ! CHECK: %[[VAL_34:.*]] = fir.shape %[[VAL_6]] : (index) -> !fir.shape<1>47 ! CHECK: %[[VAL_35:.*]] = fir.array_load %[[VAL_5]](%[[VAL_34]]) : (!fir.ref<!fir.array<3xi32>>, !fir.shape<1>) -> !fir.array<3xi32>48 ! CHECK: %[[VAL_36:.*]] = fir.do_loop %[[VAL_37:.*]] = %[[VAL_30]] to %[[VAL_32]] step %[[VAL_33]] unordered iter_args(%[[VAL_38:.*]] = %[[VAL_35]]) -> (!fir.array<3xi32>) {49 ! CHECK: %[[VAL_39:.*]] = fir.convert %[[VAL_37]] : (index) -> i3250 ! CHECK: fir.store %[[VAL_39]] to %[[VAL_2]] : !fir.ref<i32>51 ! CHECK: %[[VAL_40:.*]] = arith.constant 1 : i6452 ! CHECK: %[[VAL_41:.*]] = arith.constant 0 : i6453 ! CHECK: %[[VAL_42:.*]] = fir.convert %[[VAL_30]] : (index) -> i6454 ! CHECK: %[[VAL_43:.*]] = fir.convert %[[VAL_32]] : (index) -> i6455 ! CHECK: %[[VAL_44:.*]] = fir.convert %[[VAL_33]] : (index) -> i6456 ! CHECK: %[[VAL_45:.*]] = arith.subi %[[VAL_43]], %[[VAL_42]] : i6457 ! CHECK: %[[VAL_46:.*]] = arith.addi %[[VAL_45]], %[[VAL_44]] : i6458 ! CHECK: %[[VAL_47:.*]] = arith.divsi %[[VAL_46]], %[[VAL_44]] : i6459 ! CHECK: %[[VAL_48:.*]] = arith.cmpi sgt, %[[VAL_47]], %[[VAL_41]] : i6460 ! CHECK: %[[VAL_49:.*]] = arith.select %[[VAL_48]], %[[VAL_47]], %[[VAL_41]] : i6461 ! CHECK: %[[VAL_50:.*]] = arith.constant 1 : i3262 ! CHECK: %[[VAL_51:.*]] = fir.coordinate_of %[[VAL_4]], %[[VAL_50]] : (!fir.ref<tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>, i32) -> !fir.ref<!fir.heap<!fir.array<?xi8>>>63 ! CHECK: %[[VAL_52:.*]] = fir.load %[[VAL_51]] : !fir.ref<!fir.heap<!fir.array<?xi8>>>64 ! CHECK: %[[VAL_53:.*]] = fir.convert %[[VAL_52]] : (!fir.heap<!fir.array<?xi8>>) -> i6465 ! CHECK: %[[VAL_54:.*]] = arith.constant 0 : i6466 ! CHECK: %[[VAL_55:.*]] = arith.cmpi eq, %[[VAL_53]], %[[VAL_54]] : i6467 ! CHECK: fir.if %[[VAL_55]] {68 ! CHECK: %[[VAL_56:.*]] = arith.constant true69 ! CHECK: %[[VAL_57:.*]] = arith.constant 1 : i6470 ! CHECK: %[[VAL_58:.*]] = fir.allocmem !fir.array<1xi64>71 ! CHECK: %[[VAL_59:.*]] = arith.constant 0 : i3272 ! CHECK: %[[VAL_60:.*]] = fir.coordinate_of %[[VAL_58]], %[[VAL_59]] : (!fir.heap<!fir.array<1xi64>>, i32) -> !fir.ref<i64>73 ! CHECK: fir.store %[[VAL_49]] to %[[VAL_60]] : !fir.ref<i64>74 ! CHECK: %[[VAL_61:.*]] = fir.convert %[[VAL_4]] : (!fir.ref<tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>) -> !fir.llvm_ptr<i8>75 ! CHECK: %[[VAL_62:.*]] = fir.convert %[[VAL_58]] : (!fir.heap<!fir.array<1xi64>>) -> !fir.ref<i64>76 ! CHECK: %[[VAL_63:.*]] = fir.call @_FortranARaggedArrayAllocate(%[[VAL_61]], %[[VAL_56]], %[[VAL_57]], %[[VAL_40]], %[[VAL_62]]) {{.*}}: (!fir.llvm_ptr<i8>, i1, i64, i64, !fir.ref<i64>) -> !fir.llvm_ptr<i8>77 ! CHECK: }78 ! CHECK: %[[VAL_64:.*]] = arith.subi %[[VAL_37]], %[[VAL_30]] : index79 ! CHECK: %[[VAL_65:.*]] = arith.divsi %[[VAL_64]], %[[VAL_33]] : index80 ! CHECK: %[[VAL_66:.*]] = arith.constant 1 : index81 ! CHECK: %[[VAL_67:.*]] = arith.addi %[[VAL_65]], %[[VAL_66]] : index82 ! CHECK: %[[VAL_68:.*]] = arith.constant 1 : i3283 ! CHECK: %[[VAL_69:.*]] = fir.coordinate_of %[[VAL_4]], %[[VAL_68]] : (!fir.ref<tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>, i32) -> !fir.ref<!fir.heap<!fir.array<?xi8>>>84 ! CHECK: %[[VAL_70:.*]] = fir.load %[[VAL_69]] : !fir.ref<!fir.heap<!fir.array<?xi8>>>85 ! CHECK: %[[VAL_71:.*]] = fir.convert %[[VAL_70]] : (!fir.heap<!fir.array<?xi8>>) -> !fir.ref<!fir.array<?xtuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>>86 ! CHECK: %[[VAL_72:.*]] = fir.shape %[[VAL_49]] : (i64) -> !fir.shape<1>87 ! CHECK: %[[VAL_73:.*]] = fir.array_coor %[[VAL_71]](%[[VAL_72]]) %[[VAL_67]] : (!fir.ref<!fir.array<?xtuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>>, !fir.shape<1>, index) -> !fir.ref<tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>88 ! CHECK: %[[VAL_74:.*]] = fir.shape %[[VAL_8]] : (index) -> !fir.shape<1>89 ! CHECK: %[[VAL_75:.*]] = fir.array_load %[[VAL_7]](%[[VAL_74]]) : (!fir.ref<!fir.array<3x!fir.logical<4>>>, !fir.shape<1>) -> !fir.array<3x!fir.logical<4>>90 ! CHECK: %[[VAL_76:.*]] = arith.constant 1 : i3291 ! CHECK: %[[VAL_77:.*]] = fir.coordinate_of %[[VAL_73]], %[[VAL_76]] : (!fir.ref<tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>, i32) -> !fir.ref<!fir.heap<!fir.array<?xi8>>>92 ! CHECK: %[[VAL_78:.*]] = fir.load %[[VAL_77]] : !fir.ref<!fir.heap<!fir.array<?xi8>>>93 ! CHECK: %[[VAL_79:.*]] = fir.shape %[[VAL_8]] : (index) -> !fir.shape<1>94 ! CHECK: %[[VAL_80:.*]] = fir.array_load %[[VAL_78]](%[[VAL_79]]) : (!fir.heap<!fir.array<?xi8>>, !fir.shape<1>) -> !fir.array<?xi8>95 ! CHECK: %[[VAL_81:.*]] = arith.constant 1 : i6496 ! CHECK: %[[VAL_82:.*]] = arith.constant 1 : i3297 ! CHECK: %[[VAL_83:.*]] = fir.coordinate_of %[[VAL_73]], %[[VAL_82]] : (!fir.ref<tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>, i32) -> !fir.ref<!fir.heap<!fir.array<?xi8>>>98 ! CHECK: %[[VAL_84:.*]] = fir.load %[[VAL_83]] : !fir.ref<!fir.heap<!fir.array<?xi8>>>99 ! CHECK: %[[VAL_85:.*]] = fir.convert %[[VAL_84]] : (!fir.heap<!fir.array<?xi8>>) -> i64100 ! CHECK: %[[VAL_86:.*]] = arith.constant 0 : i64101 ! CHECK: %[[VAL_87:.*]] = arith.cmpi eq, %[[VAL_85]], %[[VAL_86]] : i64102 ! CHECK: fir.if %[[VAL_87]] {103 ! CHECK: %[[VAL_88:.*]] = arith.constant false104 ! CHECK: %[[VAL_89:.*]] = arith.constant 1 : i64105 ! CHECK: %[[VAL_90:.*]] = fir.allocmem !fir.array<1xi64>106 ! CHECK: %[[VAL_91:.*]] = arith.constant 0 : i32107 ! CHECK: %[[VAL_92:.*]] = fir.coordinate_of %[[VAL_90]], %[[VAL_91]] : (!fir.heap<!fir.array<1xi64>>, i32) -> !fir.ref<i64>108 ! CHECK: %[[VAL_93:.*]] = fir.convert %[[VAL_8]] : (index) -> i64109 ! CHECK: fir.store %[[VAL_93]] to %[[VAL_92]] : !fir.ref<i64>110 ! CHECK: %[[VAL_94:.*]] = fir.convert %[[VAL_73]] : (!fir.ref<tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>) -> !fir.llvm_ptr<i8>111 ! CHECK: %[[VAL_95:.*]] = fir.convert %[[VAL_90]] : (!fir.heap<!fir.array<1xi64>>) -> !fir.ref<i64>112 ! CHECK: %[[VAL_96:.*]] = fir.call @_FortranARaggedArrayAllocate(%[[VAL_94]], %[[VAL_88]], %[[VAL_89]], %[[VAL_81]], %[[VAL_95]]) {{.*}}: (!fir.llvm_ptr<i8>, i1, i64, i64, !fir.ref<i64>) -> !fir.llvm_ptr<i8>113 ! CHECK: }114 ! CHECK: %[[VAL_97:.*]] = arith.constant 1 : index115 ! CHECK: %[[VAL_98:.*]] = arith.constant 0 : index116 ! CHECK: %[[VAL_99:.*]] = arith.subi %[[VAL_8]], %[[VAL_97]] : index117 ! CHECK: %[[VAL_100:.*]] = fir.do_loop %[[VAL_101:.*]] = %[[VAL_98]] to %[[VAL_99]] step %[[VAL_97]] unordered iter_args(%[[VAL_102:.*]] = %[[VAL_80]]) -> (!fir.array<?xi8>) {118 ! CHECK: %[[VAL_103:.*]] = fir.array_fetch %[[VAL_75]], %[[VAL_101]] : (!fir.array<3x!fir.logical<4>>, index) -> !fir.logical<4>119 ! CHECK: %[[VAL_104:.*]] = arith.constant 1 : i32120 ! CHECK: %[[VAL_105:.*]] = fir.coordinate_of %[[VAL_73]], %[[VAL_104]] : (!fir.ref<tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>, i32) -> !fir.ref<!fir.heap<!fir.array<?xi8>>>121 ! CHECK: %[[VAL_106:.*]] = fir.load %[[VAL_105]] : !fir.ref<!fir.heap<!fir.array<?xi8>>>122 ! CHECK: %[[VAL_107:.*]] = fir.shape %[[VAL_8]] : (index) -> !fir.shape<1>123 ! CHECK: %[[VAL_108:.*]] = arith.constant 1 : index124 ! CHECK: %[[VAL_109:.*]] = arith.addi %[[VAL_101]], %[[VAL_108]] : index125 ! CHECK: %[[VAL_110:.*]] = fir.array_coor %[[VAL_106]](%[[VAL_107]]) %[[VAL_109]] : (!fir.heap<!fir.array<?xi8>>, !fir.shape<1>, index) -> !fir.ref<i8>126 ! CHECK: %[[VAL_111:.*]] = fir.convert %[[VAL_103]] : (!fir.logical<4>) -> i8127 ! CHECK: fir.store %[[VAL_111]] to %[[VAL_110]] : !fir.ref<i8>128 ! CHECK: fir.result %[[VAL_102]] : !fir.array<?xi8>129 ! CHECK: }130 ! CHECK: fir.result %[[VAL_38]] : !fir.array<3xi32>131 ! CHECK: }132 ! CHECK: %[[VAL_112:.*]] = fir.do_loop %[[VAL_113:.*]] = %[[VAL_30]] to %[[VAL_32]] step %[[VAL_33]] unordered iter_args(%[[VAL_114:.*]] = %[[VAL_35]]) -> (!fir.array<3xi32>) {133 ! CHECK: %[[VAL_115:.*]] = fir.convert %[[VAL_113]] : (index) -> i32134 ! CHECK: fir.store %[[VAL_115]] to %[[VAL_1]] : !fir.ref<i32>135 ! CHECK: %[[VAL_116:.*]] = arith.constant 1 : i64136 ! CHECK: %[[VAL_117:.*]] = arith.constant 0 : i64137 ! CHECK: %[[VAL_118:.*]] = fir.convert %[[VAL_30]] : (index) -> i64138 ! CHECK: %[[VAL_119:.*]] = fir.convert %[[VAL_32]] : (index) -> i64139 ! CHECK: %[[VAL_120:.*]] = fir.convert %[[VAL_33]] : (index) -> i64140 ! CHECK: %[[VAL_121:.*]] = arith.subi %[[VAL_119]], %[[VAL_118]] : i64141 ! CHECK: %[[VAL_122:.*]] = arith.addi %[[VAL_121]], %[[VAL_120]] : i64142 ! CHECK: %[[VAL_123:.*]] = arith.divsi %[[VAL_122]], %[[VAL_120]] : i64143 ! CHECK: %[[VAL_124:.*]] = arith.cmpi sgt, %[[VAL_123]], %[[VAL_117]] : i64144 ! CHECK: %[[VAL_125:.*]] = arith.select %[[VAL_124]], %[[VAL_123]], %[[VAL_117]] : i64145 ! CHECK: %[[VAL_126:.*]] = arith.constant 1 : i32146 ! CHECK: %[[VAL_127:.*]] = fir.coordinate_of %[[VAL_3]], %[[VAL_126]] : (!fir.ref<tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>, i32) -> !fir.ref<!fir.heap<!fir.array<?xi8>>>147 ! CHECK: %[[VAL_128:.*]] = fir.load %[[VAL_127]] : !fir.ref<!fir.heap<!fir.array<?xi8>>>148 ! CHECK: %[[VAL_129:.*]] = fir.convert %[[VAL_128]] : (!fir.heap<!fir.array<?xi8>>) -> i64149 ! CHECK: %[[VAL_130:.*]] = arith.constant 0 : i64150 ! CHECK: %[[VAL_131:.*]] = arith.cmpi eq, %[[VAL_129]], %[[VAL_130]] : i64151 ! CHECK: fir.if %[[VAL_131]] {152 ! CHECK: %[[VAL_132:.*]] = arith.constant true153 ! CHECK: %[[VAL_133:.*]] = arith.constant 1 : i64154 ! CHECK: %[[VAL_134:.*]] = fir.allocmem !fir.array<1xi64>155 ! CHECK: %[[VAL_135:.*]] = arith.constant 0 : i32156 ! CHECK: %[[VAL_136:.*]] = fir.coordinate_of %[[VAL_134]], %[[VAL_135]] : (!fir.heap<!fir.array<1xi64>>, i32) -> !fir.ref<i64>157 ! CHECK: fir.store %[[VAL_125]] to %[[VAL_136]] : !fir.ref<i64>158 ! CHECK: %[[VAL_137:.*]] = fir.convert %[[VAL_3]] : (!fir.ref<tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>) -> !fir.llvm_ptr<i8>159 ! CHECK: %[[VAL_138:.*]] = fir.convert %[[VAL_134]] : (!fir.heap<!fir.array<1xi64>>) -> !fir.ref<i64>160 ! CHECK: %[[VAL_139:.*]] = fir.call @_FortranARaggedArrayAllocate(%[[VAL_137]], %[[VAL_132]], %[[VAL_133]], %[[VAL_116]], %[[VAL_138]]) {{.*}}: (!fir.llvm_ptr<i8>, i1, i64, i64, !fir.ref<i64>) -> !fir.llvm_ptr<i8>161 ! CHECK: }162 ! CHECK: %[[VAL_140:.*]] = arith.subi %[[VAL_113]], %[[VAL_30]] : index163 ! CHECK: %[[VAL_141:.*]] = arith.divsi %[[VAL_140]], %[[VAL_33]] : index164 ! CHECK: %[[VAL_142:.*]] = arith.constant 1 : index165 ! CHECK: %[[VAL_143:.*]] = arith.addi %[[VAL_141]], %[[VAL_142]] : index166 ! CHECK: %[[VAL_144:.*]] = arith.constant 1 : i32167 ! CHECK: %[[VAL_145:.*]] = fir.coordinate_of %[[VAL_3]], %[[VAL_144]] : (!fir.ref<tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>, i32) -> !fir.ref<!fir.heap<!fir.array<?xi8>>>168 ! CHECK: %[[VAL_146:.*]] = fir.load %[[VAL_145]] : !fir.ref<!fir.heap<!fir.array<?xi8>>>169 ! CHECK: %[[VAL_147:.*]] = fir.convert %[[VAL_146]] : (!fir.heap<!fir.array<?xi8>>) -> !fir.ref<!fir.array<?xtuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>>170 ! CHECK: %[[VAL_148:.*]] = fir.shape %[[VAL_125]] : (i64) -> !fir.shape<1>171 ! CHECK: %[[VAL_149:.*]] = fir.array_coor %[[VAL_147]](%[[VAL_148]]) %[[VAL_143]] : (!fir.ref<!fir.array<?xtuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>>, !fir.shape<1>, index) -> !fir.ref<tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>172 ! CHECK: %[[VAL_150:.*]] = fir.shape %[[VAL_10]] : (index) -> !fir.shape<1>173 ! CHECK: %[[VAL_151:.*]] = fir.array_load %[[VAL_9]](%[[VAL_150]]) : (!fir.ref<!fir.array<3x!fir.logical<4>>>, !fir.shape<1>) -> !fir.array<3x!fir.logical<4>>174 ! CHECK: %[[VAL_152:.*]] = arith.constant 1 : i32175 ! CHECK: %[[VAL_153:.*]] = fir.coordinate_of %[[VAL_149]], %[[VAL_152]] : (!fir.ref<tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>, i32) -> !fir.ref<!fir.heap<!fir.array<?xi8>>>176 ! CHECK: %[[VAL_154:.*]] = fir.load %[[VAL_153]] : !fir.ref<!fir.heap<!fir.array<?xi8>>>177 ! CHECK: %[[VAL_155:.*]] = fir.shape %[[VAL_10]] : (index) -> !fir.shape<1>178 ! CHECK: %[[VAL_156:.*]] = fir.array_load %[[VAL_154]](%[[VAL_155]]) : (!fir.heap<!fir.array<?xi8>>, !fir.shape<1>) -> !fir.array<?xi8>179 ! CHECK: %[[VAL_157:.*]] = arith.constant 1 : i64180 ! CHECK: %[[VAL_158:.*]] = arith.constant 1 : i32181 ! CHECK: %[[VAL_159:.*]] = fir.coordinate_of %[[VAL_149]], %[[VAL_158]] : (!fir.ref<tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>, i32) -> !fir.ref<!fir.heap<!fir.array<?xi8>>>182 ! CHECK: %[[VAL_160:.*]] = fir.load %[[VAL_159]] : !fir.ref<!fir.heap<!fir.array<?xi8>>>183 ! CHECK: %[[VAL_161:.*]] = fir.convert %[[VAL_160]] : (!fir.heap<!fir.array<?xi8>>) -> i64184 ! CHECK: %[[VAL_162:.*]] = arith.constant 0 : i64185 ! CHECK: %[[VAL_163:.*]] = arith.cmpi eq, %[[VAL_161]], %[[VAL_162]] : i64186 ! CHECK: fir.if %[[VAL_163]] {187 ! CHECK: %[[VAL_164:.*]] = arith.constant false188 ! CHECK: %[[VAL_165:.*]] = arith.constant 1 : i64189 ! CHECK: %[[VAL_166:.*]] = fir.allocmem !fir.array<1xi64>190 ! CHECK: %[[VAL_167:.*]] = arith.constant 0 : i32191 ! CHECK: %[[VAL_168:.*]] = fir.coordinate_of %[[VAL_166]], %[[VAL_167]] : (!fir.heap<!fir.array<1xi64>>, i32) -> !fir.ref<i64>192 ! CHECK: %[[VAL_169:.*]] = fir.convert %[[VAL_10]] : (index) -> i64193 ! CHECK: fir.store %[[VAL_169]] to %[[VAL_168]] : !fir.ref<i64>194 ! CHECK: %[[VAL_170:.*]] = fir.convert %[[VAL_149]] : (!fir.ref<tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>) -> !fir.llvm_ptr<i8>195 ! CHECK: %[[VAL_171:.*]] = fir.convert %[[VAL_166]] : (!fir.heap<!fir.array<1xi64>>) -> !fir.ref<i64>196 ! CHECK: %[[VAL_172:.*]] = fir.call @_FortranARaggedArrayAllocate(%[[VAL_170]], %[[VAL_164]], %[[VAL_165]], %[[VAL_157]], %[[VAL_171]]) {{.*}}: (!fir.llvm_ptr<i8>, i1, i64, i64, !fir.ref<i64>) -> !fir.llvm_ptr<i8>197 ! CHECK: }198 ! CHECK: %[[VAL_173:.*]] = arith.constant 1 : index199 ! CHECK: %[[VAL_174:.*]] = arith.constant 0 : index200 ! CHECK: %[[VAL_175:.*]] = arith.subi %[[VAL_10]], %[[VAL_173]] : index201 ! CHECK: %[[VAL_176:.*]] = fir.do_loop %[[VAL_177:.*]] = %[[VAL_174]] to %[[VAL_175]] step %[[VAL_173]] unordered iter_args(%[[VAL_178:.*]] = %[[VAL_156]]) -> (!fir.array<?xi8>) {202 ! CHECK: %[[VAL_179:.*]] = fir.array_fetch %[[VAL_151]], %[[VAL_177]] : (!fir.array<3x!fir.logical<4>>, index) -> !fir.logical<4>203 ! CHECK: %[[VAL_180:.*]] = arith.constant 1 : i32204 ! CHECK: %[[VAL_181:.*]] = fir.coordinate_of %[[VAL_149]], %[[VAL_180]] : (!fir.ref<tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>, i32) -> !fir.ref<!fir.heap<!fir.array<?xi8>>>205 ! CHECK: %[[VAL_182:.*]] = fir.load %[[VAL_181]] : !fir.ref<!fir.heap<!fir.array<?xi8>>>206 ! CHECK: %[[VAL_183:.*]] = fir.shape %[[VAL_10]] : (index) -> !fir.shape<1>207 ! CHECK: %[[VAL_184:.*]] = arith.constant 1 : index208 ! CHECK: %[[VAL_185:.*]] = arith.addi %[[VAL_177]], %[[VAL_184]] : index209 ! CHECK: %[[VAL_186:.*]] = fir.array_coor %[[VAL_182]](%[[VAL_183]]) %[[VAL_185]] : (!fir.heap<!fir.array<?xi8>>, !fir.shape<1>, index) -> !fir.ref<i8>210 ! CHECK: %[[VAL_187:.*]] = fir.convert %[[VAL_179]] : (!fir.logical<4>) -> i8211 ! CHECK: fir.store %[[VAL_187]] to %[[VAL_186]] : !fir.ref<i8>212 ! CHECK: fir.result %[[VAL_178]] : !fir.array<?xi8>213 ! CHECK: }214 ! CHECK: fir.result %[[VAL_114]] : !fir.array<3xi32>215 ! CHECK: }216 ! CHECK: %[[VAL_188:.*]] = fir.do_loop %[[VAL_189:.*]] = %[[VAL_30]] to %[[VAL_32]] step %[[VAL_33]] unordered iter_args(%[[VAL_190:.*]] = %[[VAL_35]]) -> (!fir.array<3xi32>) {217 ! CHECK: %[[VAL_191:.*]] = fir.convert %[[VAL_189]] : (index) -> i32218 ! CHECK: fir.store %[[VAL_191]] to %[[VAL_0]] : !fir.ref<i32>219 ! CHECK: %[[VAL_192:.*]] = arith.constant 0 : i64220 ! CHECK: %[[VAL_193:.*]] = fir.convert %[[VAL_30]] : (index) -> i64221 ! CHECK: %[[VAL_194:.*]] = fir.convert %[[VAL_32]] : (index) -> i64222 ! CHECK: %[[VAL_195:.*]] = fir.convert %[[VAL_33]] : (index) -> i64223 ! CHECK: %[[VAL_196:.*]] = arith.subi %[[VAL_194]], %[[VAL_193]] : i64224 ! CHECK: %[[VAL_197:.*]] = arith.addi %[[VAL_196]], %[[VAL_195]] : i64225 ! CHECK: %[[VAL_198:.*]] = arith.divsi %[[VAL_197]], %[[VAL_195]] : i64226 ! CHECK: %[[VAL_199:.*]] = arith.cmpi sgt, %[[VAL_198]], %[[VAL_192]] : i64227 ! CHECK: %[[VAL_200:.*]] = arith.select %[[VAL_199]], %[[VAL_198]], %[[VAL_192]] : i64228 ! CHECK: %[[VAL_201:.*]] = arith.subi %[[VAL_189]], %[[VAL_30]] : index229 ! CHECK: %[[VAL_202:.*]] = arith.divsi %[[VAL_201]], %[[VAL_33]] : index230 ! CHECK: %[[VAL_203:.*]] = arith.constant 1 : index231 ! CHECK: %[[VAL_204:.*]] = arith.addi %[[VAL_202]], %[[VAL_203]] : index232 ! CHECK: %[[VAL_205:.*]] = arith.constant 1 : i32233 ! CHECK: %[[VAL_206:.*]] = fir.coordinate_of %[[VAL_4]], %[[VAL_205]] : (!fir.ref<tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>, i32) -> !fir.ref<!fir.heap<!fir.array<?xi8>>>234 ! CHECK: %[[VAL_207:.*]] = fir.load %[[VAL_206]] : !fir.ref<!fir.heap<!fir.array<?xi8>>>235 ! CHECK: %[[VAL_208:.*]] = fir.convert %[[VAL_207]] : (!fir.heap<!fir.array<?xi8>>) -> !fir.ref<!fir.array<?xtuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>>236 ! CHECK: %[[VAL_209:.*]] = fir.shape %[[VAL_200]] : (i64) -> !fir.shape<1>237 ! CHECK: %[[VAL_210:.*]] = fir.array_coor %[[VAL_208]](%[[VAL_209]]) %[[VAL_204]] : (!fir.ref<!fir.array<?xtuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>>, !fir.shape<1>, index) -> !fir.ref<tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>238 ! CHECK: %[[VAL_211:.*]] = arith.constant 1 : i32239 ! CHECK: %[[VAL_212:.*]] = fir.coordinate_of %[[VAL_210]], %[[VAL_211]] : (!fir.ref<tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>, i32) -> !fir.ref<!fir.heap<!fir.array<?xi8>>>240 ! CHECK: %[[VAL_213:.*]] = fir.load %[[VAL_212]] : !fir.ref<!fir.heap<!fir.array<?xi8>>>241 ! CHECK: %[[VAL_214:.*]] = fir.convert %[[VAL_213]] : (!fir.heap<!fir.array<?xi8>>) -> !fir.ref<!fir.array<?xi8>>242 ! CHECK: %[[VAL_215:.*]] = arith.constant 2 : i32243 ! CHECK: %[[VAL_216:.*]] = fir.coordinate_of %[[VAL_210]], %[[VAL_215]] : (!fir.ref<tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>, i32) -> !fir.ref<!fir.heap<!fir.array<?xi64>>>244 ! CHECK: %[[VAL_217:.*]] = fir.load %[[VAL_216]] : !fir.ref<!fir.heap<!fir.array<?xi64>>>245 ! CHECK: %[[VAL_218:.*]] = arith.constant 0 : i32246 ! CHECK: %[[VAL_219:.*]] = fir.coordinate_of %[[VAL_217]], %[[VAL_218]] : (!fir.heap<!fir.array<?xi64>>, i32) -> !fir.ref<i64>247 ! CHECK: %[[VAL_220:.*]] = fir.load %[[VAL_219]] : !fir.ref<i64>248 ! CHECK: %[[VAL_221:.*]] = fir.convert %[[VAL_220]] : (i64) -> index249 ! CHECK: %[[VAL_222:.*]] = fir.shape %[[VAL_221]] : (index) -> !fir.shape<1>250 ! CHECK: %[[VAL_223:.*]] = arith.constant 0 : i64251 ! CHECK: %[[VAL_224:.*]] = fir.convert %[[VAL_30]] : (index) -> i64252 ! CHECK: %[[VAL_225:.*]] = fir.convert %[[VAL_32]] : (index) -> i64253 ! CHECK: %[[VAL_226:.*]] = fir.convert %[[VAL_33]] : (index) -> i64254 ! CHECK: %[[VAL_227:.*]] = arith.subi %[[VAL_225]], %[[VAL_224]] : i64255 ! CHECK: %[[VAL_228:.*]] = arith.addi %[[VAL_227]], %[[VAL_226]] : i64256 ! CHECK: %[[VAL_229:.*]] = arith.divsi %[[VAL_228]], %[[VAL_226]] : i64257 ! CHECK: %[[VAL_230:.*]] = arith.cmpi sgt, %[[VAL_229]], %[[VAL_223]] : i64258 ! CHECK: %[[VAL_231:.*]] = arith.select %[[VAL_230]], %[[VAL_229]], %[[VAL_223]] : i64259 ! CHECK: %[[VAL_232:.*]] = arith.subi %[[VAL_189]], %[[VAL_30]] : index260 ! CHECK: %[[VAL_233:.*]] = arith.divsi %[[VAL_232]], %[[VAL_33]] : index261 ! CHECK: %[[VAL_234:.*]] = arith.constant 1 : index262 ! CHECK: %[[VAL_235:.*]] = arith.addi %[[VAL_233]], %[[VAL_234]] : index263 ! CHECK: %[[VAL_236:.*]] = arith.constant 1 : i32264 ! CHECK: %[[VAL_237:.*]] = fir.coordinate_of %[[VAL_3]], %[[VAL_236]] : (!fir.ref<tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>, i32) -> !fir.ref<!fir.heap<!fir.array<?xi8>>>265 ! CHECK: %[[VAL_238:.*]] = fir.load %[[VAL_237]] : !fir.ref<!fir.heap<!fir.array<?xi8>>>266 ! CHECK: %[[VAL_239:.*]] = fir.convert %[[VAL_238]] : (!fir.heap<!fir.array<?xi8>>) -> !fir.ref<!fir.array<?xtuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>>267 ! CHECK: %[[VAL_240:.*]] = fir.shape %[[VAL_231]] : (i64) -> !fir.shape<1>268 ! CHECK: %[[VAL_241:.*]] = fir.array_coor %[[VAL_239]](%[[VAL_240]]) %[[VAL_235]] : (!fir.ref<!fir.array<?xtuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>>, !fir.shape<1>, index) -> !fir.ref<tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>269 ! CHECK: %[[VAL_242:.*]] = arith.constant 1 : i32270 ! CHECK: %[[VAL_243:.*]] = fir.coordinate_of %[[VAL_241]], %[[VAL_242]] : (!fir.ref<tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>, i32) -> !fir.ref<!fir.heap<!fir.array<?xi8>>>271 ! CHECK: %[[VAL_244:.*]] = fir.load %[[VAL_243]] : !fir.ref<!fir.heap<!fir.array<?xi8>>>272 ! CHECK: %[[VAL_245:.*]] = fir.convert %[[VAL_244]] : (!fir.heap<!fir.array<?xi8>>) -> !fir.ref<!fir.array<?xi8>>273 ! CHECK: %[[VAL_246:.*]] = arith.constant 2 : i32274 ! CHECK: %[[VAL_247:.*]] = fir.coordinate_of %[[VAL_241]], %[[VAL_246]] : (!fir.ref<tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>, i32) -> !fir.ref<!fir.heap<!fir.array<?xi64>>>275 ! CHECK: %[[VAL_248:.*]] = fir.load %[[VAL_247]] : !fir.ref<!fir.heap<!fir.array<?xi64>>>276 ! CHECK: %[[VAL_249:.*]] = arith.constant 0 : i32277 ! CHECK: %[[VAL_250:.*]] = fir.coordinate_of %[[VAL_248]], %[[VAL_249]] : (!fir.heap<!fir.array<?xi64>>, i32) -> !fir.ref<i64>278 ! CHECK: %[[VAL_251:.*]] = fir.load %[[VAL_250]] : !fir.ref<i64>279 ! CHECK: %[[VAL_252:.*]] = fir.convert %[[VAL_251]] : (i64) -> index280 ! CHECK: %[[VAL_253:.*]] = fir.shape %[[VAL_252]] : (index) -> !fir.shape<1>281 ! CHECK: %[[VAL_254:.*]] = arith.constant 1 : i32282 ! CHECK: %[[VAL_255:.*]] = arith.constant 1 : index283 ! CHECK: %[[VAL_256:.*]] = arith.constant 0 : index284 ! CHECK: %[[VAL_257:.*]] = arith.subi %[[VAL_221]], %[[VAL_255]] : index285 ! CHECK: %[[VAL_258:.*]] = fir.do_loop %[[VAL_259:.*]] = %[[VAL_256]] to %[[VAL_257]] step %[[VAL_255]] unordered iter_args(%[[VAL_260:.*]] = %[[VAL_190]]) -> (!fir.array<3xi32>) {286 ! CHECK: %[[VAL_261:.*]] = arith.constant 1 : index287 ! CHECK: %[[VAL_262:.*]] = arith.addi %[[VAL_259]], %[[VAL_261]] : index288 ! CHECK: %[[VAL_263:.*]] = fir.array_coor %[[VAL_214]](%[[VAL_222]]) %[[VAL_262]] : (!fir.ref<!fir.array<?xi8>>, !fir.shape<1>, index) -> !fir.ref<i8>289 ! CHECK: %[[VAL_264:.*]] = fir.load %[[VAL_263]] : !fir.ref<i8>290 ! CHECK: %[[VAL_265:.*]] = fir.convert %[[VAL_264]] : (i8) -> i1291 ! CHECK: %[[VAL_266:.*]] = fir.if %[[VAL_265]] -> (!fir.array<3xi32>) {292 ! CHECK: %[[VAL_267:.*]] = arith.constant 1 : index293 ! CHECK: %[[VAL_268:.*]] = arith.addi %[[VAL_259]], %[[VAL_267]] : index294 ! CHECK: %[[VAL_269:.*]] = fir.array_coor %[[VAL_245]](%[[VAL_253]]) %[[VAL_268]] : (!fir.ref<!fir.array<?xi8>>, !fir.shape<1>, index) -> !fir.ref<i8>295 ! CHECK: %[[VAL_270:.*]] = fir.load %[[VAL_269]] : !fir.ref<i8>296 ! CHECK: %[[VAL_271:.*]] = fir.convert %[[VAL_270]] : (i8) -> i1297 ! CHECK: %[[VAL_272:.*]] = fir.if %[[VAL_271]] -> (!fir.array<3xi32>) {298 ! CHECK: %[[VAL_273:.*]] = fir.array_update %[[VAL_260]], %[[VAL_254]], %[[VAL_259]] : (!fir.array<3xi32>, i32, index) -> !fir.array<3xi32>299 ! CHECK: fir.result %[[VAL_273]] : !fir.array<3xi32>300 ! CHECK: } else {301 ! CHECK: fir.result %[[VAL_260]] : !fir.array<3xi32>302 ! CHECK: }303 ! CHECK: fir.result %[[VAL_274:.*]] : !fir.array<3xi32>304 ! CHECK: } else {305 ! CHECK: fir.result %[[VAL_260]] : !fir.array<3xi32>306 ! CHECK: }307 ! CHECK: fir.result %[[VAL_275:.*]] : !fir.array<3xi32>308 ! CHECK: }309 ! CHECK: fir.result %[[VAL_276:.*]] : !fir.array<3xi32>310 ! CHECK: }311 ! CHECK: fir.array_merge_store %[[VAL_35]], %[[VAL_277:.*]] to %[[VAL_5]] : !fir.array<3xi32>, !fir.array<3xi32>, !fir.ref<!fir.array<3xi32>>312 ! CHECK: %[[VAL_278:.*]] = fir.convert %[[VAL_3]] : (!fir.ref<tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>) -> !fir.llvm_ptr<i8>313 ! CHECK: fir.call @_FortranARaggedArrayDeallocate(%[[VAL_278]]) {{.*}}: (!fir.llvm_ptr<i8>) -> ()314 ! CHECK: %[[VAL_280:.*]] = fir.convert %[[VAL_4]] : (!fir.ref<tuple<i64, !fir.heap<!fir.array<?xi8>>, !fir.heap<!fir.array<?xi64>>>>) -> !fir.llvm_ptr<i8>315 ! CHECK: fir.call @_FortranARaggedArrayDeallocate(%[[VAL_280]]) {{.*}}: (!fir.llvm_ptr<i8>) -> ()316 317 integer :: a(3) = 0318 logical :: mask1(3) = (/ .true.,.false.,.true. /)319 logical :: mask2(3) = (/ .true.,.true.,.false. /)320 forall (i=1:3)321 where (mask1)322 where (mask2)323 a = 1324 end where325 endwhere326 end forall327 ! CHECK: return328 ! CHECK: }329end program nested_where330