xref: /llvm-project/llvm/test/Transforms/InstCombine/ilogb.ll (revision 1336e3d0b9a361fbbe2d97f225ef6757d20df51a)
1*1336e3d0Sc8ef; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2*1336e3d0Sc8ef; RUN: opt < %s -passes=instcombine -S | FileCheck %s
3*1336e3d0Sc8ef
4*1336e3d0Sc8efdefine i32 @ilogbf_const1() {
5*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogbf_const1() {
6*1336e3d0Sc8ef; CHECK-NEXT:    [[R:%.*]] = call i32 @ilogbf(float 7.000000e+00)
7*1336e3d0Sc8ef; CHECK-NEXT:    ret i32 2
8*1336e3d0Sc8ef;
9*1336e3d0Sc8ef  %r = call i32 @ilogbf(float 7.000000e+00)
10*1336e3d0Sc8ef  ret i32 %r
11*1336e3d0Sc8ef}
12*1336e3d0Sc8ef
13*1336e3d0Sc8efdefine i32 @ilogb_const1() {
14*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogb_const1() {
15*1336e3d0Sc8ef; CHECK-NEXT:    [[R:%.*]] = call i32 @ilogb(double -7.000000e+00)
16*1336e3d0Sc8ef; CHECK-NEXT:    ret i32 2
17*1336e3d0Sc8ef;
18*1336e3d0Sc8ef  %r = call i32 @ilogb(double -7.000000e+00)
19*1336e3d0Sc8ef  ret i32 %r
20*1336e3d0Sc8ef}
21*1336e3d0Sc8ef
22*1336e3d0Sc8efdefine i32 @ilogbf_const2() {
23*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogbf_const2() {
24*1336e3d0Sc8ef; CHECK-NEXT:    [[R:%.*]] = call i32 @ilogbf(float 5.000000e-01)
25*1336e3d0Sc8ef; CHECK-NEXT:    ret i32 -1
26*1336e3d0Sc8ef;
27*1336e3d0Sc8ef  %r = call i32 @ilogbf(float 5.000000e-01)
28*1336e3d0Sc8ef  ret i32 %r
29*1336e3d0Sc8ef}
30*1336e3d0Sc8ef
31*1336e3d0Sc8efdefine i32 @ilogb_const2() {
32*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogb_const2() {
33*1336e3d0Sc8ef; CHECK-NEXT:    [[R:%.*]] = call i32 @ilogb(double -5.000000e-01)
34*1336e3d0Sc8ef; CHECK-NEXT:    ret i32 -1
35*1336e3d0Sc8ef;
36*1336e3d0Sc8ef  %r = call i32 @ilogb(double -5.000000e-01)
37*1336e3d0Sc8ef  ret i32 %r
38*1336e3d0Sc8ef}
39*1336e3d0Sc8ef
40*1336e3d0Sc8efdefine i32 @ilogbf_zero() {
41*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogbf_zero() {
42*1336e3d0Sc8ef; CHECK-NEXT:    [[R:%.*]] = call i32 @ilogbf(float 0.000000e+00)
43*1336e3d0Sc8ef; CHECK-NEXT:    ret i32 [[R]]
44*1336e3d0Sc8ef;
45*1336e3d0Sc8ef  %r = call i32 @ilogbf(float 0.000000e+00)
46*1336e3d0Sc8ef  ret i32 %r
47*1336e3d0Sc8ef}
48*1336e3d0Sc8ef
49*1336e3d0Sc8efdefine i32 @ilogb_zero() {
50*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogb_zero() {
51*1336e3d0Sc8ef; CHECK-NEXT:    [[R:%.*]] = call i32 @ilogb(double 0.000000e+00)
52*1336e3d0Sc8ef; CHECK-NEXT:    ret i32 [[R]]
53*1336e3d0Sc8ef;
54*1336e3d0Sc8ef  %r = call i32 @ilogb(double 0.000000e+00)
55*1336e3d0Sc8ef  ret i32 %r
56*1336e3d0Sc8ef}
57*1336e3d0Sc8ef
58*1336e3d0Sc8efdefine i32 @ilogbf_neg_zero() {
59*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogbf_neg_zero() {
60*1336e3d0Sc8ef; CHECK-NEXT:    [[R:%.*]] = call i32 @ilogbf(float -0.000000e+00)
61*1336e3d0Sc8ef; CHECK-NEXT:    ret i32 [[R]]
62*1336e3d0Sc8ef;
63*1336e3d0Sc8ef  %r = call i32 @ilogbf(float -0.000000e+00)
64*1336e3d0Sc8ef  ret i32 %r
65*1336e3d0Sc8ef}
66*1336e3d0Sc8ef
67*1336e3d0Sc8efdefine i32 @ilogb_neg_zero() {
68*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogb_neg_zero() {
69*1336e3d0Sc8ef; CHECK-NEXT:    [[R:%.*]] = call i32 @ilogb(double -0.000000e+00)
70*1336e3d0Sc8ef; CHECK-NEXT:    ret i32 [[R]]
71*1336e3d0Sc8ef;
72*1336e3d0Sc8ef  %r = call i32 @ilogb(double -0.000000e+00)
73*1336e3d0Sc8ef  ret i32 %r
74*1336e3d0Sc8ef}
75*1336e3d0Sc8ef
76*1336e3d0Sc8efdefine i32 @ilogbf_inf() {
77*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogbf_inf() {
78*1336e3d0Sc8ef; CHECK-NEXT:    [[R:%.*]] = call i32 @ilogbf(float 0x7FF0000000000000)
79*1336e3d0Sc8ef; CHECK-NEXT:    ret i32 [[R]]
80*1336e3d0Sc8ef;
81*1336e3d0Sc8ef  %r = call i32 @ilogbf(float 0x7FF0000000000000)
82*1336e3d0Sc8ef  ret i32 %r
83*1336e3d0Sc8ef}
84*1336e3d0Sc8ef
85*1336e3d0Sc8efdefine i32 @ilogb_inf() {
86*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogb_inf() {
87*1336e3d0Sc8ef; CHECK-NEXT:    [[R:%.*]] = call i32 @ilogb(double 0x7FF0000000000000)
88*1336e3d0Sc8ef; CHECK-NEXT:    ret i32 [[R]]
89*1336e3d0Sc8ef;
90*1336e3d0Sc8ef  %r = call i32 @ilogb(double 0x7FF0000000000000)
91*1336e3d0Sc8ef  ret i32 %r
92*1336e3d0Sc8ef}
93*1336e3d0Sc8ef
94*1336e3d0Sc8efdefine i32 @ilogbf_nan() {
95*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogbf_nan() {
96*1336e3d0Sc8ef; CHECK-NEXT:    [[R:%.*]] = call i32 @ilogbf(float 0x7FF8000000000000)
97*1336e3d0Sc8ef; CHECK-NEXT:    ret i32 [[R]]
98*1336e3d0Sc8ef;
99*1336e3d0Sc8ef  %r = call i32 @ilogbf(float 0x7FF8000000000000)
100*1336e3d0Sc8ef  ret i32 %r
101*1336e3d0Sc8ef}
102*1336e3d0Sc8ef
103*1336e3d0Sc8efdefine i32 @ilogb_nan() {
104*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogb_nan() {
105*1336e3d0Sc8ef; CHECK-NEXT:    [[R:%.*]] = call i32 @ilogb(double 0x7FF8000000000000)
106*1336e3d0Sc8ef; CHECK-NEXT:    ret i32 [[R]]
107*1336e3d0Sc8ef;
108*1336e3d0Sc8ef  %r = call i32 @ilogb(double 0x7FF8000000000000)
109*1336e3d0Sc8ef  ret i32 %r
110*1336e3d0Sc8ef}
111*1336e3d0Sc8ef
112*1336e3d0Sc8efdefine i32 @ilogbf_zero_readnone() {
113*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogbf_zero_readnone() {
114*1336e3d0Sc8ef; CHECK-NEXT:    [[R:%.*]] = call i32 @ilogbf(float 0.000000e+00) #[[ATTR0:[0-9]+]]
115*1336e3d0Sc8ef; CHECK-NEXT:    ret i32 [[R]]
116*1336e3d0Sc8ef;
117*1336e3d0Sc8ef  %r = call i32 @ilogbf(float 0.000000e+00) readnone
118*1336e3d0Sc8ef  ret i32 %r
119*1336e3d0Sc8ef}
120*1336e3d0Sc8ef
121*1336e3d0Sc8efdefine i32 @ilogb_zero_readnone() {
122*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogb_zero_readnone() {
123*1336e3d0Sc8ef; CHECK-NEXT:    [[R:%.*]] = call i32 @ilogb(double 0.000000e+00) #[[ATTR0]]
124*1336e3d0Sc8ef; CHECK-NEXT:    ret i32 [[R]]
125*1336e3d0Sc8ef;
126*1336e3d0Sc8ef  %r = call i32 @ilogb(double 0.000000e+00) readnone
127*1336e3d0Sc8ef  ret i32 %r
128*1336e3d0Sc8ef}
129*1336e3d0Sc8ef
130*1336e3d0Sc8efdefine i32 @ilogbf_neg_zero_readnone() {
131*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogbf_neg_zero_readnone() {
132*1336e3d0Sc8ef; CHECK-NEXT:    [[R:%.*]] = call i32 @ilogbf(float -0.000000e+00) #[[ATTR0]]
133*1336e3d0Sc8ef; CHECK-NEXT:    ret i32 [[R]]
134*1336e3d0Sc8ef;
135*1336e3d0Sc8ef  %r = call i32 @ilogbf(float -0.000000e+00) readnone
136*1336e3d0Sc8ef  ret i32 %r
137*1336e3d0Sc8ef}
138*1336e3d0Sc8ef
139*1336e3d0Sc8efdefine i32 @ilogb_neg_zero_readnone() {
140*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogb_neg_zero_readnone() {
141*1336e3d0Sc8ef; CHECK-NEXT:    [[R:%.*]] = call i32 @ilogb(double -0.000000e+00) #[[ATTR0]]
142*1336e3d0Sc8ef; CHECK-NEXT:    ret i32 [[R]]
143*1336e3d0Sc8ef;
144*1336e3d0Sc8ef  %r = call i32 @ilogb(double -0.000000e+00) readnone
145*1336e3d0Sc8ef  ret i32 %r
146*1336e3d0Sc8ef}
147*1336e3d0Sc8ef
148*1336e3d0Sc8efdefine i32 @ilogbf_inf_readnone() {
149*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogbf_inf_readnone() {
150*1336e3d0Sc8ef; CHECK-NEXT:    [[R:%.*]] = call i32 @ilogbf(float 0x7FF0000000000000) #[[ATTR0]]
151*1336e3d0Sc8ef; CHECK-NEXT:    ret i32 [[R]]
152*1336e3d0Sc8ef;
153*1336e3d0Sc8ef  %r = call i32 @ilogbf(float 0x7FF0000000000000) readnone
154*1336e3d0Sc8ef  ret i32 %r
155*1336e3d0Sc8ef}
156*1336e3d0Sc8ef
157*1336e3d0Sc8efdefine i32 @ilogb_inf_readnone() {
158*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogb_inf_readnone() {
159*1336e3d0Sc8ef; CHECK-NEXT:    [[R:%.*]] = call i32 @ilogb(double 0x7FF0000000000000) #[[ATTR0]]
160*1336e3d0Sc8ef; CHECK-NEXT:    ret i32 [[R]]
161*1336e3d0Sc8ef;
162*1336e3d0Sc8ef  %r = call i32 @ilogb(double 0x7FF0000000000000) readnone
163*1336e3d0Sc8ef  ret i32 %r
164*1336e3d0Sc8ef}
165*1336e3d0Sc8ef
166*1336e3d0Sc8efdefine i32 @ilogbf_nan_readnone() {
167*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogbf_nan_readnone() {
168*1336e3d0Sc8ef; CHECK-NEXT:    [[R:%.*]] = call i32 @ilogbf(float 0x7FF8000000000000) #[[ATTR0]]
169*1336e3d0Sc8ef; CHECK-NEXT:    ret i32 [[R]]
170*1336e3d0Sc8ef;
171*1336e3d0Sc8ef  %r = call i32 @ilogbf(float 0x7FF8000000000000) readnone
172*1336e3d0Sc8ef  ret i32 %r
173*1336e3d0Sc8ef}
174*1336e3d0Sc8ef
175*1336e3d0Sc8efdefine i32 @ilogb_nan_readnone() {
176*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogb_nan_readnone() {
177*1336e3d0Sc8ef; CHECK-NEXT:    [[R:%.*]] = call i32 @ilogb(double 0x7FF8000000000000) #[[ATTR0]]
178*1336e3d0Sc8ef; CHECK-NEXT:    ret i32 [[R]]
179*1336e3d0Sc8ef;
180*1336e3d0Sc8ef  %r = call i32 @ilogb(double 0x7FF8000000000000) readnone
181*1336e3d0Sc8ef  ret i32 %r
182*1336e3d0Sc8ef}
183*1336e3d0Sc8ef
184*1336e3d0Sc8efdefine i32 @ilogbf_poison() {
185*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogbf_poison() {
186*1336e3d0Sc8ef; CHECK-NEXT:    [[R:%.*]] = call i32 @ilogbf(float poison)
187*1336e3d0Sc8ef; CHECK-NEXT:    ret i32 [[R]]
188*1336e3d0Sc8ef;
189*1336e3d0Sc8ef  %r = call i32 @ilogbf(float poison)
190*1336e3d0Sc8ef  ret i32 %r
191*1336e3d0Sc8ef}
192*1336e3d0Sc8ef
193*1336e3d0Sc8efdefine i32 @ilogb_poison() {
194*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogb_poison() {
195*1336e3d0Sc8ef; CHECK-NEXT:    [[R:%.*]] = call i32 @ilogb(double poison)
196*1336e3d0Sc8ef; CHECK-NEXT:    ret i32 [[R]]
197*1336e3d0Sc8ef;
198*1336e3d0Sc8ef  %r = call i32 @ilogb(double poison)
199*1336e3d0Sc8ef  ret i32 %r
200*1336e3d0Sc8ef}
201*1336e3d0Sc8ef
202*1336e3d0Sc8efdeclare i32 @ilogbf(float)
203*1336e3d0Sc8efdeclare i32 @ilogb(double)
204