File: atan.ll

package info (click to toggle)
llvm-toolchain-17 1%3A17.0.6-22
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,799,624 kB
  • sloc: cpp: 6,428,607; ansic: 1,383,196; asm: 793,408; python: 223,504; objc: 75,364; f90: 60,502; lisp: 33,869; pascal: 15,282; sh: 9,684; perl: 7,453; ml: 4,937; awk: 3,523; makefile: 2,889; javascript: 2,149; xml: 888; fortran: 619; cs: 573
file content (158 lines) | stat: -rw-r--r-- 4,443 bytes parent folder | download | duplicates (12)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
; RUN: opt -passes=early-cse -S < %s | FileCheck %s

; We allow either sign to provide flexibility for mathlib
; implementations. The POSIX standard is not strict here.

define float @callatan0() {
; CHECK-LABEL: @callatan0(
; CHECK-NEXT:    ret float {{-?}}0.000000e+00
;
  %call = call float @atanf(float -0.0)
  ret float %call
}

; TODO: constant should be folded
define float @callatanInf() {
; CHECK-LABEL: @callatanInf(
; CHECK-NEXT:    [[CALL:%.*]] = call float @atanf(float 0x7FF0000000000000)
; CHECK-NEXT:    ret float [[CALL]]
;
  %call = call float @atanf(float 0x7FF0000000000000)
  ret float %call
}

; TODO: constant should be folded
define float @callatanNaN() {
; CHECK-LABEL: @callatanNaN(
; CHECK-NEXT:    [[CALL:%.*]] = call float @atanf(float 0x7FF8000000000000)
; CHECK-NEXT:    ret float [[CALL]]
;
  %call = call float @atanf(float 0x7FF8000000000000)
  ret float %call
}

; POSIX: May fail with Range Error. We choose not to fail.
define float @callatanDenorm() {
; CHECK-LABEL: @callatanDenorm(
; CHECK-NEXT:    ret float 0x37A16C2000000000
;
  %call = call float @atanf(float 0x37A16C2000000000)
  ret float %call
}

; TODO: long double calls currently not folded
define x86_fp80 @atanl_x86(x86_fp80 %x) {
; CHECK-LABEL: @atanl_x86(
; CHECK-NEXT:    [[CALL:%.*]] = call x86_fp80 @atanl(x86_fp80 noundef 0xK3FFF8CCCCCCCCCCCCCCD)
; CHECK-NEXT:    ret x86_fp80 [[CALL]]
;
  %call = call x86_fp80 @atanl(x86_fp80 noundef 0xK3FFF8CCCCCCCCCCCCCCD)
  ret x86_fp80 %call
}

; This is not folded because it is known to set errno on some systems.

define float @callatan2_00() {
; CHECK-LABEL: @callatan2_00(
; CHECK-NEXT:    [[CALL:%.*]] = call float @atan2f(float 0.000000e+00, float 0.000000e+00)
; CHECK-NEXT:    ret float [[CALL]]
;
  %call = call float @atan2f(float 0.0, float 0.0)
  ret float %call
}

; This is not folded because it is known to set errno on some systems.

define float @callatan2_n00() {
; CHECK-LABEL: @callatan2_n00(
; CHECK-NEXT:    [[CALL:%.*]] = call float @atan2f(float -0.000000e+00, float 0.000000e+00)
; CHECK-NEXT:    ret float [[CALL]]
;
  %call = call float @atan2f(float -0.0, float 0.0)
  ret float %call
}

; This is not folded because it is known to set errno on some systems.

define float @callatan2_0n0() {
; CHECK-LABEL: @callatan2_0n0(
; CHECK-NEXT:    [[CALL:%.*]] = call float @atan2f(float 0.000000e+00, float -0.000000e+00)
; CHECK-NEXT:    ret float [[CALL]]
;
  %call = call float @atan2f(float 0.0, float -0.0)
  ret float %call
}

; This is not folded because it is known to set errno on some systems.

define float @callatan2_n0n0() {
; CHECK-LABEL: @callatan2_n0n0(
; CHECK-NEXT:    [[CALL:%.*]] = call float @atan2f(float -0.000000e+00, float -0.000000e+00)
; CHECK-NEXT:    ret float [[CALL]]
;
  %call = call float @atan2f(float -0.0, float -0.0)
  ret float %call
}

define float @callatan2_x0() {
; CHECK-LABEL: @callatan2_x0(
; CHECK-NEXT:    ret float 0x3FF921FB60000000
;
  %call = call float @atan2f(float 1.0, float -0.000000e+00)
  ret float %call
}

define float @callatan2_0x() {
; CHECK-LABEL: @callatan2_0x(
; CHECK-NEXT:    ret float -0.000000e+00
;
  %call = call float @atan2f(float -0.0, float 1.0)
  ret float %call
}

define float @callatan2_xx() {
; CHECK-LABEL: @callatan2_xx(
; CHECK-NEXT:    ret float 0xBFE921FB60000000
;
  %call = call float @atan2f(float -1.0, float 1.0)
  ret float %call
}

define float @callatan2_denorm() {
; CHECK-LABEL: @callatan2_denorm(
; CHECK-NEXT:    ret float 0x37A16C2000000000
;
  %call = call float @atan2f(float 0x39B4484C00000000, float 1.0e+10)
  ret float %call
}

define float @callatan2_flush_to_zero() {
; CHECK-LABEL: @callatan2_flush_to_zero(
; CHECK-NEXT:    ret float 0.000000e+00
;
  %call = call float @atan2f(float 0x39B4484C00000000, float 0x4415AF1D80000000)
  ret float %call
}

define float @callatan2_NaN() {
; CHECK-LABEL: @callatan2_NaN(
; CHECK-NEXT:    ret float 0x7FF8000000000000
;
  %call = call float @atan2f(float 0x7FF8000000000000, float 0x7FF8000000000000)
  ret float %call
}

define float @callatan2_Inf() {
; CHECK-LABEL: @callatan2_Inf(
; CHECK-NEXT:    ret float 0x3FE921FB60000000
;
  %call = call float @atan2f(float 0x7FF0000000000000, float 0x7FF0000000000000)
  ret float %call
}

declare dso_local float @atanf(float) #0
declare dso_local x86_fp80 @atanl(x86_fp80) #0

declare dso_local float @atan2f(float, float) #0

attributes #0 = { nofree nounwind willreturn }