brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.8 KiB · bb24411 Raw
155 lines · plain
1! RUN: bbc -emit-fir -hlfir=false -o - %s | FileCheck %s2 3! CHECK-LABEL: func @_QPm4function m(index)5    ! CHECK:   %[[V_0:[0-9]+]] = fir.alloca i32 {bindc_name = "m"6    ! CHECK:   %[[V_1:[0-9]+]] = fir.load %arg0 : !fir.ref<i32>7    ! CHECK:   fir.select %[[V_1]] : i32 [1, ^bb6, 2, ^bb5, 3, ^bb4, 4, ^bb3, 5, ^bb2, unit, ^bb1]8    ! CHECK: ^bb1:  // pred: ^bb09    ! CHECK:   fir.store %c0{{.*}} to %[[V_0]] : !fir.ref<i32>10    ! CHECK:   cf.br ^bb711    ! CHECK: ^bb2:  // pred: ^bb012    ! CHECK:   fir.store %c1{{.*}} to %[[V_0]] : !fir.ref<i32>13    ! CHECK:   cf.br ^bb714    ! CHECK: ^bb3:  // pred: ^bb015    ! CHECK:   fir.store %c3{{.*}} to %[[V_0]] : !fir.ref<i32>16    ! CHECK:   cf.br ^bb717    ! CHECK: ^bb4:  // pred: ^bb018    ! CHECK:   fir.store %c5{{.*}} to %[[V_0]] : !fir.ref<i32>19    ! CHECK:   cf.br ^bb720    ! CHECK: ^bb5:  // pred: ^bb021    ! CHECK:   fir.store %c7{{.*}} to %[[V_0]] : !fir.ref<i32>22    ! CHECK:   cf.br ^bb723    ! CHECK: ^bb6:  // pred: ^bb024    ! CHECK:   fir.store %c9{{.*}} to %[[V_0]] : !fir.ref<i32>25    ! CHECK:   cf.br ^bb726    ! CHECK: ^bb7:  // 6 preds: ^bb1, ^bb2, ^bb3, ^bb4, ^bb5, ^bb627    ! CHECK:   %[[V_2:[0-9]+]] = fir.load %[[V_0]] : !fir.ref<i32>28    ! CHECK:   return %[[V_2]] : i3229    goto (9,7,5,3,1) index ! + 130    m = 0; return311   m = 1; return323   m = 3; return335   m = 5; return347   m = 7; return359   m = 9; return36end37 38! CHECK-LABEL: func @_QPm139function m1(index)40    ! CHECK:   %[[V_0:[0-9]+]] = fir.alloca i32 {bindc_name = "m1"41    ! CHECK:   %[[V_1:[0-9]+]] = llvm.intr.stacksave : !llvm.ptr42    ! CHECK:   %[[V_2:[0-9]+]] = fir.load %arg0 : !fir.ref<i32>43    ! CHECK:   %[[V_3:[0-9]+]] = arith.cmpi eq, %[[V_2]], %c1{{.*}} : i3244    ! CHECK:   cf.cond_br %[[V_3]], ^bb1, ^bb245    ! CHECK: ^bb1:  // pred: ^bb046    ! CHECK:   llvm.intr.stackrestore %[[V_1]] : !llvm.ptr47    ! CHECK:   cf.br ^bb348    ! CHECK: ^bb2:  // pred: ^bb049    ! CHECK:   llvm.intr.stackrestore %[[V_1]] : !llvm.ptr50    ! CHECK:   fir.store %c0{{.*}} to %[[V_0]] : !fir.ref<i32>51    ! CHECK:   cf.br ^bb452    ! CHECK: ^bb3:  // pred: ^bb153    ! CHECK:   fir.store %c10{{.*}} to %[[V_0]] : !fir.ref<i32>54    ! CHECK:   cf.br ^bb455    ! CHECK: ^bb4:  // 2 preds: ^bb2, ^bb356    ! CHECK:   %[[V_4:[0-9]+]] = fir.load %[[V_0]] : !fir.ref<i32>57    ! CHECK:   return %[[V_4]] : i3258    block59      goto (10) index60    end block61    m1 =  0; return6210  m1 = 10; return63end64 65! CHECK-LABEL: func @_QPm266function m2(index)67    ! CHECK:   %[[V_0:[0-9]+]] = fir.alloca i32 {bindc_name = "m2"68    ! CHECK:   %[[V_1:[0-9]+]] = llvm.intr.stacksave : !llvm.ptr69    ! CHECK:   %[[V_2:[0-9]+]] = fir.load %arg0 : !fir.ref<i32>70    ! CHECK:   %[[V_3:[0-9]+]] = arith.cmpi eq, %[[V_2]], %c1{{.*}} : i3271    ! CHECK:   cf.cond_br %[[V_3]], ^bb1, ^bb272    ! CHECK: ^bb1:  // pred: ^bb073    ! CHECK:   llvm.intr.stackrestore %[[V_1]] : !llvm.ptr74    ! CHECK:   cf.br ^bb575    ! CHECK: ^bb2:  // pred: ^bb076    ! CHECK:   %[[V_4:[0-9]+]] = arith.cmpi eq, %[[V_2]], %c2{{.*}} : i3277    ! CHECK:   cf.cond_br %[[V_4]], ^bb3, ^bb478    ! CHECK: ^bb3:  // pred: ^bb279    ! CHECK:   llvm.intr.stackrestore %[[V_1]] : !llvm.ptr80    ! CHECK:   cf.br ^bb681    ! CHECK: ^bb4:  // pred: ^bb282    ! CHECK:   llvm.intr.stackrestore %[[V_1]] : !llvm.ptr83    ! CHECK:   fir.store %c0{{.*}} to %[[V_0]] : !fir.ref<i32>84    ! CHECK:   cf.br ^bb785    ! CHECK: ^bb5:  // pred: ^bb186    ! CHECK:   fir.store %c10{{.*}} to %[[V_0]] : !fir.ref<i32>87    ! CHECK:   cf.br ^bb788    ! CHECK: ^bb6:  // pred: ^bb389    ! CHECK:   fir.store %c20{{.*}} to %[[V_0]] : !fir.ref<i32>90    ! CHECK:   cf.br ^bb791    ! CHECK: ^bb7:  // 3 preds: ^bb4, ^bb5, ^bb692    ! CHECK:   %[[V_5:[0-9]+]] = fir.load %[[V_0]] : !fir.ref<i32>93    ! CHECK:   return %[[V_5]] : i3294    block95      goto (10,20) index96    end block97    m2 =  0; return9810  m2 = 10; return9920  m2 = 20; return100end101 102! CHECK-LABEL: func @_QPm3103function m3(index)104    ! CHECK:   %[[V_0:[0-9]+]] = fir.alloca i32 {bindc_name = "m3"105    ! CHECK:   %[[V_1:[0-9]+]] = llvm.intr.stacksave : !llvm.ptr106    ! CHECK:   %[[V_2:[0-9]+]] = fir.load %arg0 : !fir.ref<i32>107    ! CHECK:   %[[V_3:[0-9]+]] = arith.cmpi eq, %[[V_2]], %c1{{.*}} : i32108    ! CHECK:   cf.cond_br %[[V_3]], ^bb1, ^bb2109    ! CHECK: ^bb1:  // pred: ^bb0110    ! CHECK:   llvm.intr.stackrestore %[[V_1]] : !llvm.ptr111    ! CHECK:   cf.br ^bb7112    ! CHECK: ^bb2:  // pred: ^bb0113    ! CHECK:   %[[V_4:[0-9]+]] = arith.cmpi eq, %[[V_2]], %c2{{.*}} : i32114    ! CHECK:   cf.cond_br %[[V_4]], ^bb3, ^bb4115    ! CHECK: ^bb3:  // pred: ^bb2116    ! CHECK:   llvm.intr.stackrestore %[[V_1]] : !llvm.ptr117    ! CHECK:   cf.br ^bb8118    ! CHECK: ^bb4:  // pred: ^bb2119    ! CHECK:   %[[V_5:[0-9]+]] = arith.cmpi eq, %[[V_2]], %c3{{.*}} : i32120    ! CHECK:   cf.cond_br %[[V_5]], ^bb5, ^bb6121    ! CHECK: ^bb5:  // pred: ^bb4122    ! CHECK:   llvm.intr.stackrestore %[[V_1]] : !llvm.ptr123    ! CHECK:   cf.br ^bb9124    ! CHECK: ^bb6:  // pred: ^bb4125    ! CHECK:   llvm.intr.stackrestore %[[V_1]] : !llvm.ptr126    ! CHECK:   fir.store %c0{{.*}} to %[[V_0]] : !fir.ref<i32>127    ! CHECK:   cf.br ^bb10128    ! CHECK: ^bb7:  // pred: ^bb1129    ! CHECK:   fir.store %c10{{.*}} to %[[V_0]] : !fir.ref<i32>130    ! CHECK:   cf.br ^bb10131    ! CHECK: ^bb8:  // pred: ^bb3132    ! CHECK:   fir.store %c20{{.*}} to %[[V_0]] : !fir.ref<i32>133    ! CHECK:   cf.br ^bb10134    ! CHECK: ^bb9:  // pred: ^bb5135    ! CHECK:   fir.store %c30{{.*}} to %[[V_0]] : !fir.ref<i32>136    ! CHECK:   cf.br ^bb10137    ! CHECK: ^bb10:  // 4 preds: ^bb6, ^bb7, ^bb8, ^bb9138    ! CHECK:   %[[V_6:[0-9]+]] = fir.load %[[V_0]] : !fir.ref<i32>139    ! CHECK:   return %[[V_6]] : i32140    block141      goto (10,20,30) index142    end block143    m3 =  0; return14410  m3 = 10; return14520  m3 = 20; return14630  m3 = 30; return147end148 149program cg150  print*, m(-3), m(1), m(2), m(3), m(4), m(5), m(9) ! 0 9 7 5 3 1 0151  print*, m1(0), m1(1), m1(2) ! 0 10 0152  print*, m2(0), m2(1), m2(2), m2(3) ! 0 10 20 0153  print*, m3(0), m3(1), m3(2), m3(3), m3(4) ! 0 10 20 30 0154end155