xref: /llvm-project/llvm/test/Transforms/Attributor/nofpclass-exp.ll (revision d48d108bc66adb31185ee023e1eb0ccdda2065c1)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
2; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal -S < %s | FileCheck %s --check-prefixes=CHECK,TUNIT
3
4declare float @llvm.exp.f32(float)
5declare float @llvm.exp2.f32(float)
6declare float @llvm.exp10.f32(float)
7
8define float @ret_exp(float %arg0) {
9; CHECK-LABEL: define nofpclass(ninf nzero nsub nnorm) float @ret_exp
10; CHECK-SAME: (float [[ARG0:%.*]]) #[[ATTR1:[0-9]+]] {
11; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(ninf nzero nsub nnorm) float @llvm.exp.f32(float [[ARG0]]) #[[ATTR2:[0-9]+]]
12; CHECK-NEXT:    ret float [[CALL]]
13;
14  %call = call float @llvm.exp.f32(float %arg0)
15  ret float %call
16}
17
18define float @ret_exp_noinf(float nofpclass(inf) %arg0) {
19; CHECK-LABEL: define nofpclass(ninf nzero nsub nnorm) float @ret_exp_noinf
20; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]]) #[[ATTR1]] {
21; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(ninf nzero nsub nnorm) float @llvm.exp.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR2]]
22; CHECK-NEXT:    ret float [[CALL]]
23;
24  %call = call float @llvm.exp.f32(float %arg0)
25  ret float %call
26}
27
28define float @ret_exp_nopinf(float nofpclass(pinf) %arg0) {
29; CHECK-LABEL: define nofpclass(ninf nzero nsub nnorm) float @ret_exp_nopinf
30; CHECK-SAME: (float nofpclass(pinf) [[ARG0:%.*]]) #[[ATTR1]] {
31; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(ninf nzero nsub nnorm) float @llvm.exp.f32(float nofpclass(pinf) [[ARG0]]) #[[ATTR2]]
32; CHECK-NEXT:    ret float [[CALL]]
33;
34  %call = call float @llvm.exp.f32(float %arg0)
35  ret float %call
36}
37
38define float @ret_exp_noninf(float nofpclass(ninf) %arg0) {
39; CHECK-LABEL: define nofpclass(ninf nzero nsub nnorm) float @ret_exp_noninf
40; CHECK-SAME: (float nofpclass(ninf) [[ARG0:%.*]]) #[[ATTR1]] {
41; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(ninf nzero nsub nnorm) float @llvm.exp.f32(float nofpclass(ninf) [[ARG0]]) #[[ATTR2]]
42; CHECK-NEXT:    ret float [[CALL]]
43;
44  %call = call float @llvm.exp.f32(float %arg0)
45  ret float %call
46}
47
48define float @ret_exp_nonan(float nofpclass(nan) %arg0) {
49; CHECK-LABEL: define nofpclass(nan ninf nzero nsub nnorm) float @ret_exp_nonan
50; CHECK-SAME: (float nofpclass(nan) [[ARG0:%.*]]) #[[ATTR1]] {
51; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan ninf nzero nsub nnorm) float @llvm.exp.f32(float nofpclass(nan) [[ARG0]]) #[[ATTR2]]
52; CHECK-NEXT:    ret float [[CALL]]
53;
54  %call = call float @llvm.exp.f32(float %arg0)
55  ret float %call
56}
57
58define float @ret_exp_nonan_noinf(float nofpclass(nan inf) %arg0) {
59; CHECK-LABEL: define nofpclass(nan ninf nzero nsub nnorm) float @ret_exp_nonan_noinf
60; CHECK-SAME: (float nofpclass(nan inf) [[ARG0:%.*]]) #[[ATTR1]] {
61; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan ninf nzero nsub nnorm) float @llvm.exp.f32(float nofpclass(nan inf) [[ARG0]]) #[[ATTR2]]
62; CHECK-NEXT:    ret float [[CALL]]
63;
64  %call = call float @llvm.exp.f32(float %arg0)
65  ret float %call
66}
67
68define float @ret_exp_nonan_noinf_nozero(float nofpclass(nan inf zero) %arg0) {
69; CHECK-LABEL: define nofpclass(nan ninf nzero nsub nnorm) float @ret_exp_nonan_noinf_nozero
70; CHECK-SAME: (float nofpclass(nan inf zero) [[ARG0:%.*]]) #[[ATTR1]] {
71; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan ninf nzero nsub nnorm) float @llvm.exp.f32(float nofpclass(nan inf zero) [[ARG0]]) #[[ATTR2]]
72; CHECK-NEXT:    ret float [[CALL]]
73;
74  %call = call float @llvm.exp.f32(float %arg0)
75  ret float %call
76}
77
78define float @ret_exp_noinf_nozero(float nofpclass(inf zero) %arg0) {
79; CHECK-LABEL: define nofpclass(ninf nzero nsub nnorm) float @ret_exp_noinf_nozero
80; CHECK-SAME: (float nofpclass(inf zero) [[ARG0:%.*]]) #[[ATTR1]] {
81; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(ninf nzero nsub nnorm) float @llvm.exp.f32(float nofpclass(inf zero) [[ARG0]]) #[[ATTR2]]
82; CHECK-NEXT:    ret float [[CALL]]
83;
84  %call = call float @llvm.exp.f32(float %arg0)
85  ret float %call
86}
87
88define float @ret_exp_noinf_nonegzero(float nofpclass(inf nzero) %arg0) {
89; CHECK-LABEL: define nofpclass(ninf nzero nsub nnorm) float @ret_exp_noinf_nonegzero
90; CHECK-SAME: (float nofpclass(inf nzero) [[ARG0:%.*]]) #[[ATTR1]] {
91; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(ninf nzero nsub nnorm) float @llvm.exp.f32(float nofpclass(inf nzero) [[ARG0]]) #[[ATTR2]]
92; CHECK-NEXT:    ret float [[CALL]]
93;
94  %call = call float @llvm.exp.f32(float %arg0)
95  ret float %call
96}
97
98define float @ret_exp_positive_source(i32 %arg) {
99; CHECK-LABEL: define nofpclass(nan ninf nzero nsub nnorm) float @ret_exp_positive_source
100; CHECK-SAME: (i32 [[ARG:%.*]]) #[[ATTR1]] {
101; CHECK-NEXT:    [[UITOFP:%.*]] = uitofp i32 [[ARG]] to float
102; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan ninf nzero nsub nnorm) float @llvm.exp.f32(float [[UITOFP]]) #[[ATTR2]]
103; CHECK-NEXT:    ret float [[CALL]]
104;
105  %uitofp = uitofp i32 %arg to float
106  %call = call float @llvm.exp.f32(float %uitofp)
107  ret float %call
108}
109
110; Could produce a nan because we don't know if the multiply is negative.
111define float @ret_exp_unknown_sign(float nofpclass(nan) %arg0, float nofpclass(nan) %arg1) {
112; CHECK-LABEL: define nofpclass(nan ninf nzero nsub nnorm) float @ret_exp_unknown_sign
113; CHECK-SAME: (float nofpclass(nan) [[ARG0:%.*]], float nofpclass(nan) [[ARG1:%.*]]) #[[ATTR1]] {
114; CHECK-NEXT:    [[UNKNOWN_SIGN_NOT_NAN:%.*]] = fmul nnan float [[ARG0]], [[ARG1]]
115; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan ninf nzero nsub nnorm) float @llvm.exp.f32(float [[UNKNOWN_SIGN_NOT_NAN]]) #[[ATTR2]]
116; CHECK-NEXT:    ret float [[CALL]]
117;
118  %unknown.sign.not.nan = fmul nnan float %arg0, %arg1
119  %call = call float @llvm.exp.f32(float %unknown.sign.not.nan)
120  ret float %call
121}
122
123define float @ret_exp2(float %arg0) {
124; CHECK-LABEL: define nofpclass(ninf nzero nsub nnorm) float @ret_exp2
125; CHECK-SAME: (float [[ARG0:%.*]]) #[[ATTR1]] {
126; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(ninf nzero nsub nnorm) float @llvm.exp2.f32(float [[ARG0]]) #[[ATTR2]]
127; CHECK-NEXT:    ret float [[CALL]]
128;
129  %call = call float @llvm.exp2.f32(float %arg0)
130  ret float %call
131}
132
133define float @ret_exp2_noinf(float nofpclass(inf) %arg0) {
134; CHECK-LABEL: define nofpclass(ninf nzero nsub nnorm) float @ret_exp2_noinf
135; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]]) #[[ATTR1]] {
136; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(ninf nzero nsub nnorm) float @llvm.exp2.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR2]]
137; CHECK-NEXT:    ret float [[CALL]]
138;
139  %call = call float @llvm.exp2.f32(float %arg0)
140  ret float %call
141}
142
143define float @ret_exp2_nopinf(float nofpclass(pinf) %arg0) {
144; CHECK-LABEL: define nofpclass(ninf nzero nsub nnorm) float @ret_exp2_nopinf
145; CHECK-SAME: (float nofpclass(pinf) [[ARG0:%.*]]) #[[ATTR1]] {
146; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(ninf nzero nsub nnorm) float @llvm.exp2.f32(float nofpclass(pinf) [[ARG0]]) #[[ATTR2]]
147; CHECK-NEXT:    ret float [[CALL]]
148;
149  %call = call float @llvm.exp2.f32(float %arg0)
150  ret float %call
151}
152
153define float @ret_exp2_noninf(float nofpclass(ninf) %arg0) {
154; CHECK-LABEL: define nofpclass(ninf nzero nsub nnorm) float @ret_exp2_noninf
155; CHECK-SAME: (float nofpclass(ninf) [[ARG0:%.*]]) #[[ATTR1]] {
156; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(ninf nzero nsub nnorm) float @llvm.exp2.f32(float nofpclass(ninf) [[ARG0]]) #[[ATTR2]]
157; CHECK-NEXT:    ret float [[CALL]]
158;
159  %call = call float @llvm.exp2.f32(float %arg0)
160  ret float %call
161}
162
163define float @ret_exp2_nonan(float nofpclass(nan) %arg0) {
164; CHECK-LABEL: define nofpclass(nan ninf nzero nsub nnorm) float @ret_exp2_nonan
165; CHECK-SAME: (float nofpclass(nan) [[ARG0:%.*]]) #[[ATTR1]] {
166; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan ninf nzero nsub nnorm) float @llvm.exp2.f32(float nofpclass(nan) [[ARG0]]) #[[ATTR2]]
167; CHECK-NEXT:    ret float [[CALL]]
168;
169  %call = call float @llvm.exp2.f32(float %arg0)
170  ret float %call
171}
172
173define float @ret_exp2_nonan_noinf(float nofpclass(nan inf) %arg0) {
174; CHECK-LABEL: define nofpclass(nan ninf nzero nsub nnorm) float @ret_exp2_nonan_noinf
175; CHECK-SAME: (float nofpclass(nan inf) [[ARG0:%.*]]) #[[ATTR1]] {
176; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan ninf nzero nsub nnorm) float @llvm.exp2.f32(float nofpclass(nan inf) [[ARG0]]) #[[ATTR2]]
177; CHECK-NEXT:    ret float [[CALL]]
178;
179  %call = call float @llvm.exp2.f32(float %arg0)
180  ret float %call
181}
182
183define float @ret_exp2_nonan_noinf_nozero(float nofpclass(nan inf zero) %arg0) {
184; CHECK-LABEL: define nofpclass(nan ninf nzero nsub nnorm) float @ret_exp2_nonan_noinf_nozero
185; CHECK-SAME: (float nofpclass(nan inf zero) [[ARG0:%.*]]) #[[ATTR1]] {
186; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan ninf nzero nsub nnorm) float @llvm.exp2.f32(float nofpclass(nan inf zero) [[ARG0]]) #[[ATTR2]]
187; CHECK-NEXT:    ret float [[CALL]]
188;
189  %call = call float @llvm.exp2.f32(float %arg0)
190  ret float %call
191}
192
193define float @ret_exp2_noinf_nozero(float nofpclass(inf zero) %arg0) {
194; CHECK-LABEL: define nofpclass(ninf nzero nsub nnorm) float @ret_exp2_noinf_nozero
195; CHECK-SAME: (float nofpclass(inf zero) [[ARG0:%.*]]) #[[ATTR1]] {
196; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(ninf nzero nsub nnorm) float @llvm.exp2.f32(float nofpclass(inf zero) [[ARG0]]) #[[ATTR2]]
197; CHECK-NEXT:    ret float [[CALL]]
198;
199  %call = call float @llvm.exp2.f32(float %arg0)
200  ret float %call
201}
202
203define float @ret_exp2_noinf_nonegzero(float nofpclass(inf nzero) %arg0) {
204; CHECK-LABEL: define nofpclass(ninf nzero nsub nnorm) float @ret_exp2_noinf_nonegzero
205; CHECK-SAME: (float nofpclass(inf nzero) [[ARG0:%.*]]) #[[ATTR1]] {
206; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(ninf nzero nsub nnorm) float @llvm.exp2.f32(float nofpclass(inf nzero) [[ARG0]]) #[[ATTR2]]
207; CHECK-NEXT:    ret float [[CALL]]
208;
209  %call = call float @llvm.exp2.f32(float %arg0)
210  ret float %call
211}
212
213define float @ret_exp2_positive_source(i32 %arg) {
214; CHECK-LABEL: define nofpclass(nan ninf nzero nsub nnorm) float @ret_exp2_positive_source
215; CHECK-SAME: (i32 [[ARG:%.*]]) #[[ATTR1]] {
216; CHECK-NEXT:    [[UITOFP:%.*]] = uitofp i32 [[ARG]] to float
217; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan ninf nzero nsub nnorm) float @llvm.exp2.f32(float [[UITOFP]]) #[[ATTR2]]
218; CHECK-NEXT:    ret float [[CALL]]
219;
220  %uitofp = uitofp i32 %arg to float
221  %call = call float @llvm.exp2.f32(float %uitofp)
222  ret float %call
223}
224
225; Could produce a nan because we don't know if the multiply is negative.
226define float @ret_exp2_unknown_sign(float nofpclass(nan) %arg0, float nofpclass(nan) %arg1) {
227; CHECK-LABEL: define nofpclass(nan ninf nzero nsub nnorm) float @ret_exp2_unknown_sign
228; CHECK-SAME: (float nofpclass(nan) [[ARG0:%.*]], float nofpclass(nan) [[ARG1:%.*]]) #[[ATTR1]] {
229; CHECK-NEXT:    [[UNKNOWN_SIGN_NOT_NAN:%.*]] = fmul nnan float [[ARG0]], [[ARG1]]
230; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan ninf nzero nsub nnorm) float @llvm.exp2.f32(float [[UNKNOWN_SIGN_NOT_NAN]]) #[[ATTR2]]
231; CHECK-NEXT:    ret float [[CALL]]
232;
233  %unknown.sign.not.nan = fmul nnan float %arg0, %arg1
234  %call = call float @llvm.exp2.f32(float %unknown.sign.not.nan)
235  ret float %call
236}
237
238define float @ret_exp10(float %arg0) {
239; CHECK-LABEL: define nofpclass(ninf nzero nsub nnorm) float @ret_exp10
240; CHECK-SAME: (float [[ARG0:%.*]]) #[[ATTR1]] {
241; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(ninf nzero nsub nnorm) float @llvm.exp10.f32(float [[ARG0]]) #[[ATTR2]]
242; CHECK-NEXT:    ret float [[CALL]]
243;
244  %call = call float @llvm.exp10.f32(float %arg0)
245  ret float %call
246}
247
248define float @ret_exp10_noinf(float nofpclass(inf) %arg0) {
249; CHECK-LABEL: define nofpclass(ninf nzero nsub nnorm) float @ret_exp10_noinf
250; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]]) #[[ATTR1]] {
251; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(ninf nzero nsub nnorm) float @llvm.exp10.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR2]]
252; CHECK-NEXT:    ret float [[CALL]]
253;
254  %call = call float @llvm.exp10.f32(float %arg0)
255  ret float %call
256}
257
258define float @ret_exp10_nopinf(float nofpclass(pinf) %arg0) {
259; CHECK-LABEL: define nofpclass(ninf nzero nsub nnorm) float @ret_exp10_nopinf
260; CHECK-SAME: (float nofpclass(pinf) [[ARG0:%.*]]) #[[ATTR1]] {
261; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(ninf nzero nsub nnorm) float @llvm.exp10.f32(float nofpclass(pinf) [[ARG0]]) #[[ATTR2]]
262; CHECK-NEXT:    ret float [[CALL]]
263;
264  %call = call float @llvm.exp10.f32(float %arg0)
265  ret float %call
266}
267
268define float @ret_exp10_noninf(float nofpclass(ninf) %arg0) {
269; CHECK-LABEL: define nofpclass(ninf nzero nsub nnorm) float @ret_exp10_noninf
270; CHECK-SAME: (float nofpclass(ninf) [[ARG0:%.*]]) #[[ATTR1]] {
271; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(ninf nzero nsub nnorm) float @llvm.exp10.f32(float nofpclass(ninf) [[ARG0]]) #[[ATTR2]]
272; CHECK-NEXT:    ret float [[CALL]]
273;
274  %call = call float @llvm.exp10.f32(float %arg0)
275  ret float %call
276}
277
278define float @ret_exp10_nonan(float nofpclass(nan) %arg0) {
279; CHECK-LABEL: define nofpclass(nan ninf nzero nsub nnorm) float @ret_exp10_nonan
280; CHECK-SAME: (float nofpclass(nan) [[ARG0:%.*]]) #[[ATTR1]] {
281; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan ninf nzero nsub nnorm) float @llvm.exp10.f32(float nofpclass(nan) [[ARG0]]) #[[ATTR2]]
282; CHECK-NEXT:    ret float [[CALL]]
283;
284  %call = call float @llvm.exp10.f32(float %arg0)
285  ret float %call
286}
287
288define float @ret_exp10_nonan_noinf(float nofpclass(nan inf) %arg0) {
289; CHECK-LABEL: define nofpclass(nan ninf nzero nsub nnorm) float @ret_exp10_nonan_noinf
290; CHECK-SAME: (float nofpclass(nan inf) [[ARG0:%.*]]) #[[ATTR1]] {
291; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan ninf nzero nsub nnorm) float @llvm.exp10.f32(float nofpclass(nan inf) [[ARG0]]) #[[ATTR2]]
292; CHECK-NEXT:    ret float [[CALL]]
293;
294  %call = call float @llvm.exp10.f32(float %arg0)
295  ret float %call
296}
297
298define float @ret_exp10_nonan_noinf_nozero(float nofpclass(nan inf zero) %arg0) {
299; CHECK-LABEL: define nofpclass(nan ninf nzero nsub nnorm) float @ret_exp10_nonan_noinf_nozero
300; CHECK-SAME: (float nofpclass(nan inf zero) [[ARG0:%.*]]) #[[ATTR1]] {
301; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan ninf nzero nsub nnorm) float @llvm.exp10.f32(float nofpclass(nan inf zero) [[ARG0]]) #[[ATTR2]]
302; CHECK-NEXT:    ret float [[CALL]]
303;
304  %call = call float @llvm.exp10.f32(float %arg0)
305  ret float %call
306}
307
308define float @ret_exp10_noinf_nozero(float nofpclass(inf zero) %arg0) {
309; CHECK-LABEL: define nofpclass(ninf nzero nsub nnorm) float @ret_exp10_noinf_nozero
310; CHECK-SAME: (float nofpclass(inf zero) [[ARG0:%.*]]) #[[ATTR1]] {
311; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(ninf nzero nsub nnorm) float @llvm.exp10.f32(float nofpclass(inf zero) [[ARG0]]) #[[ATTR2]]
312; CHECK-NEXT:    ret float [[CALL]]
313;
314  %call = call float @llvm.exp10.f32(float %arg0)
315  ret float %call
316}
317
318define float @ret_exp10_noinf_nonegzero(float nofpclass(inf nzero) %arg0) {
319; CHECK-LABEL: define nofpclass(ninf nzero nsub nnorm) float @ret_exp10_noinf_nonegzero
320; CHECK-SAME: (float nofpclass(inf nzero) [[ARG0:%.*]]) #[[ATTR1]] {
321; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(ninf nzero nsub nnorm) float @llvm.exp10.f32(float nofpclass(inf nzero) [[ARG0]]) #[[ATTR2]]
322; CHECK-NEXT:    ret float [[CALL]]
323;
324  %call = call float @llvm.exp10.f32(float %arg0)
325  ret float %call
326}
327
328define float @ret_exp10_positive_source(i32 %arg) {
329; CHECK-LABEL: define nofpclass(nan ninf nzero nsub nnorm) float @ret_exp10_positive_source
330; CHECK-SAME: (i32 [[ARG:%.*]]) #[[ATTR1]] {
331; CHECK-NEXT:    [[UITOFP:%.*]] = uitofp i32 [[ARG]] to float
332; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan ninf nzero nsub nnorm) float @llvm.exp10.f32(float [[UITOFP]]) #[[ATTR2]]
333; CHECK-NEXT:    ret float [[CALL]]
334;
335  %uitofp = uitofp i32 %arg to float
336  %call = call float @llvm.exp10.f32(float %uitofp)
337  ret float %call
338}
339
340; Could produce a nan because we don't know if the multiply is negative.
341define float @ret_exp10_unknown_sign(float nofpclass(nan) %arg0, float nofpclass(nan) %arg1) {
342; CHECK-LABEL: define nofpclass(nan ninf nzero nsub nnorm) float @ret_exp10_unknown_sign
343; CHECK-SAME: (float nofpclass(nan) [[ARG0:%.*]], float nofpclass(nan) [[ARG1:%.*]]) #[[ATTR1]] {
344; CHECK-NEXT:    [[UNKNOWN_SIGN_NOT_NAN:%.*]] = fmul nnan float [[ARG0]], [[ARG1]]
345; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan ninf nzero nsub nnorm) float @llvm.exp10.f32(float [[UNKNOWN_SIGN_NOT_NAN]]) #[[ATTR2]]
346; CHECK-NEXT:    ret float [[CALL]]
347;
348  %unknown.sign.not.nan = fmul nnan float %arg0, %arg1
349  %call = call float @llvm.exp10.f32(float %unknown.sign.not.nan)
350  ret float %call
351}
352;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
353; TUNIT: {{.*}}
354