xref: /llvm-project/flang/test/Lower/arithmetic-goto.f90 (revision fcd06d774dad1b5bcdc22f5f10a9d5c62c585814)
1! RUN: bbc -emit-fir -hlfir=false -o - %s | FileCheck %s
2
3! CHECK-LABEL: func @_QPkagi
4function kagi(index)
5  ! CHECK:   %[[V_0:[0-9]+]] = fir.alloca i32 {bindc_name = "kagi"
6  ! CHECK:   %[[V_1:[0-9]+]] = fir.load %arg0 : !fir.ref<i32>
7  ! CHECK:   %[[V_2:[0-9]+]] = arith.cmpi slt, %[[V_1]], %c0{{.*}} : i32
8  ! CHECK:   cf.cond_br %[[V_2]], ^bb2, ^bb1
9  ! CHECK: ^bb1:  // pred: ^bb0
10  ! CHECK:   %[[V_3:[0-9]+]] = arith.cmpi sgt, %[[V_1]], %c0{{.*}} : i32
11  ! CHECK:   cf.cond_br %[[V_3]], ^bb4, ^bb3
12  ! CHECK: ^bb2:  // pred: ^bb0
13  ! CHECK:   fir.store %c1{{.*}} to %[[V_0]] : !fir.ref<i32>
14  ! CHECK:   cf.br ^bb5
15  ! CHECK: ^bb3:  // pred: ^bb1
16  ! CHECK:   fir.store %c2{{.*}} to %[[V_0]] : !fir.ref<i32>
17  ! CHECK:   cf.br ^bb5
18  ! CHECK: ^bb4:  // pred: ^bb1
19  ! CHECK:   fir.store %c3{{.*}} to %[[V_0]] : !fir.ref<i32>
20  ! CHECK:   cf.br ^bb5
21  ! CHECK: ^bb5:  // 3 preds: ^bb2, ^bb3, ^bb4
22  ! CHECK:   %[[V_4:[0-9]+]] = fir.load %[[V_0]] : !fir.ref<i32>
23  ! CHECK:   return %[[V_4]] : i32
24  if (index) 7, 8, 9
25  kagi = 0; return
267 kagi = 1; return
278 kagi = 2; return
289 kagi = 3; return
29end
30
31! CHECK-LABEL: func @_QPkagf
32function kagf(findex)
33  ! CHECK:   %[[V_0:[0-9]+]] = fir.alloca i32 {bindc_name = "kagf"
34  ! CHECK:   %[[V_1:[0-9]+]] = fir.load %arg0 : !fir.ref<f32>
35  ! CHECK:   %[[V_2:[0-9]+]] = fir.load %arg0 : !fir.ref<f32>
36  ! CHECK:   %[[V_3:[0-9]+]] = arith.addf %[[V_1]], %[[V_2]] {{.*}} : f32
37  ! CHECK:   %[[V_4:[0-9]+]] = arith.addf %[[V_3]], %[[V_3]] {{.*}} : f32
38  ! CHECK:   %cst = arith.constant 0.000000e+00 : f32
39  ! CHECK:   %[[V_5:[0-9]+]] = arith.cmpf olt, %[[V_4]], %cst {{.*}} : f32
40  ! CHECK:   cf.cond_br %[[V_5]], ^bb2, ^bb1
41  ! CHECK: ^bb1:  // pred: ^bb0
42  ! CHECK:   %[[V_6:[0-9]+]] = arith.cmpf ogt, %[[V_4]], %cst {{.*}} : f32
43  ! CHECK:   cf.cond_br %[[V_6]], ^bb4, ^bb3
44  ! CHECK: ^bb2:  // pred: ^bb0
45  ! CHECK:   fir.store %c1{{.*}} to %[[V_0]] : !fir.ref<i32>
46  ! CHECK:   cf.br ^bb5
47  ! CHECK: ^bb3:  // pred: ^bb1
48  ! CHECK:   fir.store %c2{{.*}} to %[[V_0]] : !fir.ref<i32>
49  ! CHECK:   cf.br ^bb5
50  ! CHECK: ^bb4:  // pred: ^bb1
51  ! CHECK:   fir.store %c3{{.*}} to %[[V_0]] : !fir.ref<i32>
52  ! CHECK:   cf.br ^bb5
53  ! CHECK: ^bb5:  // 3 preds: ^bb2, ^bb3, ^bb4
54  ! CHECK:   %[[V_7:[0-9]+]] = fir.load %[[V_0]] : !fir.ref<i32>
55  ! CHECK:   return %[[V_7]] : i32
56  if (findex+findex) 7, 8, 9
57  kagf = 0; return
587 kagf = 1; return
598 kagf = 2; return
609 kagf = 3; return
61end
62
63! CHECK-LABEL: func @_QQmain
64  do i = -2, 2
65    print*, kagi(i)
66  enddo
67
68  print*, kagf(-2.0)
69  print*, kagf(-1.0)
70  print*, kagf(-0.0)
71  print*, kagf( 0.0)
72  print*, kagf(+0.0)
73  print*, kagf(+1.0)
74  print*, kagf(+2.0)
75end
76