1f35f863aSjeanPerier! RUN: bbc -emit-fir -hlfir=false -o - %s | FileCheck %s 2b914efc5SValentin Clement 3b914efc5SValentin Clement! CHECK-LABEL: func @_QPm 4b914efc5SValentin Clementfunction m(index) 52c143345SV Donaldson ! CHECK: %[[V_0:[0-9]+]] = fir.alloca i32 {bindc_name = "m" 62c143345SV Donaldson ! CHECK: %[[V_1:[0-9]+]] = fir.load %arg0 : !fir.ref<i32> 72c143345SV Donaldson ! CHECK: fir.select %[[V_1]] : i32 [1, ^bb6, 2, ^bb5, 3, ^bb4, 4, ^bb3, 5, ^bb2, unit, ^bb1] 82c143345SV Donaldson ! CHECK: ^bb1: // pred: ^bb0 92c143345SV Donaldson ! CHECK: fir.store %c0{{.*}} to %[[V_0]] : !fir.ref<i32> 102c143345SV Donaldson ! CHECK: cf.br ^bb7 112c143345SV Donaldson ! CHECK: ^bb2: // pred: ^bb0 122c143345SV Donaldson ! CHECK: fir.store %c1{{.*}} to %[[V_0]] : !fir.ref<i32> 132c143345SV Donaldson ! CHECK: cf.br ^bb7 142c143345SV Donaldson ! CHECK: ^bb3: // pred: ^bb0 152c143345SV Donaldson ! CHECK: fir.store %c3{{.*}} to %[[V_0]] : !fir.ref<i32> 162c143345SV Donaldson ! CHECK: cf.br ^bb7 172c143345SV Donaldson ! CHECK: ^bb4: // pred: ^bb0 182c143345SV Donaldson ! CHECK: fir.store %c5{{.*}} to %[[V_0]] : !fir.ref<i32> 192c143345SV Donaldson ! CHECK: cf.br ^bb7 202c143345SV Donaldson ! CHECK: ^bb5: // pred: ^bb0 212c143345SV Donaldson ! CHECK: fir.store %c7{{.*}} to %[[V_0]] : !fir.ref<i32> 222c143345SV Donaldson ! CHECK: cf.br ^bb7 232c143345SV Donaldson ! CHECK: ^bb6: // pred: ^bb0 242c143345SV Donaldson ! CHECK: fir.store %c9{{.*}} to %[[V_0]] : !fir.ref<i32> 252c143345SV Donaldson ! CHECK: cf.br ^bb7 262c143345SV Donaldson ! CHECK: ^bb7: // 6 preds: ^bb1, ^bb2, ^bb3, ^bb4, ^bb5, ^bb6 272c143345SV Donaldson ! CHECK: %[[V_2:[0-9]+]] = fir.load %[[V_0]] : !fir.ref<i32> 282c143345SV Donaldson ! CHECK: return %[[V_2]] : i32 29b914efc5SValentin Clement goto (9,7,5,3,1) index ! + 1 30b914efc5SValentin Clement m = 0; return 31b914efc5SValentin Clement1 m = 1; return 32b914efc5SValentin Clement3 m = 3; return 33b914efc5SValentin Clement5 m = 5; return 34b914efc5SValentin Clement7 m = 7; return 35b914efc5SValentin Clement9 m = 9; return 36b914efc5SValentin Clementend 37b914efc5SValentin Clement 382c143345SV Donaldson! CHECK-LABEL: func @_QPm1 392c143345SV Donaldsonfunction m1(index) 402c143345SV Donaldson ! CHECK: %[[V_0:[0-9]+]] = fir.alloca i32 {bindc_name = "m1" 41*5aaf384bSTom Eccles ! CHECK: %[[V_1:[0-9]+]] = llvm.intr.stacksave : !llvm.ptr 422c143345SV Donaldson ! CHECK: %[[V_2:[0-9]+]] = fir.load %arg0 : !fir.ref<i32> 432c143345SV Donaldson ! CHECK: %[[V_3:[0-9]+]] = arith.cmpi eq, %[[V_2]], %c1{{.*}} : i32 442c143345SV Donaldson ! CHECK: cf.cond_br %[[V_3]], ^bb1, ^bb2 452c143345SV Donaldson ! CHECK: ^bb1: // pred: ^bb0 46*5aaf384bSTom Eccles ! CHECK: llvm.intr.stackrestore %[[V_1]] : !llvm.ptr 472c143345SV Donaldson ! CHECK: cf.br ^bb3 482c143345SV Donaldson ! CHECK: ^bb2: // pred: ^bb0 49*5aaf384bSTom Eccles ! CHECK: llvm.intr.stackrestore %[[V_1]] : !llvm.ptr 502c143345SV Donaldson ! CHECK: fir.store %c0{{.*}} to %[[V_0]] : !fir.ref<i32> 512c143345SV Donaldson ! CHECK: cf.br ^bb4 522c143345SV Donaldson ! CHECK: ^bb3: // pred: ^bb1 532c143345SV Donaldson ! CHECK: fir.store %c10{{.*}} to %[[V_0]] : !fir.ref<i32> 542c143345SV Donaldson ! CHECK: cf.br ^bb4 552c143345SV Donaldson ! CHECK: ^bb4: // 2 preds: ^bb2, ^bb3 562c143345SV Donaldson ! CHECK: %[[V_4:[0-9]+]] = fir.load %[[V_0]] : !fir.ref<i32> 572c143345SV Donaldson ! CHECK: return %[[V_4]] : i32 582c143345SV Donaldson block 592c143345SV Donaldson goto (10) index 602c143345SV Donaldson end block 612c143345SV Donaldson m1 = 0; return 622c143345SV Donaldson10 m1 = 10; return 632c143345SV Donaldsonend 642c143345SV Donaldson 652c143345SV Donaldson! CHECK-LABEL: func @_QPm2 662c143345SV Donaldsonfunction m2(index) 672c143345SV Donaldson ! CHECK: %[[V_0:[0-9]+]] = fir.alloca i32 {bindc_name = "m2" 68*5aaf384bSTom Eccles ! CHECK: %[[V_1:[0-9]+]] = llvm.intr.stacksave : !llvm.ptr 692c143345SV Donaldson ! CHECK: %[[V_2:[0-9]+]] = fir.load %arg0 : !fir.ref<i32> 702c143345SV Donaldson ! CHECK: %[[V_3:[0-9]+]] = arith.cmpi eq, %[[V_2]], %c1{{.*}} : i32 712c143345SV Donaldson ! CHECK: cf.cond_br %[[V_3]], ^bb1, ^bb2 722c143345SV Donaldson ! CHECK: ^bb1: // pred: ^bb0 73*5aaf384bSTom Eccles ! CHECK: llvm.intr.stackrestore %[[V_1]] : !llvm.ptr 742c143345SV Donaldson ! CHECK: cf.br ^bb5 752c143345SV Donaldson ! CHECK: ^bb2: // pred: ^bb0 762c143345SV Donaldson ! CHECK: %[[V_4:[0-9]+]] = arith.cmpi eq, %[[V_2]], %c2{{.*}} : i32 772c143345SV Donaldson ! CHECK: cf.cond_br %[[V_4]], ^bb3, ^bb4 782c143345SV Donaldson ! CHECK: ^bb3: // pred: ^bb2 79*5aaf384bSTom Eccles ! CHECK: llvm.intr.stackrestore %[[V_1]] : !llvm.ptr 802c143345SV Donaldson ! CHECK: cf.br ^bb6 812c143345SV Donaldson ! CHECK: ^bb4: // pred: ^bb2 82*5aaf384bSTom Eccles ! CHECK: llvm.intr.stackrestore %[[V_1]] : !llvm.ptr 832c143345SV Donaldson ! CHECK: fir.store %c0{{.*}} to %[[V_0]] : !fir.ref<i32> 842c143345SV Donaldson ! CHECK: cf.br ^bb7 852c143345SV Donaldson ! CHECK: ^bb5: // pred: ^bb1 862c143345SV Donaldson ! CHECK: fir.store %c10{{.*}} to %[[V_0]] : !fir.ref<i32> 872c143345SV Donaldson ! CHECK: cf.br ^bb7 882c143345SV Donaldson ! CHECK: ^bb6: // pred: ^bb3 892c143345SV Donaldson ! CHECK: fir.store %c20{{.*}} to %[[V_0]] : !fir.ref<i32> 902c143345SV Donaldson ! CHECK: cf.br ^bb7 912c143345SV Donaldson ! CHECK: ^bb7: // 3 preds: ^bb4, ^bb5, ^bb6 922c143345SV Donaldson ! CHECK: %[[V_5:[0-9]+]] = fir.load %[[V_0]] : !fir.ref<i32> 932c143345SV Donaldson ! CHECK: return %[[V_5]] : i32 942c143345SV Donaldson block 952c143345SV Donaldson goto (10,20) index 962c143345SV Donaldson end block 972c143345SV Donaldson m2 = 0; return 982c143345SV Donaldson10 m2 = 10; return 992c143345SV Donaldson20 m2 = 20; return 1002c143345SV Donaldsonend 1012c143345SV Donaldson 1022c143345SV Donaldson! CHECK-LABEL: func @_QPm3 1032c143345SV Donaldsonfunction m3(index) 1042c143345SV Donaldson ! CHECK: %[[V_0:[0-9]+]] = fir.alloca i32 {bindc_name = "m3" 105*5aaf384bSTom Eccles ! CHECK: %[[V_1:[0-9]+]] = llvm.intr.stacksave : !llvm.ptr 1062c143345SV Donaldson ! CHECK: %[[V_2:[0-9]+]] = fir.load %arg0 : !fir.ref<i32> 1072c143345SV Donaldson ! CHECK: %[[V_3:[0-9]+]] = arith.cmpi eq, %[[V_2]], %c1{{.*}} : i32 1082c143345SV Donaldson ! CHECK: cf.cond_br %[[V_3]], ^bb1, ^bb2 1092c143345SV Donaldson ! CHECK: ^bb1: // pred: ^bb0 110*5aaf384bSTom Eccles ! CHECK: llvm.intr.stackrestore %[[V_1]] : !llvm.ptr 1112c143345SV Donaldson ! CHECK: cf.br ^bb7 1122c143345SV Donaldson ! CHECK: ^bb2: // pred: ^bb0 1132c143345SV Donaldson ! CHECK: %[[V_4:[0-9]+]] = arith.cmpi eq, %[[V_2]], %c2{{.*}} : i32 1142c143345SV Donaldson ! CHECK: cf.cond_br %[[V_4]], ^bb3, ^bb4 1152c143345SV Donaldson ! CHECK: ^bb3: // pred: ^bb2 116*5aaf384bSTom Eccles ! CHECK: llvm.intr.stackrestore %[[V_1]] : !llvm.ptr 1172c143345SV Donaldson ! CHECK: cf.br ^bb8 1182c143345SV Donaldson ! CHECK: ^bb4: // pred: ^bb2 1192c143345SV Donaldson ! CHECK: %[[V_5:[0-9]+]] = arith.cmpi eq, %[[V_2]], %c3{{.*}} : i32 1202c143345SV Donaldson ! CHECK: cf.cond_br %[[V_5]], ^bb5, ^bb6 1212c143345SV Donaldson ! CHECK: ^bb5: // pred: ^bb4 122*5aaf384bSTom Eccles ! CHECK: llvm.intr.stackrestore %[[V_1]] : !llvm.ptr 1232c143345SV Donaldson ! CHECK: cf.br ^bb9 1242c143345SV Donaldson ! CHECK: ^bb6: // pred: ^bb4 125*5aaf384bSTom Eccles ! CHECK: llvm.intr.stackrestore %[[V_1]] : !llvm.ptr 1262c143345SV Donaldson ! CHECK: fir.store %c0{{.*}} to %[[V_0]] : !fir.ref<i32> 1272c143345SV Donaldson ! CHECK: cf.br ^bb10 1282c143345SV Donaldson ! CHECK: ^bb7: // pred: ^bb1 1292c143345SV Donaldson ! CHECK: fir.store %c10{{.*}} to %[[V_0]] : !fir.ref<i32> 1302c143345SV Donaldson ! CHECK: cf.br ^bb10 1312c143345SV Donaldson ! CHECK: ^bb8: // pred: ^bb3 1322c143345SV Donaldson ! CHECK: fir.store %c20{{.*}} to %[[V_0]] : !fir.ref<i32> 1332c143345SV Donaldson ! CHECK: cf.br ^bb10 1342c143345SV Donaldson ! CHECK: ^bb9: // pred: ^bb5 1352c143345SV Donaldson ! CHECK: fir.store %c30{{.*}} to %[[V_0]] : !fir.ref<i32> 1362c143345SV Donaldson ! CHECK: cf.br ^bb10 1372c143345SV Donaldson ! CHECK: ^bb10: // 4 preds: ^bb6, ^bb7, ^bb8, ^bb9 1382c143345SV Donaldson ! CHECK: %[[V_6:[0-9]+]] = fir.load %[[V_0]] : !fir.ref<i32> 1392c143345SV Donaldson ! CHECK: return %[[V_6]] : i32 1402c143345SV Donaldson block 1412c143345SV Donaldson goto (10,20,30) index 1422c143345SV Donaldson end block 1432c143345SV Donaldson m3 = 0; return 1442c143345SV Donaldson10 m3 = 10; return 1452c143345SV Donaldson20 m3 = 20; return 1462c143345SV Donaldson30 m3 = 30; return 1472c143345SV Donaldsonend 1482c143345SV Donaldson 1492c143345SV Donaldsonprogram cg 1502c143345SV Donaldson print*, m(-3), m(1), m(2), m(3), m(4), m(5), m(9) ! 0 9 7 5 3 1 0 1512c143345SV Donaldson print*, m1(0), m1(1), m1(2) ! 0 10 0 1522c143345SV Donaldson print*, m2(0), m2(1), m2(2), m2(3) ! 0 10 20 0 1532c143345SV Donaldson print*, m3(0), m3(1), m3(2), m3(3), m3(4) ! 0 10 20 30 0 154b914efc5SValentin Clementend 155