• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: opt < %s -instcombine -S | FileCheck %s
2
3; Infinity
4
5; CHECK: inf0
6; CHECK: ret i1 false
7define i1 @inf0(double %arg) nounwind readnone {
8  %tmp = fcmp ogt double %arg, 0x7FF0000000000000
9  ret i1 %tmp
10}
11
12; CHECK: inf1
13; CHECK: ret i1 true
14define i1 @inf1(double %arg) nounwind readnone {
15  %tmp = fcmp ule double %arg, 0x7FF0000000000000
16  ret i1 %tmp
17}
18
19; Negative infinity
20
21; CHECK: ninf0
22; CHECK: ret i1 false
23define i1 @ninf0(double %arg) nounwind readnone {
24  %tmp = fcmp olt double %arg, 0xFFF0000000000000
25  ret i1 %tmp
26}
27
28; CHECK: ninf1
29; CHECK: ret i1 true
30define i1 @ninf1(double %arg) nounwind readnone {
31  %tmp = fcmp uge double %arg, 0xFFF0000000000000
32  ret i1 %tmp
33}
34
35; NaNs
36
37; CHECK: nan0
38; CHECK: ret i1 false
39define i1 @nan0(double %arg) nounwind readnone {
40  %tmp = fcmp ord double %arg, 0x7FF00000FFFFFFFF
41  ret i1 %tmp
42}
43
44; CHECK: nan1
45; CHECK: ret i1 false
46define i1 @nan1(double %arg) nounwind readnone {
47  %tmp = fcmp oeq double %arg, 0x7FF00000FFFFFFFF
48  ret i1 %tmp
49}
50
51; CHECK: nan2
52; CHECK: ret i1 false
53define i1 @nan2(double %arg) nounwind readnone {
54  %tmp = fcmp olt double %arg, 0x7FF00000FFFFFFFF
55  ret i1 %tmp
56}
57
58; CHECK: nan3
59; CHECK: ret i1 true
60define i1 @nan3(double %arg) nounwind readnone {
61  %tmp = fcmp uno double %arg, 0x7FF00000FFFFFFFF
62  ret i1 %tmp
63}
64
65; CHECK: nan4
66; CHECK: ret i1 true
67define i1 @nan4(double %arg) nounwind readnone {
68  %tmp = fcmp une double %arg, 0x7FF00000FFFFFFFF
69  ret i1 %tmp
70}
71
72; CHECK: nan5
73; CHECK: ret i1 true
74define i1 @nan5(double %arg) nounwind readnone {
75  %tmp = fcmp ult double %arg, 0x7FF00000FFFFFFFF
76  ret i1 %tmp
77}
78
79; Negative NaN.
80
81; CHECK: nnan0
82; CHECK: ret i1 false
83define i1 @nnan0(double %arg) nounwind readnone {
84  %tmp = fcmp ord double %arg, 0xFFF00000FFFFFFFF
85  ret i1 %tmp
86}
87
88; CHECK: nnan1
89; CHECK: ret i1 false
90define i1 @nnan1(double %arg) nounwind readnone {
91  %tmp = fcmp oeq double %arg, 0xFFF00000FFFFFFFF
92  ret i1 %tmp
93}
94
95; CHECK: nnan2
96; CHECK: ret i1 false
97define i1 @nnan2(double %arg) nounwind readnone {
98  %tmp = fcmp olt double %arg, 0xFFF00000FFFFFFFF
99  ret i1 %tmp
100}
101
102; CHECK: nnan3
103; CHECK: ret i1 true
104define i1 @nnan3(double %arg) nounwind readnone {
105  %tmp = fcmp uno double %arg, 0xFFF00000FFFFFFFF
106  ret i1 %tmp
107}
108
109; CHECK: nnan4
110; CHECK: ret i1 true
111define i1 @nnan4(double %arg) nounwind readnone {
112  %tmp = fcmp une double %arg, 0xFFF00000FFFFFFFF
113  ret i1 %tmp
114}
115
116; CHECK: nnan5
117; CHECK: ret i1 true
118define i1 @nnan5(double %arg) nounwind readnone {
119  %tmp = fcmp ult double %arg, 0xFFF00000FFFFFFFF
120  ret i1 %tmp
121}
122
123; Negative zero.
124
125; CHECK: nzero0
126; CHECK: ret i1 true
127define i1 @nzero0() {
128  %tmp = fcmp oeq double 0.0, -0.0
129  ret i1 %tmp
130}
131
132; CHECK: nzero1
133; CHECK: ret i1 false
134define i1 @nzero1() {
135  %tmp = fcmp ogt double 0.0, -0.0
136  ret i1 %tmp
137}
138
139; Misc.
140
141; CHECK: misc0
142; CHECK: %tmp = fcmp ord double %arg, 0.000000e+00
143; CHECK: ret i1 %tmp
144define i1 @misc0(double %arg) {
145  %tmp = fcmp oeq double %arg, %arg
146  ret i1 %tmp
147}
148
149; CHECK: misc1
150; CHECK: ret i1 false
151define i1 @misc1(double %arg) {
152  %tmp = fcmp one double %arg, %arg
153  ret i1 %tmp
154}
155
156