128 lines · plain
1! RUN: bbc -emit-hlfir %s -o - | FileCheck %s --check-prefixes=CHECK%if target=x86_64{{.*}} %{,CHECK-KIND10%}%if flang-supports-f128-math %{,CHECK-KIND16%}2! Test real add on real kinds.3 4! CHECK-LABEL: real25REAL(2) FUNCTION real2(x0, x1)6 REAL(2) :: x07 REAL(2) :: x18 ! CHECK: %[[x0:.*]]:2 = hlfir.declare{{.*}}x0"9 ! CHECK: %[[x1:.*]]:2 = hlfir.declare{{.*}}x1"10 ! CHECK-DAG: %[[v1:.+]] = fir.load %[[x0]]#0 : !fir.ref<f16>11 ! CHECK-DAG: %[[v2:.+]] = fir.load %[[x1]]#0 : !fir.ref<f16>12 ! CHECK: %[[v3:.+]] = arith.addf %[[v1]], %[[v2]] {{.*}}: f1613 real2 = x0 + x114 ! CHECK: return %{{.*}} : f1615END FUNCTION real216 17! CHECK-LABEL: real318REAL(3) FUNCTION real3(x0, x1)19 REAL(3) :: x020 REAL(3) :: x121 ! CHECK: %[[x0:.*]]:2 = hlfir.declare{{.*}}x0"22 ! CHECK: %[[x1:.*]]:2 = hlfir.declare{{.*}}x1"23 ! CHECK-DAG: %[[v1:.+]] = fir.load %[[x0]]#0 : !fir.ref<bf16>24 ! CHECK-DAG: %[[v2:.+]] = fir.load %[[x1]]#0 : !fir.ref<bf16>25 ! CHECK: %[[v3:.+]] = arith.addf %[[v1]], %[[v2]] {{.*}}: bf1626 real3 = x0 + x127 ! CHECK: return %{{.*}} : bf1628END FUNCTION real329 30! CHECK-LABEL: real431REAL(4) FUNCTION real4(x0, x1)32 REAL(4) :: x033 REAL(4) :: x134 ! CHECK: %[[x0:.*]]:2 = hlfir.declare{{.*}}x0"35 ! CHECK: %[[x1:.*]]:2 = hlfir.declare{{.*}}x1"36 ! CHECK-DAG: %[[v1:.+]] = fir.load %[[x0]]#0 : !fir.ref<f32>37 ! CHECK-DAG: %[[v2:.+]] = fir.load %[[x1]]#0 : !fir.ref<f32>38 ! CHECK: %[[v3:.+]] = arith.addf %[[v1]], %[[v2]] {{.*}}: f3239 real4 = x0 + x140 ! CHECK: return %{{.*}} : f3241END FUNCTION real442 43! CHECK-LABEL: defreal44REAL FUNCTION defreal(x0, x1)45 REAL :: x046 REAL :: x147 ! CHECK: %[[x0:.*]]:2 = hlfir.declare{{.*}}x0"48 ! CHECK: %[[x1:.*]]:2 = hlfir.declare{{.*}}x1"49 ! CHECK-DAG: %[[v1:.+]] = fir.load %[[x0]]#0 : !fir.ref<f32>50 ! CHECK-DAG: %[[v2:.+]] = fir.load %[[x1]]#0 : !fir.ref<f32>51 ! CHECK: %[[v3:.+]] = arith.addf %[[v1]], %[[v2]] {{.*}}: f3252 defreal = x0 + x153 ! CHECK: return %{{.*}} : f3254END FUNCTION defreal55 56! CHECK-LABEL: real857REAL(8) FUNCTION real8(x0, x1)58 REAL(8) :: x059 REAL(8) :: x160 ! CHECK: %[[x0:.*]]:2 = hlfir.declare{{.*}}x0"61 ! CHECK: %[[x1:.*]]:2 = hlfir.declare{{.*}}x1"62 ! CHECK-DAG: %[[v1:.+]] = fir.load %[[x0]]#0 : !fir.ref<f64>63 ! CHECK-DAG: %[[v2:.+]] = fir.load %[[x1]]#0 : !fir.ref<f64>64 ! CHECK: %[[v3:.+]] = arith.addf %[[v1]], %[[v2]] {{.*}}: f6465 real8 = x0 + x166 ! CHECK: return %{{.*}} : f6467END FUNCTION real868 69! CHECK-LABEL: doubleprec70DOUBLE PRECISION FUNCTION doubleprec(x0, x1)71 DOUBLE PRECISION :: x072 DOUBLE PRECISION :: x173 ! CHECK: %[[x0:.*]]:2 = hlfir.declare{{.*}}x0"74 ! CHECK: %[[x1:.*]]:2 = hlfir.declare{{.*}}x1"75 ! CHECK-DAG: %[[v1:.+]] = fir.load %[[x0]]#0 : !fir.ref<f64>76 ! CHECK-DAG: %[[v2:.+]] = fir.load %[[x1]]#0 : !fir.ref<f64>77 ! CHECK: %[[v3:.+]] = arith.addf %[[v1]], %[[v2]] {{.*}}: f6478 doubleprec = x0 + x179 ! CHECK: return %{{.*}} : f6480END FUNCTION doubleprec81 82! CHECK-KIND10-LABEL: real1083FUNCTION real10(x0, x1)84 INTEGER, PARAMETER :: kind10 = merge(10, 4, selected_real_kind(p=18).eq.10)85 REAL(kind10) :: real1086 REAL(kind10) :: x087 REAL(kind10) :: x188 ! CHECK-KIND10: %[[x0:.*]]:2 = hlfir.declare{{.*}}x0"89 ! CHECK-KIND10: %[[x1:.*]]:2 = hlfir.declare{{.*}}x1"90 ! CHECK-KIND10-DAG: %[[v1:.+]] = fir.load %[[x0]]#0 : !fir.ref<f80>91 ! CHECK-KIND10-DAG: %[[v2:.+]] = fir.load %[[x1]]#0 : !fir.ref<f80>92 ! CHECK-KIND10: %[[v3:.+]] = arith.addf %[[v1]], %[[v2]] {{.*}}: f8093 real10 = x0 + x194 ! CHECK-KIND10: return %{{.*}} : f8095END FUNCTION real1096 97! CHECK-KIND16-LABEL: real16(98FUNCTION real16(x0, x1)99 INTEGER, PARAMETER :: kind16 = merge(16, 4, selected_real_kind(p=33).eq.16)100 REAL(kind16) :: real16101 REAL(kind16) :: x0102 REAL(kind16) :: x1103 ! CHECK-KIND16: %[[x0:.*]]:2 = hlfir.declare{{.*}}x0"104 ! CHECK-KIND16: %[[x1:.*]]:2 = hlfir.declare{{.*}}x1"105 ! CHECK-KIND16-DAG: %[[v1:.+]] = fir.load %[[x0]]#0 : !fir.ref<f128>106 ! CHECK-KIND16-DAG: %[[v2:.+]] = fir.load %[[x1]]#0 : !fir.ref<f128>107 ! CHECK-KIND16: %[[v3:.+]] = arith.addf %[[v1]], %[[v2]] {{.*}}: f128108 real16 = x0 + x1109 ! CHECK-KIND16: return %{{.*}} : f128110END FUNCTION real16111 112! CHECK-KIND16-LABEL: real16b113FUNCTION real16b(x0, x1)114 INTEGER, PARAMETER :: kind16 = merge(16, 4, selected_real_kind(p=33).eq.16)115 REAL(kind16) :: real16b116 REAL(kind16) :: x0117 REAL(kind16) :: x1118 ! CHECK-KIND16: %[[x0:.*]]:2 = hlfir.declare{{.*}}x0"119 ! CHECK-KIND16: %[[x1:.*]]:2 = hlfir.declare{{.*}}x1"120 ! CHECK-KIND16-DAG: %[[v1:.+]] = fir.load %[[x0]]#0 : !fir.ref<f128>121 ! CHECK-KIND16-DAG: %[[v2:.+]] = fir.load %[[x1]]#0 : !fir.ref<f128>122 ! CHECK-KIND16-DAG: %[[v3:.+]] = arith.addf %[[v1]], %[[v2]] {{.*}}: f128123 ! CHECK-KIND16-DAG: %[[v0:.+]] = arith.constant 4.0{{.*}} : f128124 ! CHECK-KIND16: %[[v4:.+]] = arith.subf %[[v3]], %[[v0]] {{.*}}: f128125 real16b = x0 + x1 - 4.0_16126 ! CHECK-KIND16: return %{{.*}} : f128127END FUNCTION real16b128