xref: /llvm-project/flang/test/Lower/where.f90 (revision fcd06d774dad1b5bcdc22f5f10a9d5c62c585814)
1f35f863aSjeanPerier  ! RUN: bbc -emit-fir -hlfir=false %s -o - | FileCheck %s
27a6a1655SValentin Clement
37a6a1655SValentin Clement  ! CHECK-LABEL: func @_QQmain() {
47a6a1655SValentin Clement  ! CHECK:         %[[VAL_0:.*]] = fir.address_of(@_QFEa) : !fir.ref<!fir.array<10xf32>>
57a6a1655SValentin Clement  ! CHECK:         %[[VAL_1:.*]] = arith.constant 10 : index
67a6a1655SValentin Clement  ! CHECK:         %[[VAL_2:.*]] = fir.address_of(@_QFEb) : !fir.ref<!fir.array<10xf32>>
77a6a1655SValentin Clement  ! CHECK:         %[[VAL_3:.*]] = arith.constant 10 : index
87a6a1655SValentin Clement  ! CHECK:         %[[VAL_5:.*]] = arith.constant 10 : index
97a6a1655SValentin Clement  ! CHECK:         %[[VAL_6:.*]] = fir.shape %[[VAL_1]] : (index) -> !fir.shape<1>
107a6a1655SValentin Clement  ! CHECK:         %[[VAL_7:.*]] = fir.array_load %[[VAL_0]](%[[VAL_6]]) : (!fir.ref<!fir.array<10xf32>>, !fir.shape<1>) -> !fir.array<10xf32>
117a6a1655SValentin Clement  ! CHECK:         %[[VAL_8:.*]] = arith.constant 4.000000e+00 : f32
127a6a1655SValentin Clement  ! CHECK:         %[[VAL_9:.*]] = fir.allocmem !fir.array<10x!fir.logical<4>>
137a6a1655SValentin Clement  ! CHECK:         %[[VAL_10:.*]] = fir.shape %[[VAL_5]] : (index) -> !fir.shape<1>
147a6a1655SValentin Clement  ! CHECK:         %[[VAL_11:.*]] = fir.array_load %[[VAL_9]](%[[VAL_10]]) : (!fir.heap<!fir.array<10x!fir.logical<4>>>, !fir.shape<1>) -> !fir.array<10x!fir.logical<4>>
157a6a1655SValentin Clement  ! CHECK:         %[[VAL_12:.*]] = arith.constant 1 : index
167a6a1655SValentin Clement  ! CHECK:         %[[VAL_13:.*]] = arith.constant 0 : index
177a6a1655SValentin Clement  ! CHECK:         %[[VAL_14:.*]] = arith.subi %[[VAL_5]], %[[VAL_12]] : index
187a6a1655SValentin Clement  ! CHECK:         %[[VAL_15:.*]] = fir.do_loop %[[VAL_16:.*]] = %[[VAL_13]] to %[[VAL_14]] step %[[VAL_12]] unordered iter_args(%[[VAL_17:.*]] = %[[VAL_11]]) -> (!fir.array<10x!fir.logical<4>>) {
197a6a1655SValentin Clement  ! CHECK:           %[[VAL_18:.*]] = fir.array_fetch %[[VAL_7]], %[[VAL_16]] : (!fir.array<10xf32>, index) -> f32
20*fcd06d77STom Eccles  ! CHECK:           %[[VAL_19:.*]] = arith.cmpf ogt, %[[VAL_18]], %[[VAL_8]] {{.*}} : f32
217a6a1655SValentin Clement  ! CHECK:           %[[VAL_20:.*]] = fir.convert %[[VAL_19]] : (i1) -> !fir.logical<4>
227a6a1655SValentin Clement  ! CHECK:           %[[VAL_21:.*]] = fir.array_update %[[VAL_17]], %[[VAL_20]], %[[VAL_16]] : (!fir.array<10x!fir.logical<4>>, !fir.logical<4>, index) -> !fir.array<10x!fir.logical<4>>
237a6a1655SValentin Clement  ! CHECK:           fir.result %[[VAL_21]] : !fir.array<10x!fir.logical<4>>
247a6a1655SValentin Clement  ! CHECK:         }
257a6a1655SValentin Clement  ! CHECK:         fir.array_merge_store %[[VAL_11]], %[[VAL_22:.*]] to %[[VAL_9]] : !fir.array<10x!fir.logical<4>>, !fir.array<10x!fir.logical<4>>, !fir.heap<!fir.array<10x!fir.logical<4>>>
267a6a1655SValentin Clement  ! CHECK:         %[[VAL_23:.*]] = fir.shape %[[VAL_5]] : (index) -> !fir.shape<1>
277a6a1655SValentin Clement  ! CHECK:         %[[VAL_24:.*]] = fir.shape %[[VAL_3]] : (index) -> !fir.shape<1>
287a6a1655SValentin Clement  ! CHECK:         %[[VAL_25:.*]] = fir.array_load %[[VAL_2]](%[[VAL_24]]) : (!fir.ref<!fir.array<10xf32>>, !fir.shape<1>) -> !fir.array<10xf32>
297a6a1655SValentin Clement  ! CHECK:         %[[VAL_26:.*]] = fir.shape %[[VAL_1]] : (index) -> !fir.shape<1>
307a6a1655SValentin Clement  ! CHECK:         %[[VAL_27:.*]] = fir.array_load %[[VAL_0]](%[[VAL_26]]) : (!fir.ref<!fir.array<10xf32>>, !fir.shape<1>) -> !fir.array<10xf32>
317a6a1655SValentin Clement  ! CHECK:         %[[VAL_28:.*]] = arith.constant 1 : index
327a6a1655SValentin Clement  ! CHECK:         %[[VAL_29:.*]] = arith.constant 0 : index
337a6a1655SValentin Clement  ! CHECK:         %[[VAL_30:.*]] = arith.subi %[[VAL_3]], %[[VAL_28]] : index
347a6a1655SValentin Clement  ! CHECK:         %[[VAL_31:.*]] = fir.do_loop %[[VAL_32:.*]] = %[[VAL_29]] to %[[VAL_30]] step %[[VAL_28]] unordered iter_args(%[[VAL_33:.*]] = %[[VAL_25]]) -> (!fir.array<10xf32>) {
357a6a1655SValentin Clement  ! CHECK:           %[[VAL_34:.*]] = arith.constant 1 : index
367a6a1655SValentin Clement  ! CHECK:           %[[VAL_35:.*]] = arith.addi %[[VAL_32]], %[[VAL_34]] : index
377a6a1655SValentin Clement  ! CHECK:           %[[VAL_36:.*]] = fir.array_coor %[[VAL_9]](%[[VAL_23]]) %[[VAL_35]] : (!fir.heap<!fir.array<10x!fir.logical<4>>>, !fir.shape<1>, index) -> !fir.ref<!fir.logical<4>>
387a6a1655SValentin Clement  ! CHECK:           %[[VAL_37:.*]] = fir.load %[[VAL_36]] : !fir.ref<!fir.logical<4>>
397a6a1655SValentin Clement  ! CHECK:           %[[VAL_38:.*]] = fir.convert %[[VAL_37]] : (!fir.logical<4>) -> i1
407a6a1655SValentin Clement  ! CHECK:           %[[VAL_39:.*]] = fir.if %[[VAL_38]] -> (!fir.array<10xf32>) {
417a6a1655SValentin Clement  ! CHECK:             %[[VAL_40:.*]] = fir.array_fetch %[[VAL_27]], %[[VAL_32]] : (!fir.array<10xf32>, index) -> f32
424cc9437aSTom Eccles  ! CHECK:             %[[VAL_41:.*]] = arith.negf %[[VAL_40]] {{.*}}: f32
437a6a1655SValentin Clement  ! CHECK:             %[[VAL_42:.*]] = fir.array_update %[[VAL_33]], %[[VAL_41]], %[[VAL_32]] : (!fir.array<10xf32>, f32, index) -> !fir.array<10xf32>
447a6a1655SValentin Clement  ! CHECK:             fir.result %[[VAL_42]] : !fir.array<10xf32>
457a6a1655SValentin Clement  ! CHECK:           } else {
467a6a1655SValentin Clement  ! CHECK:             fir.result %[[VAL_33]] : !fir.array<10xf32>
477a6a1655SValentin Clement  ! CHECK:           }
487a6a1655SValentin Clement  ! CHECK:           fir.result %[[VAL_43:.*]] : !fir.array<10xf32>
497a6a1655SValentin Clement  ! CHECK:         }
507a6a1655SValentin Clement  ! CHECK:         fir.array_merge_store %[[VAL_25]], %[[VAL_44:.*]] to %[[VAL_2]] : !fir.array<10xf32>, !fir.array<10xf32>, !fir.ref<!fir.array<10xf32>>
513348c083SValentin Clement  ! CHECK:         fir.freemem %[[VAL_9]] : !fir.heap<!fir.array<10x!fir.logical<4>>>
527a6a1655SValentin Clement  ! CHECK:         %[[VAL_46:.*]] = arith.constant 10 : index
537a6a1655SValentin Clement  ! CHECK:         %[[VAL_47:.*]] = fir.shape %[[VAL_1]] : (index) -> !fir.shape<1>
547a6a1655SValentin Clement  ! CHECK:         %[[VAL_48:.*]] = fir.array_load %[[VAL_0]](%[[VAL_47]]) : (!fir.ref<!fir.array<10xf32>>, !fir.shape<1>) -> !fir.array<10xf32>
557a6a1655SValentin Clement  ! CHECK:         %[[VAL_49:.*]] = arith.constant 1.000000e+02 : f32
567a6a1655SValentin Clement  ! CHECK:         %[[VAL_50:.*]] = fir.allocmem !fir.array<10x!fir.logical<4>>
577a6a1655SValentin Clement  ! CHECK:         %[[VAL_51:.*]] = fir.shape %[[VAL_46]] : (index) -> !fir.shape<1>
587a6a1655SValentin Clement  ! CHECK:         %[[VAL_52:.*]] = fir.array_load %[[VAL_50]](%[[VAL_51]]) : (!fir.heap<!fir.array<10x!fir.logical<4>>>, !fir.shape<1>) -> !fir.array<10x!fir.logical<4>>
597a6a1655SValentin Clement  ! CHECK:         %[[VAL_53:.*]] = arith.constant 1 : index
607a6a1655SValentin Clement  ! CHECK:         %[[VAL_54:.*]] = arith.constant 0 : index
617a6a1655SValentin Clement  ! CHECK:         %[[VAL_55:.*]] = arith.subi %[[VAL_46]], %[[VAL_53]] : index
627a6a1655SValentin Clement  ! CHECK:         %[[VAL_56:.*]] = fir.do_loop %[[VAL_57:.*]] = %[[VAL_54]] to %[[VAL_55]] step %[[VAL_53]] unordered iter_args(%[[VAL_58:.*]] = %[[VAL_52]]) -> (!fir.array<10x!fir.logical<4>>) {
637a6a1655SValentin Clement  ! CHECK:           %[[VAL_59:.*]] = fir.array_fetch %[[VAL_48]], %[[VAL_57]] : (!fir.array<10xf32>, index) -> f32
64*fcd06d77STom Eccles  ! CHECK:           %[[VAL_60:.*]] = arith.cmpf ogt, %[[VAL_59]], %[[VAL_49]] {{.*}} : f32
657a6a1655SValentin Clement  ! CHECK:           %[[VAL_61:.*]] = fir.convert %[[VAL_60]] : (i1) -> !fir.logical<4>
667a6a1655SValentin Clement  ! CHECK:           %[[VAL_62:.*]] = fir.array_update %[[VAL_58]], %[[VAL_61]], %[[VAL_57]] : (!fir.array<10x!fir.logical<4>>, !fir.logical<4>, index) -> !fir.array<10x!fir.logical<4>>
677a6a1655SValentin Clement  ! CHECK:           fir.result %[[VAL_62]] : !fir.array<10x!fir.logical<4>>
687a6a1655SValentin Clement  ! CHECK:         }
697a6a1655SValentin Clement  ! CHECK:         fir.array_merge_store %[[VAL_52]], %[[VAL_63:.*]] to %[[VAL_50]] : !fir.array<10x!fir.logical<4>>, !fir.array<10x!fir.logical<4>>, !fir.heap<!fir.array<10x!fir.logical<4>>>
707a6a1655SValentin Clement  ! CHECK:         %[[VAL_64:.*]] = fir.shape %[[VAL_46]] : (index) -> !fir.shape<1>
717a6a1655SValentin Clement  ! CHECK:         %[[VAL_65:.*]] = fir.shape %[[VAL_3]] : (index) -> !fir.shape<1>
727a6a1655SValentin Clement  ! CHECK:         %[[VAL_66:.*]] = fir.array_load %[[VAL_2]](%[[VAL_65]]) : (!fir.ref<!fir.array<10xf32>>, !fir.shape<1>) -> !fir.array<10xf32>
737a6a1655SValentin Clement  ! CHECK:         %[[VAL_67:.*]] = arith.constant 2.000000e+00 : f32
747a6a1655SValentin Clement  ! CHECK:         %[[VAL_68:.*]] = fir.shape %[[VAL_1]] : (index) -> !fir.shape<1>
757a6a1655SValentin Clement  ! CHECK:         %[[VAL_69:.*]] = fir.array_load %[[VAL_0]](%[[VAL_68]]) : (!fir.ref<!fir.array<10xf32>>, !fir.shape<1>) -> !fir.array<10xf32>
767a6a1655SValentin Clement  ! CHECK:         %[[VAL_70:.*]] = arith.constant 1 : index
777a6a1655SValentin Clement  ! CHECK:         %[[VAL_71:.*]] = arith.constant 0 : index
787a6a1655SValentin Clement  ! CHECK:         %[[VAL_72:.*]] = arith.subi %[[VAL_3]], %[[VAL_70]] : index
797a6a1655SValentin Clement  ! CHECK:         %[[VAL_73:.*]] = fir.do_loop %[[VAL_74:.*]] = %[[VAL_71]] to %[[VAL_72]] step %[[VAL_70]] unordered iter_args(%[[VAL_75:.*]] = %[[VAL_66]]) -> (!fir.array<10xf32>) {
807a6a1655SValentin Clement  ! CHECK:           %[[VAL_76:.*]] = arith.constant 1 : index
817a6a1655SValentin Clement  ! CHECK:           %[[VAL_77:.*]] = arith.addi %[[VAL_74]], %[[VAL_76]] : index
827a6a1655SValentin Clement  ! CHECK:           %[[VAL_78:.*]] = fir.array_coor %[[VAL_50]](%[[VAL_64]]) %[[VAL_77]] : (!fir.heap<!fir.array<10x!fir.logical<4>>>, !fir.shape<1>, index) -> !fir.ref<!fir.logical<4>>
837a6a1655SValentin Clement  ! CHECK:           %[[VAL_79:.*]] = fir.load %[[VAL_78]] : !fir.ref<!fir.logical<4>>
847a6a1655SValentin Clement  ! CHECK:           %[[VAL_80:.*]] = fir.convert %[[VAL_79]] : (!fir.logical<4>) -> i1
857a6a1655SValentin Clement  ! CHECK:           %[[VAL_81:.*]] = fir.if %[[VAL_80]] -> (!fir.array<10xf32>) {
867a6a1655SValentin Clement  ! CHECK:             %[[VAL_82:.*]] = fir.array_fetch %[[VAL_69]], %[[VAL_74]] : (!fir.array<10xf32>, index) -> f32
874cc9437aSTom Eccles  ! CHECK:             %[[VAL_83:.*]] = arith.mulf %[[VAL_67]], %[[VAL_82]] {{.*}}: f32
887a6a1655SValentin Clement  ! CHECK:             %[[VAL_84:.*]] = fir.array_update %[[VAL_75]], %[[VAL_83]], %[[VAL_74]] : (!fir.array<10xf32>, f32, index) -> !fir.array<10xf32>
897a6a1655SValentin Clement  ! CHECK:             fir.result %[[VAL_84]] : !fir.array<10xf32>
907a6a1655SValentin Clement  ! CHECK:           } else {
917a6a1655SValentin Clement  ! CHECK:             fir.result %[[VAL_75]] : !fir.array<10xf32>
927a6a1655SValentin Clement  ! CHECK:           }
937a6a1655SValentin Clement  ! CHECK:           fir.result %[[VAL_85:.*]] : !fir.array<10xf32>
947a6a1655SValentin Clement  ! CHECK:         }
957a6a1655SValentin Clement  ! CHECK:         fir.array_merge_store %[[VAL_66]], %[[VAL_86:.*]] to %[[VAL_2]] : !fir.array<10xf32>, !fir.array<10xf32>, !fir.ref<!fir.array<10xf32>>
967a6a1655SValentin Clement  ! CHECK:         %[[VAL_88:.*]] = arith.constant 10 : index
977a6a1655SValentin Clement  ! CHECK:         %[[VAL_89:.*]] = fir.shape %[[VAL_1]] : (index) -> !fir.shape<1>
987a6a1655SValentin Clement  ! CHECK:         %[[VAL_90:.*]] = fir.array_load %[[VAL_0]](%[[VAL_89]]) : (!fir.ref<!fir.array<10xf32>>, !fir.shape<1>) -> !fir.array<10xf32>
997a6a1655SValentin Clement  ! CHECK:         %[[VAL_91:.*]] = arith.constant 5.000000e+01 : f32
1007a6a1655SValentin Clement  ! CHECK:         %[[VAL_92:.*]] = fir.allocmem !fir.array<10x!fir.logical<4>>
1017a6a1655SValentin Clement  ! CHECK:         %[[VAL_93:.*]] = fir.shape %[[VAL_88]] : (index) -> !fir.shape<1>
1027a6a1655SValentin Clement  ! CHECK:         %[[VAL_94:.*]] = fir.array_load %[[VAL_92]](%[[VAL_93]]) : (!fir.heap<!fir.array<10x!fir.logical<4>>>, !fir.shape<1>) -> !fir.array<10x!fir.logical<4>>
1037a6a1655SValentin Clement  ! CHECK:         %[[VAL_95:.*]] = arith.constant 1 : index
1047a6a1655SValentin Clement  ! CHECK:         %[[VAL_96:.*]] = arith.constant 0 : index
1057a6a1655SValentin Clement  ! CHECK:         %[[VAL_97:.*]] = arith.subi %[[VAL_88]], %[[VAL_95]] : index
1067a6a1655SValentin Clement  ! CHECK:         %[[VAL_98:.*]] = fir.do_loop %[[VAL_99:.*]] = %[[VAL_96]] to %[[VAL_97]] step %[[VAL_95]] unordered iter_args(%[[VAL_100:.*]] = %[[VAL_94]]) -> (!fir.array<10x!fir.logical<4>>) {
1077a6a1655SValentin Clement  ! CHECK:           %[[VAL_101:.*]] = fir.array_fetch %[[VAL_90]], %[[VAL_99]] : (!fir.array<10xf32>, index) -> f32
108*fcd06d77STom Eccles  ! CHECK:           %[[VAL_102:.*]] = arith.cmpf ogt, %[[VAL_101]], %[[VAL_91]] {{.*}} : f32
1097a6a1655SValentin Clement  ! CHECK:           %[[VAL_103:.*]] = fir.convert %[[VAL_102]] : (i1) -> !fir.logical<4>
1107a6a1655SValentin Clement  ! CHECK:           %[[VAL_104:.*]] = fir.array_update %[[VAL_100]], %[[VAL_103]], %[[VAL_99]] : (!fir.array<10x!fir.logical<4>>, !fir.logical<4>, index) -> !fir.array<10x!fir.logical<4>>
1117a6a1655SValentin Clement  ! CHECK:           fir.result %[[VAL_104]] : !fir.array<10x!fir.logical<4>>
1127a6a1655SValentin Clement  ! CHECK:         }
1137a6a1655SValentin Clement  ! CHECK:         fir.array_merge_store %[[VAL_94]], %[[VAL_105:.*]] to %[[VAL_92]] : !fir.array<10x!fir.logical<4>>, !fir.array<10x!fir.logical<4>>, !fir.heap<!fir.array<10x!fir.logical<4>>>
1147a6a1655SValentin Clement  ! CHECK:         %[[VAL_106:.*]] = fir.shape %[[VAL_88]] : (index) -> !fir.shape<1>
1157a6a1655SValentin Clement  ! CHECK:         %[[VAL_107:.*]] = fir.shape %[[VAL_3]] : (index) -> !fir.shape<1>
1167a6a1655SValentin Clement  ! CHECK:         %[[VAL_108:.*]] = fir.array_load %[[VAL_2]](%[[VAL_107]]) : (!fir.ref<!fir.array<10xf32>>, !fir.shape<1>) -> !fir.array<10xf32>
1177a6a1655SValentin Clement  ! CHECK:         %[[VAL_109:.*]] = arith.constant 3.000000e+00 : f32
1187a6a1655SValentin Clement  ! CHECK:         %[[VAL_110:.*]] = fir.shape %[[VAL_1]] : (index) -> !fir.shape<1>
1197a6a1655SValentin Clement  ! CHECK:         %[[VAL_111:.*]] = fir.array_load %[[VAL_0]](%[[VAL_110]]) : (!fir.ref<!fir.array<10xf32>>, !fir.shape<1>) -> !fir.array<10xf32>
1207a6a1655SValentin Clement  ! CHECK:         %[[VAL_112:.*]] = arith.constant 1 : index
1217a6a1655SValentin Clement  ! CHECK:         %[[VAL_113:.*]] = arith.constant 0 : index
1227a6a1655SValentin Clement  ! CHECK:         %[[VAL_114:.*]] = arith.subi %[[VAL_3]], %[[VAL_112]] : index
1237a6a1655SValentin Clement  ! CHECK:         %[[VAL_115:.*]] = fir.do_loop %[[VAL_116:.*]] = %[[VAL_113]] to %[[VAL_114]] step %[[VAL_112]] unordered iter_args(%[[VAL_117:.*]] = %[[VAL_108]]) -> (!fir.array<10xf32>) {
1247a6a1655SValentin Clement  ! CHECK:           %[[VAL_118:.*]] = arith.constant 1 : index
1257a6a1655SValentin Clement  ! CHECK:           %[[VAL_119:.*]] = arith.addi %[[VAL_116]], %[[VAL_118]] : index
1267a6a1655SValentin Clement  ! CHECK:           %[[VAL_120:.*]] = fir.array_coor %[[VAL_50]](%[[VAL_64]]) %[[VAL_119]] : (!fir.heap<!fir.array<10x!fir.logical<4>>>, !fir.shape<1>, index) -> !fir.ref<!fir.logical<4>>
1277a6a1655SValentin Clement  ! CHECK:           %[[VAL_121:.*]] = fir.load %[[VAL_120]] : !fir.ref<!fir.logical<4>>
1287a6a1655SValentin Clement  ! CHECK:           %[[VAL_122:.*]] = fir.convert %[[VAL_121]] : (!fir.logical<4>) -> i1
1297a6a1655SValentin Clement  ! CHECK:           %[[VAL_123:.*]] = fir.if %[[VAL_122]] -> (!fir.array<10xf32>) {
1307a6a1655SValentin Clement  ! CHECK:             fir.result %[[VAL_117]] : !fir.array<10xf32>
1317a6a1655SValentin Clement  ! CHECK:           } else {
1327a6a1655SValentin Clement  ! CHECK:             %[[VAL_124:.*]] = arith.constant 1 : index
1337a6a1655SValentin Clement  ! CHECK:             %[[VAL_125:.*]] = arith.addi %[[VAL_116]], %[[VAL_124]] : index
1347a6a1655SValentin Clement  ! CHECK:             %[[VAL_126:.*]] = fir.array_coor %[[VAL_92]](%[[VAL_106]]) %[[VAL_125]] : (!fir.heap<!fir.array<10x!fir.logical<4>>>, !fir.shape<1>, index) -> !fir.ref<!fir.logical<4>>
1357a6a1655SValentin Clement  ! CHECK:             %[[VAL_127:.*]] = fir.load %[[VAL_126]] : !fir.ref<!fir.logical<4>>
1367a6a1655SValentin Clement  ! CHECK:             %[[VAL_128:.*]] = fir.convert %[[VAL_127]] : (!fir.logical<4>) -> i1
1377a6a1655SValentin Clement  ! CHECK:             %[[VAL_129:.*]] = fir.if %[[VAL_128]] -> (!fir.array<10xf32>) {
1387a6a1655SValentin Clement  ! CHECK:               %[[VAL_130:.*]] = fir.array_fetch %[[VAL_111]], %[[VAL_116]] : (!fir.array<10xf32>, index) -> f32
1394cc9437aSTom Eccles  ! CHECK:               %[[VAL_131:.*]] = arith.addf %[[VAL_109]], %[[VAL_130]] {{.*}}: f32
1407a6a1655SValentin Clement  ! CHECK:               %[[VAL_132:.*]] = fir.array_update %[[VAL_117]], %[[VAL_131]], %[[VAL_116]] : (!fir.array<10xf32>, f32, index) -> !fir.array<10xf32>
1417a6a1655SValentin Clement  ! CHECK:               fir.result %[[VAL_132]] : !fir.array<10xf32>
1427a6a1655SValentin Clement  ! CHECK:             } else {
1437a6a1655SValentin Clement  ! CHECK:               fir.result %[[VAL_117]] : !fir.array<10xf32>
1447a6a1655SValentin Clement  ! CHECK:             }
1457a6a1655SValentin Clement  ! CHECK:             fir.result %[[VAL_133:.*]] : !fir.array<10xf32>
1467a6a1655SValentin Clement  ! CHECK:           }
1477a6a1655SValentin Clement  ! CHECK:           fir.result %[[VAL_134:.*]] : !fir.array<10xf32>
1487a6a1655SValentin Clement  ! CHECK:         }
1497a6a1655SValentin Clement  ! CHECK:         fir.array_merge_store %[[VAL_108]], %[[VAL_135:.*]] to %[[VAL_2]] : !fir.array<10xf32>, !fir.array<10xf32>, !fir.ref<!fir.array<10xf32>>
1507a6a1655SValentin Clement  ! CHECK:         %[[VAL_136:.*]] = fir.shape %[[VAL_1]] : (index) -> !fir.shape<1>
1517a6a1655SValentin Clement  ! CHECK:         %[[VAL_137:.*]] = fir.array_load %[[VAL_0]](%[[VAL_136]]) : (!fir.ref<!fir.array<10xf32>>, !fir.shape<1>) -> !fir.array<10xf32>
1527a6a1655SValentin Clement  ! CHECK:         %[[VAL_138:.*]] = fir.shape %[[VAL_1]] : (index) -> !fir.shape<1>
1537a6a1655SValentin Clement  ! CHECK:         %[[VAL_139:.*]] = fir.array_load %[[VAL_0]](%[[VAL_138]]) : (!fir.ref<!fir.array<10xf32>>, !fir.shape<1>) -> !fir.array<10xf32>
1547a6a1655SValentin Clement  ! CHECK:         %[[VAL_140:.*]] = arith.constant 1.000000e+00 : f32
1557a6a1655SValentin Clement  ! CHECK:         %[[VAL_141:.*]] = arith.constant 1 : index
1567a6a1655SValentin Clement  ! CHECK:         %[[VAL_142:.*]] = arith.constant 0 : index
1577a6a1655SValentin Clement  ! CHECK:         %[[VAL_143:.*]] = arith.subi %[[VAL_1]], %[[VAL_141]] : index
1587a6a1655SValentin Clement  ! CHECK:         %[[VAL_144:.*]] = fir.do_loop %[[VAL_145:.*]] = %[[VAL_142]] to %[[VAL_143]] step %[[VAL_141]] unordered iter_args(%[[VAL_146:.*]] = %[[VAL_137]]) -> (!fir.array<10xf32>) {
1597a6a1655SValentin Clement  ! CHECK:           %[[VAL_147:.*]] = arith.constant 1 : index
1607a6a1655SValentin Clement  ! CHECK:           %[[VAL_148:.*]] = arith.addi %[[VAL_145]], %[[VAL_147]] : index
1617a6a1655SValentin Clement  ! CHECK:           %[[VAL_149:.*]] = fir.array_coor %[[VAL_50]](%[[VAL_64]]) %[[VAL_148]] : (!fir.heap<!fir.array<10x!fir.logical<4>>>, !fir.shape<1>, index) -> !fir.ref<!fir.logical<4>>
1627a6a1655SValentin Clement  ! CHECK:           %[[VAL_150:.*]] = fir.load %[[VAL_149]] : !fir.ref<!fir.logical<4>>
1637a6a1655SValentin Clement  ! CHECK:           %[[VAL_151:.*]] = fir.convert %[[VAL_150]] : (!fir.logical<4>) -> i1
1647a6a1655SValentin Clement  ! CHECK:           %[[VAL_152:.*]] = fir.if %[[VAL_151]] -> (!fir.array<10xf32>) {
1657a6a1655SValentin Clement  ! CHECK:             fir.result %[[VAL_146]] : !fir.array<10xf32>
1667a6a1655SValentin Clement  ! CHECK:           } else {
1677a6a1655SValentin Clement  ! CHECK:             %[[VAL_153:.*]] = arith.constant 1 : index
1687a6a1655SValentin Clement  ! CHECK:             %[[VAL_154:.*]] = arith.addi %[[VAL_145]], %[[VAL_153]] : index
1697a6a1655SValentin Clement  ! CHECK:             %[[VAL_155:.*]] = fir.array_coor %[[VAL_92]](%[[VAL_106]]) %[[VAL_154]] : (!fir.heap<!fir.array<10x!fir.logical<4>>>, !fir.shape<1>, index) -> !fir.ref<!fir.logical<4>>
1707a6a1655SValentin Clement  ! CHECK:             %[[VAL_156:.*]] = fir.load %[[VAL_155]] : !fir.ref<!fir.logical<4>>
1717a6a1655SValentin Clement  ! CHECK:             %[[VAL_157:.*]] = fir.convert %[[VAL_156]] : (!fir.logical<4>) -> i1
1727a6a1655SValentin Clement  ! CHECK:             %[[VAL_158:.*]] = fir.if %[[VAL_157]] -> (!fir.array<10xf32>) {
1737a6a1655SValentin Clement  ! CHECK:               %[[VAL_159:.*]] = fir.array_fetch %[[VAL_139]], %[[VAL_145]] : (!fir.array<10xf32>, index) -> f32
1744cc9437aSTom Eccles  ! CHECK:               %[[VAL_160:.*]] = arith.subf %[[VAL_159]], %[[VAL_140]] {{.*}}: f32
1757a6a1655SValentin Clement  ! CHECK:               %[[VAL_161:.*]] = fir.array_update %[[VAL_146]], %[[VAL_160]], %[[VAL_145]] : (!fir.array<10xf32>, f32, index) -> !fir.array<10xf32>
1767a6a1655SValentin Clement  ! CHECK:               fir.result %[[VAL_161]] : !fir.array<10xf32>
1777a6a1655SValentin Clement  ! CHECK:             } else {
1787a6a1655SValentin Clement  ! CHECK:               fir.result %[[VAL_146]] : !fir.array<10xf32>
1797a6a1655SValentin Clement  ! CHECK:             }
1807a6a1655SValentin Clement  ! CHECK:             fir.result %[[VAL_162:.*]] : !fir.array<10xf32>
1817a6a1655SValentin Clement  ! CHECK:           }
1827a6a1655SValentin Clement  ! CHECK:           fir.result %[[VAL_163:.*]] : !fir.array<10xf32>
1837a6a1655SValentin Clement  ! CHECK:         }
1847a6a1655SValentin Clement  ! CHECK:         fir.array_merge_store %[[VAL_137]], %[[VAL_164:.*]] to %[[VAL_0]] : !fir.array<10xf32>, !fir.array<10xf32>, !fir.ref<!fir.array<10xf32>>
1857a6a1655SValentin Clement  ! CHECK:         %[[VAL_165:.*]] = fir.shape %[[VAL_1]] : (index) -> !fir.shape<1>
1867a6a1655SValentin Clement  ! CHECK:         %[[VAL_166:.*]] = fir.array_load %[[VAL_0]](%[[VAL_165]]) : (!fir.ref<!fir.array<10xf32>>, !fir.shape<1>) -> !fir.array<10xf32>
1877a6a1655SValentin Clement  ! CHECK:         %[[VAL_167:.*]] = fir.shape %[[VAL_1]] : (index) -> !fir.shape<1>
1887a6a1655SValentin Clement  ! CHECK:         %[[VAL_168:.*]] = fir.array_load %[[VAL_0]](%[[VAL_167]]) : (!fir.ref<!fir.array<10xf32>>, !fir.shape<1>) -> !fir.array<10xf32>
1897a6a1655SValentin Clement  ! CHECK:         %[[VAL_169:.*]] = arith.constant 2.000000e+00 : f32
1907a6a1655SValentin Clement  ! CHECK:         %[[VAL_170:.*]] = arith.constant 1 : index
1917a6a1655SValentin Clement  ! CHECK:         %[[VAL_171:.*]] = arith.constant 0 : index
1927a6a1655SValentin Clement  ! CHECK:         %[[VAL_172:.*]] = arith.subi %[[VAL_1]], %[[VAL_170]] : index
1937a6a1655SValentin Clement  ! CHECK:         %[[VAL_173:.*]] = fir.do_loop %[[VAL_174:.*]] = %[[VAL_171]] to %[[VAL_172]] step %[[VAL_170]] unordered iter_args(%[[VAL_175:.*]] = %[[VAL_166]]) -> (!fir.array<10xf32>) {
1947a6a1655SValentin Clement  ! CHECK:           %[[VAL_176:.*]] = arith.constant 1 : index
1957a6a1655SValentin Clement  ! CHECK:           %[[VAL_177:.*]] = arith.addi %[[VAL_174]], %[[VAL_176]] : index
1967a6a1655SValentin Clement  ! CHECK:           %[[VAL_178:.*]] = fir.array_coor %[[VAL_50]](%[[VAL_64]]) %[[VAL_177]] : (!fir.heap<!fir.array<10x!fir.logical<4>>>, !fir.shape<1>, index) -> !fir.ref<!fir.logical<4>>
1977a6a1655SValentin Clement  ! CHECK:           %[[VAL_179:.*]] = fir.load %[[VAL_178]] : !fir.ref<!fir.logical<4>>
1987a6a1655SValentin Clement  ! CHECK:           %[[VAL_180:.*]] = fir.convert %[[VAL_179]] : (!fir.logical<4>) -> i1
1997a6a1655SValentin Clement  ! CHECK:           %[[VAL_181:.*]] = fir.if %[[VAL_180]] -> (!fir.array<10xf32>) {
2007a6a1655SValentin Clement  ! CHECK:             fir.result %[[VAL_175]] : !fir.array<10xf32>
2017a6a1655SValentin Clement  ! CHECK:           } else {
2027a6a1655SValentin Clement  ! CHECK:             %[[VAL_182:.*]] = arith.constant 1 : index
2037a6a1655SValentin Clement  ! CHECK:             %[[VAL_183:.*]] = arith.addi %[[VAL_174]], %[[VAL_182]] : index
2047a6a1655SValentin Clement  ! CHECK:             %[[VAL_184:.*]] = fir.array_coor %[[VAL_92]](%[[VAL_106]]) %[[VAL_183]] : (!fir.heap<!fir.array<10x!fir.logical<4>>>, !fir.shape<1>, index) -> !fir.ref<!fir.logical<4>>
2057a6a1655SValentin Clement  ! CHECK:             %[[VAL_185:.*]] = fir.load %[[VAL_184]] : !fir.ref<!fir.logical<4>>
2067a6a1655SValentin Clement  ! CHECK:             %[[VAL_186:.*]] = fir.convert %[[VAL_185]] : (!fir.logical<4>) -> i1
2077a6a1655SValentin Clement  ! CHECK:             %[[VAL_187:.*]] = fir.if %[[VAL_186]] -> (!fir.array<10xf32>) {
2087a6a1655SValentin Clement  ! CHECK:               fir.result %[[VAL_175]] : !fir.array<10xf32>
2097a6a1655SValentin Clement  ! CHECK:             } else {
2107a6a1655SValentin Clement  ! CHECK:               %[[VAL_188:.*]] = fir.array_fetch %[[VAL_168]], %[[VAL_174]] : (!fir.array<10xf32>, index) -> f32
2114cc9437aSTom Eccles  ! CHECK:               %[[VAL_189:.*]] = arith.divf %[[VAL_188]], %[[VAL_169]] {{.*}}: f32
2127a6a1655SValentin Clement  ! CHECK:               %[[VAL_190:.*]] = fir.array_update %[[VAL_175]], %[[VAL_189]], %[[VAL_174]] : (!fir.array<10xf32>, f32, index) -> !fir.array<10xf32>
2137a6a1655SValentin Clement  ! CHECK:               fir.result %[[VAL_190]] : !fir.array<10xf32>
2147a6a1655SValentin Clement  ! CHECK:             }
2157a6a1655SValentin Clement  ! CHECK:             fir.result %[[VAL_191:.*]] : !fir.array<10xf32>
2167a6a1655SValentin Clement  ! CHECK:           }
2177a6a1655SValentin Clement  ! CHECK:           fir.result %[[VAL_192:.*]] : !fir.array<10xf32>
2187a6a1655SValentin Clement  ! CHECK:         }
2197a6a1655SValentin Clement  ! CHECK:         fir.array_merge_store %[[VAL_166]], %[[VAL_193:.*]] to %[[VAL_0]] : !fir.array<10xf32>, !fir.array<10xf32>, !fir.ref<!fir.array<10xf32>>
2203348c083SValentin Clement  ! CHECK:         fir.freemem %[[VAL_92]] : !fir.heap<!fir.array<10x!fir.logical<4>>>
2213348c083SValentin Clement  ! CHECK:         fir.freemem %[[VAL_50]] : !fir.heap<!fir.array<10x!fir.logical<4>>>
2227a6a1655SValentin Clement  ! CHECK:         return
2237a6a1655SValentin Clement  ! CHECK:       }
2247a6a1655SValentin Clement
2257a6a1655SValentin Clement  real :: a(10), b(10)
2267a6a1655SValentin Clement
2277a6a1655SValentin Clement  ! Statement
2287a6a1655SValentin Clement  where (a > 4.0) b = -a
2297a6a1655SValentin Clement
2307a6a1655SValentin Clement  ! Construct
2317a6a1655SValentin Clement  where (a > 100.0)
2327a6a1655SValentin Clement     b = 2.0 * a
2337a6a1655SValentin Clement  elsewhere (a > 50.0)
2347a6a1655SValentin Clement     b = 3.0 + a
2357a6a1655SValentin Clement     a = a - 1.0
2367a6a1655SValentin Clement  elsewhere
2377a6a1655SValentin Clement     a = a / 2.0
2387a6a1655SValentin Clement  end where
2397a6a1655SValentin Clementend
240