1! RUN: bbc -hlfir=false %s -o - | FileCheck %s 2 3! Test real add on real kinds. 4 5! CHECK-LABEL: real2 6REAL(2) FUNCTION real2(x0, x1) 7 REAL(2) :: x0 8 REAL(2) :: x1 9 ! CHECK-DAG: %[[v1:.+]] = fir.load %arg0 : !fir.ref<f16> 10 ! CHECK-DAG: %[[v2:.+]] = fir.load %arg1 : !fir.ref<f16> 11 ! CHECK: %[[v3:.+]] = arith.addf %[[v1]], %[[v2]] {{.*}}: f16 12 real2 = x0 + x1 13 ! CHECK: return %{{.*}} : f16 14END FUNCTION real2 15 16! CHECK-LABEL: real3 17REAL(3) FUNCTION real3(x0, x1) 18 REAL(3) :: x0 19 REAL(3) :: x1 20 ! CHECK-DAG: %[[v1:.+]] = fir.load %arg0 : !fir.ref<bf16> 21 ! CHECK-DAG: %[[v2:.+]] = fir.load %arg1 : !fir.ref<bf16> 22 ! CHECK: %[[v3:.+]] = arith.addf %[[v1]], %[[v2]] {{.*}}: bf16 23 real3 = x0 + x1 24 ! CHECK: return %{{.*}} : bf16 25END FUNCTION real3 26 27! CHECK-LABEL: real4 28REAL(4) FUNCTION real4(x0, x1) 29 REAL(4) :: x0 30 REAL(4) :: x1 31 ! CHECK-DAG: %[[v1:.+]] = fir.load %arg0 : !fir.ref<f32> 32 ! CHECK-DAG: %[[v2:.+]] = fir.load %arg1 : !fir.ref<f32> 33 ! CHECK: %[[v3:.+]] = arith.addf %[[v1]], %[[v2]] {{.*}}: f32 34 real4 = x0 + x1 35 ! CHECK: return %{{.*}} : f32 36END FUNCTION real4 37 38! CHECK-LABEL: defreal 39REAL FUNCTION defreal(x0, x1) 40 REAL :: x0 41 REAL :: x1 42 ! CHECK-DAG: %[[v1:.+]] = fir.load %arg0 : !fir.ref<f32> 43 ! CHECK-DAG: %[[v2:.+]] = fir.load %arg1 : !fir.ref<f32> 44 ! CHECK: %[[v3:.+]] = arith.addf %[[v1]], %[[v2]] {{.*}}: f32 45 defreal = x0 + x1 46 ! CHECK: return %{{.*}} : f32 47END FUNCTION defreal 48 49! CHECK-LABEL: real8 50REAL(8) FUNCTION real8(x0, x1) 51 REAL(8) :: x0 52 REAL(8) :: x1 53 ! CHECK-DAG: %[[v1:.+]] = fir.load %arg0 : !fir.ref<f64> 54 ! CHECK-DAG: %[[v2:.+]] = fir.load %arg1 : !fir.ref<f64> 55 ! CHECK: %[[v3:.+]] = arith.addf %[[v1]], %[[v2]] {{.*}}: f64 56 real8 = x0 + x1 57 ! CHECK: return %{{.*}} : f64 58END FUNCTION real8 59 60! CHECK-LABEL: doubleprec 61DOUBLE PRECISION FUNCTION doubleprec(x0, x1) 62 DOUBLE PRECISION :: x0 63 DOUBLE PRECISION :: x1 64 ! CHECK-DAG: %[[v1:.+]] = fir.load %arg0 : !fir.ref<f64> 65 ! CHECK-DAG: %[[v2:.+]] = fir.load %arg1 : !fir.ref<f64> 66 ! CHECK: %[[v3:.+]] = arith.addf %[[v1]], %[[v2]] {{.*}}: f64 67 doubleprec = x0 + x1 68 ! CHECK: return %{{.*}} : f64 69END FUNCTION doubleprec 70 71! CHECK-LABEL: real10 72REAL(10) FUNCTION real10(x0, x1) 73 REAL(10) :: x0 74 REAL(10) :: x1 75 ! CHECK-DAG: %[[v1:.+]] = fir.load %arg0 : !fir.ref<f80> 76 ! CHECK-DAG: %[[v2:.+]] = fir.load %arg1 : !fir.ref<f80> 77 ! CHECK: %[[v3:.+]] = arith.addf %[[v1]], %[[v2]] {{.*}}: f80 78 real10 = x0 + x1 79 ! CHECK: return %{{.*}} : f80 80END FUNCTION real10 81 82! CHECK-LABEL: real16 83REAL(16) FUNCTION real16(x0, x1) 84 REAL(16) :: x0 85 REAL(16) :: x1 86 ! CHECK-DAG: %[[v1:.+]] = fir.load %arg0 : !fir.ref<f128> 87 ! CHECK-DAG: %[[v2:.+]] = fir.load %arg1 : !fir.ref<f128> 88 ! CHECK: %[[v3:.+]] = arith.addf %[[v1]], %[[v2]] {{.*}}: f128 89 real16 = x0 + x1 90 ! CHECK: return %{{.*}} : f128 91END FUNCTION real16 92 93! CHECK-LABEL: real16b 94REAL(16) FUNCTION real16b(x0, x1) 95 REAL(16) :: x0 96 REAL(16) :: x1 97 ! CHECK-DAG: %[[v0:.+]] = arith.constant 4.0{{.*}} : f128 98 ! CHECK-DAG: %[[v1:.+]] = fir.load %arg0 : !fir.ref<f128> 99 ! CHECK-DAG: %[[v2:.+]] = fir.load %arg1 : !fir.ref<f128> 100 ! CHECK: %[[v3:.+]] = arith.addf %[[v1]], %[[v2]] {{.*}}: f128 101 ! CHECK: %[[v4:.+]] = arith.subf %[[v3]], %[[v0]] {{.*}}: f128 102 real16b = x0 + x1 - 4.0_16 103 ! CHECK: return %{{.*}} : f128 104END FUNCTION real16b 105