Break circular dependency between FIR dialect and utilities
[llvm-project.git] / flang / test / Lower / arithmetic-goto.f90
blobeaf3d0c14c7ac86bb6dea6a45c08ae4a00acaaea
1 ! RUN: bbc -emit-fir -o - %s | FileCheck %s
3 ! CHECK-LABEL: func @_QPkagi
4 function 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
26 7 kagi = 1; return
27 8 kagi = 2; return
28 9 kagi = 3; return
29 end
31 ! CHECK-LABEL: func @_QPkagf
32 function 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
58 7 kagf = 1; return
59 8 kagf = 2; return
60 9 kagf = 3; return
61 end
63 ! CHECK-LABEL: func @_QQmain
64 do i = -2, 2
65 print*, kagi(i)
66 enddo
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)
75 end