• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt < %s -constprop -S | FileCheck %s
3
4; Test to verify constant folding can occur when math routines are mapped
5; to the __<func>_finite versions of functions due to __FINITE_MATH_ONLY__
6; being enabled on headers on Linux. All calls should constant fold away
7; in this test.
8
9target triple = "unknown-unknown-linux-gnu"
10
11declare double @__acos_finite(double) #0
12declare float @__acosf_finite(float) #0
13declare double @__asin_finite(double) #0
14declare float @__asinf_finite(float) #0
15declare double @__atan2_finite(double, double) #0
16declare float @__atan2f_finite(float, float) #0
17declare double @__cosh_finite(double) #0
18declare float @__coshf_finite(float) #0
19declare double @__exp2_finite(double) #0
20declare float @__exp2f_finite(float) #0
21declare double @__exp_finite(double) #0
22declare float @__expf_finite(float) #0
23declare double @__log10_finite(double) #0
24declare float @__log10f_finite(float) #0
25declare double @__log_finite(double) #0
26declare float @__logf_finite(float) #0
27declare double @__pow_finite(double, double) #0
28declare float @__powf_finite(float, float) #0
29declare double @__sinh_finite(double) #0
30declare float @__sinhf_finite(float) #0
31
32attributes #0 = { nounwind readnone }
33
34define void @T() {
35; CHECK-LABEL: @T(
36; CHECK-NEXT:    [[SLOT:%.*]] = alloca double
37; CHECK-NEXT:    [[SLOTF:%.*]] = alloca float
38; CHECK-NEXT:    store double 0.000000e+00, double* [[SLOT]]
39; CHECK-NEXT:    store double 0x3FF921FB54442D18, double* [[SLOT]]
40; CHECK-NEXT:    store double 0x3FE4978FA3269EE1, double* [[SLOT]]
41; CHECK-NEXT:    store double 0x402422A497D6185E, double* [[SLOT]]
42; CHECK-NEXT:    store double 0x403415E5BF6FB106, double* [[SLOT]]
43; CHECK-NEXT:    store double 8.000000e+00, double* [[SLOT]]
44; CHECK-NEXT:    store double 0x3FF193EA7AAD030{{[AB]}}, double* [[SLOT]]
45; CHECK-NEXT:    store double 0x3FDE8927964FD5FD, double* [[SLOT]]
46; CHECK-NEXT:    store double 1.000000e+00, double* [[SLOT]]
47; CHECK-NEXT:    store double 0x40240926E70949AE, double* [[SLOT]]
48; CHECK-NEXT:    store float 0.000000e+00, float* [[SLOTF]]
49; CHECK-NEXT:    store float 0x3FF921FB60000000, float* [[SLOTF]]
50; CHECK-NEXT:    store float 0x3FE4978FA0000000, float* [[SLOTF]]
51; CHECK-NEXT:    store float 0x402422A4A0000000, float* [[SLOTF]]
52; CHECK-NEXT:    store float 0x403415E5C0000000, float* [[SLOTF]]
53; CHECK-NEXT:    store float 8.000000e+00, float* [[SLOTF]]
54; CHECK-NEXT:    store float 0x3FF193EA80000000, float* [[SLOTF]]
55; CHECK-NEXT:    store float 0x3FDE8927A0000000, float* [[SLOTF]]
56; CHECK-NEXT:    store float 8.100000e+01, float* [[SLOTF]]
57; CHECK-NEXT:    store float 0x40240926E0000000, float* [[SLOTF]]
58; CHECK-NEXT:    ret void
59;
60  %slot = alloca double
61  %slotf = alloca float
62
63  %ACOS = call fast double @__acos_finite(double 1.000000e+00)
64  store double %ACOS, double* %slot
65  %ASIN = call fast double @__asin_finite(double 1.000000e+00)
66  store double %ASIN, double* %slot
67  %ATAN2 = call fast double @__atan2_finite(double 3.000000e+00, double 4.000000e+00)
68  store double %ATAN2, double* %slot
69  %COSH = call fast double @__cosh_finite(double 3.000000e+00)
70  store double %COSH, double* %slot
71  %EXP = call fast double @__exp_finite(double 3.000000e+00)
72  store double %EXP, double* %slot
73  %EXP2 = call fast double @__exp2_finite(double 3.000000e+00)
74  store double %EXP2, double* %slot
75  %LOG = call fast double @__log_finite(double 3.000000e+00)
76  store double %LOG, double* %slot
77  %LOG10 = call fast double @__log10_finite(double 3.000000e+00)
78  store double %LOG10, double* %slot
79  %POW = call fast double @__pow_finite(double 1.000000e+00, double 4.000000e+00)
80  store double %POW, double* %slot
81  %SINH = call fast double @__sinh_finite(double 3.000000e+00)
82  store double %SINH, double* %slot
83
84  %ACOSF = call fast float @__acosf_finite(float 1.000000e+00)
85  store float %ACOSF, float* %slotf
86  %ASINF = call fast float @__asinf_finite(float 1.000000e+00)
87  store float %ASINF, float* %slotf
88  %ATAN2F = call fast float @__atan2f_finite(float 3.000000e+00, float 4.000000e+00)
89  store float %ATAN2F, float* %slotf
90  %COSHF = call fast float @__coshf_finite(float 3.000000e+00)
91  store float %COSHF, float* %slotf
92  %EXPF = call fast float @__expf_finite(float 3.000000e+00)
93  store float %EXPF, float* %slotf
94  %EXP2F = call fast float @__exp2f_finite(float 3.000000e+00)
95  store float %EXP2F, float* %slotf
96  %LOGF = call fast float @__logf_finite(float 3.000000e+00)
97  store float %LOGF, float* %slotf
98  %LOG10F = call fast float @__log10f_finite(float 3.000000e+00)
99  store float %LOG10F, float* %slotf
100  %POWF = call fast float @__powf_finite(float 3.000000e+00, float 4.000000e+00)
101  store float %POWF, float* %slotf
102  %SINHF = call fast float @__sinhf_finite(float 3.000000e+00)
103  store float %SINHF, float* %slotf
104  ret void
105}
106
107