1- ! RUN: %flang_fc1 -ffast-math -emit-mlir -o - %s | FileCheck %s --check-prefixes=CHECK%if target=x86_64{{.*}} %{,CHECK-KIND10%}%if flang-supports-f128-math %{,CHECK-KIND16%}
1+ ! RUN: %flang_fc1 -ffast-real-mod -emit-mlir -o - %s | FileCheck %s --check-prefixes=CHECK-FRM%if target=x86_64{{.*}} %{,CHECK-FRM-KIND10%}%if flang-supports-f128-math %{,CHECK-FRM-KIND16%}
2+ ! RUN: %flang_fc1 -ffast-math -emit-mlir -o - %s | FileCheck %s --check-prefixes=CHECK-FRM%if target=x86_64{{.*}} %{,CHECK-FRM-KIND10%}%if flang-supports-f128-math %{,CHECK-FRM-KIND16%}
23! RUN: %flang_fc1 -ffast-math -fno-fast-real-mod -emit-mlir -o - %s | FileCheck %s --check-prefixes=CHECK-NFRM%if target=x86_64{{.*}} %{,CHECK-NFRM-KIND10%}%if flang-supports-f128-math %{,CHECK-NFRM-KIND16%}
34
4- ! TODO: check line that fir.fast_real_mod is not there
5- ! CHECK-NFRM: module attributes {{{.*}}fir.no_fast_real_mod = true{{.*}}}
5+ ! CHECK,CHECK-FRM: module attributes {{{.*}}fir.fast_real_mod = true{{.*}}}
66
77! CHECK-LABEL: @_QPmod_real4
88subroutine mod_real4 (r , a , p )
99 implicit none
1010 real (kind= 4 ) :: r, a, p
11- ! CHECK: %[[A:.*]] = fir.declare{{.*}}a"
12- ! CHECK: %[[P:.*]] = fir.declare{{.*}}p"
13- ! CHECK: %[[R:.*]] = fir.declare{{.*}}r"
14- ! CHECK: %[[A_LOAD:.*]] = fir.load %[[A]]
15- ! CHECK: %[[P_LOAD:.*]] = fir.load %[[P]]
16- ! CHECK: %[[DIV:.*]] = arith.divf %[[A_LOAD]], %[[P_LOAD]] fastmath<fast > : f32
17- ! CHECK: %[[CV1:.*]] = fir.convert %[[DIV]] : (f32) -> si32
18- ! CHECK: %[[CV2:.*]] = fir.convert %[[CV1]] : (si32) -> f32
19- ! CHECK: %[[MUL:.*]] = arith.mulf %[[CV2]], %[[P_LOAD]] fastmath<fast > : f32
20- ! CHECK: %[[SUB:.*]] = arith.subf %[[A_LOAD]], %[[MUL]] fastmath<fast > : f32
21- ! CHECK: fir.store %[[SUB]] to %[[R]] : !fir.ref<f32>
11+ ! CHECK-FRM : %[[A:.*]] = fir.declare{{.*}}a"
12+ ! CHECK-FRM : %[[P:.*]] = fir.declare{{.*}}p"
13+ ! CHECK-FRM : %[[R:.*]] = fir.declare{{.*}}r"
14+ ! CHECK-FRM : %[[A_LOAD:.*]] = fir.load %[[A]]
15+ ! CHECK-FRM : %[[P_LOAD:.*]] = fir.load %[[P]]
16+ ! CHECK-FRM : %[[DIV:.*]] = arith.divf %[[A_LOAD]], %[[P_LOAD]] fastmath<{{.*}} > : f32
17+ ! CHECK-FRM : %[[CV1:.*]] = fir.convert %[[DIV]] : (f32) -> si32
18+ ! CHECK-FRM : %[[CV2:.*]] = fir.convert %[[CV1]] : (si32) -> f32
19+ ! CHECK-FRM : %[[MUL:.*]] = arith.mulf %[[CV2]], %[[P_LOAD]] fastmath<{{.*}} > : f32
20+ ! CHECK-FRM : %[[SUB:.*]] = arith.subf %[[A_LOAD]], %[[MUL]] fastmath<{{.*}} > : f32
21+ ! CHECK-FRM : fir.store %[[SUB]] to %[[R]] : !fir.ref<f32>
2222! CHECK-NFRM: fir.call @_FortranAModReal4(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) {{.*}}: (f32, f32, !fir.ref<i8>, i32) -> f32
2323 r = mod (a, p)
2424end subroutine mod_real4
@@ -27,17 +27,17 @@ end subroutine mod_real4
2727subroutine mod_real8 (r , a , p )
2828 implicit none
2929 real (kind= 8 ) :: r, a, p
30- ! CHECK: %[[A:.*]] = fir.declare{{.*}}a"
31- ! CHECK: %[[P:.*]] = fir.declare{{.*}}p"
32- ! CHECK: %[[R:.*]] = fir.declare{{.*}}r"
33- ! CHECK: %[[A_LOAD:.*]] = fir.load %[[A]]
34- ! CHECK: %[[P_LOAD:.*]] = fir.load %[[P]]
35- ! CHECK: %[[DIV:.*]] = arith.divf %[[A_LOAD]], %[[P_LOAD]] fastmath<fast > : f64
36- ! CHECK: %[[CV1:.*]] = fir.convert %[[DIV]] : (f64) -> si64
37- ! CHECK: %[[CV2:.*]] = fir.convert %[[CV1]] : (si64) -> f64
38- ! CHECK: %[[MUL:.*]] = arith.mulf %[[CV2]], %[[P_LOAD]] fastmath<fast > : f64
39- ! CHECK: %[[SUB:.*]] = arith.subf %[[A_LOAD]], %[[MUL]] fastmath<fast > : f64
40- ! CHECK: fir.store %[[SUB]] to %[[R]] : !fir.ref<f64>
30+ ! CHECK-FRM : %[[A:.*]] = fir.declare{{.*}}a"
31+ ! CHECK-FRM : %[[P:.*]] = fir.declare{{.*}}p"
32+ ! CHECK-FRM : %[[R:.*]] = fir.declare{{.*}}r"
33+ ! CHECK-FRM : %[[A_LOAD:.*]] = fir.load %[[A]]
34+ ! CHECK-FRM : %[[P_LOAD:.*]] = fir.load %[[P]]
35+ ! CHECK-FRM : %[[DIV:.*]] = arith.divf %[[A_LOAD]], %[[P_LOAD]] fastmath<{{.*}} > : f64
36+ ! CHECK-FRM : %[[CV1:.*]] = fir.convert %[[DIV]] : (f64) -> si64
37+ ! CHECK-FRM : %[[CV2:.*]] = fir.convert %[[CV1]] : (si64) -> f64
38+ ! CHECK-FRM : %[[MUL:.*]] = arith.mulf %[[CV2]], %[[P_LOAD]] fastmath<{{.*}} > : f64
39+ ! CHECK-FRM : %[[SUB:.*]] = arith.subf %[[A_LOAD]], %[[MUL]] fastmath<{{.*}} > : f64
40+ ! CHECK-FRM : fir.store %[[SUB]] to %[[R]] : !fir.ref<f64>
4141! CHECK-NFRM: fir.call @_FortranAModReal8(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) {{.*}}: (f64, f64, !fir.ref<i8>, i32) -> f64
4242 r = mod (a, p)
4343end subroutine mod_real8
@@ -47,17 +47,17 @@ subroutine mod_real10(r, a, p)
4747 implicit none
4848 integer , parameter :: kind10 = merge (10 , 4 , selected_real_kind (p= 18 ).eq. 10 )
4949 real (kind= kind10) :: r, a, p
50- ! CHECK-KIND10: %[[A:.*]] = fir.declare{{.*}}a"
51- ! CHECK-KIND10: %[[P:.*]] = fir.declare{{.*}}p"
52- ! CHECK-KIND10: %[[R:.*]] = fir.declare{{.*}}r"
53- ! CHECK-KIND10: %[[A_LOAD:.*]] = fir.load %[[A]]
54- ! CHECK-KIND10: %[[P_LOAD:.*]] = fir.load %[[P]]
55- ! CHECK-KIND10: %[[DIV:.*]] = arith.divf %[[A_LOAD]], %[[P_LOAD]] fastmath<fast > : f80
56- ! CHECK-KIND10: %[[CV1:.*]] = fir.convert %[[DIV]] : (f80) -> si80
57- ! CHECK-KIND10: %[[CV2:.*]] = fir.convert %[[CV1]] : (si80) -> f80
58- ! CHECK-KIND10: %[[MUL:.*]] = arith.mulf %[[CV2]], %[[P_LOAD]] fastmath<fast > : f80
59- ! CHECK-KIND10: %[[SUB:.*]] = arith.subf %[[A_LOAD]], %[[MUL]] fastmath<fast > : f80
60- ! CHECK-KIND10: fir.store %[[SUB]] to %[[R]] : !fir.ref<f80>
50+ ! CHECK-FRM- KIND10: %[[A:.*]] = fir.declare{{.*}}a"
51+ ! CHECK-FRM- KIND10: %[[P:.*]] = fir.declare{{.*}}p"
52+ ! CHECK-FRM- KIND10: %[[R:.*]] = fir.declare{{.*}}r"
53+ ! CHECK-FRM- KIND10: %[[A_LOAD:.*]] = fir.load %[[A]]
54+ ! CHECK-FRM- KIND10: %[[P_LOAD:.*]] = fir.load %[[P]]
55+ ! CHECK-FRM- KIND10: %[[DIV:.*]] = arith.divf %[[A_LOAD]], %[[P_LOAD]] fastmath<{{.*}} > : f80
56+ ! CHECK-FRM- KIND10: %[[CV1:.*]] = fir.convert %[[DIV]] : (f80) -> si80
57+ ! CHECK-FRM- KIND10: %[[CV2:.*]] = fir.convert %[[CV1]] : (si80) -> f80
58+ ! CHECK-FRM- KIND10: %[[MUL:.*]] = arith.mulf %[[CV2]], %[[P_LOAD]] fastmath<{{.*}} > : f80
59+ ! CHECK-FRM- KIND10: %[[SUB:.*]] = arith.subf %[[A_LOAD]], %[[MUL]] fastmath<{{.*}} > : f80
60+ ! CHECK-FRM- KIND10: fir.store %[[SUB]] to %[[R]] : !fir.ref<f80>
6161! CHECK-NFRM-KIND10: fir.call @_FortranAModReal10(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) {{.*}}: (f80, f80, !fir.ref<i8>, i32) -> f80
6262 r = mod (a, p)
6363end subroutine mod_real10
@@ -67,17 +67,17 @@ subroutine mod_real16(r, a, p)
6767 implicit none
6868 integer , parameter :: kind16 = merge (16 , 4 , selected_real_kind (p= 33 ).eq. 16 )
6969 real (kind= kind16) :: r, a, p
70- ! CHECK-KIND16: %[[A:.*]] = fir.declare{{.*}}a"
71- ! CHECK-KIND16: %[[P:.*]] = fir.declare{{.*}}p"
72- ! CHECK-KIND16: %[[R:.*]] = fir.declare{{.*}}r"
73- ! CHECK-KIND16: %[[A_LOAD:.*]] = fir.load %[[A]]
74- ! CHECK-KIND16: %[[P_LOAD:.*]] = fir.load %[[P]]
75- ! CHECK-KIND16: %[[DIV:.*]] = arith.divf %[[A_LOAD]], %[[P_LOAD]] fastmath<fast > : f128
76- ! CHECK-KIND16: %[[CV1:.*]] = fir.convert %[[DIV]] : (f128) -> si128
77- ! CHECK-KIND16: %[[CV2:.*]] = fir.convert %[[CV1]] : (si128) -> f128
78- ! CHECK-KIND16: %[[MUL:.*]] = arith.mulf %[[CV2]], %[[P_LOAD]] fastmath<fast > : f128
79- ! CHECK-KIND16: %[[SUB:.*]] = arith.subf %[[A_LOAD]], %[[MUL]] fastmath<fast > : f128
80- ! CHECK-KIND16: fir.store %[[SUB]] to %[[R]] : !fir.ref<f128>
70+ ! CHECK-FRM- KIND16: %[[A:.*]] = fir.declare{{.*}}a"
71+ ! CHECK-FRM- KIND16: %[[P:.*]] = fir.declare{{.*}}p"
72+ ! CHECK-FRM- KIND16: %[[R:.*]] = fir.declare{{.*}}r"
73+ ! CHECK-FRM- KIND16: %[[A_LOAD:.*]] = fir.load %[[A]]
74+ ! CHECK-FRM- KIND16: %[[P_LOAD:.*]] = fir.load %[[P]]
75+ ! CHECK-FRM- KIND16: %[[DIV:.*]] = arith.divf %[[A_LOAD]], %[[P_LOAD]] fastmath<{{.*}} > : f128
76+ ! CHECK-FRM- KIND16: %[[CV1:.*]] = fir.convert %[[DIV]] : (f128) -> si128
77+ ! CHECK-FRM- KIND16: %[[CV2:.*]] = fir.convert %[[CV1]] : (si128) -> f128
78+ ! CHECK-FRM- KIND16: %[[MUL:.*]] = arith.mulf %[[CV2]], %[[P_LOAD]] fastmath<{{.*}} > : f128
79+ ! CHECK-FRM- KIND16: %[[SUB:.*]] = arith.subf %[[A_LOAD]], %[[MUL]] fastmath<{{.*}} > : f128
80+ ! CHECK-FRM- KIND16: fir.store %[[SUB]] to %[[R]] : !fir.ref<f128>
8181! CHECK-NFRM-KIND16: fir.call @_FortranAModReal16(%{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) {{.*}}: (f128, f128, !fir.ref<i8>, i32) -> f128
8282 r = mod (a, p)
8383end subroutine mod_real16
0 commit comments