xref: /llvm-project/llvm/test/Transforms/Attributor/nofpclass-round.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
3; RUN: opt -aa-pipeline=basic-aa -passes=attributor-light -attributor-manifest-internal -S < %s | FileCheck %s --check-prefixes=LIGHT
4
5declare float @llvm.round.f32(float)
6declare ppc_fp128 @llvm.round.ppcf128(ppc_fp128)
7
8define float @ret_round(float %arg0) {
9; CHECK-LABEL: define nofpclass(sub) float @ret_round
10; CHECK-SAME: (float [[ARG0:%.*]]) #[[ATTR1:[0-9]+]] {
11; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float [[ARG0]]) #[[ATTR2:[0-9]+]]
12; CHECK-NEXT:    ret float [[CALL]]
13;
14; LIGHT-LABEL: define float @ret_round
15; LIGHT-SAME: (float [[ARG0:%.*]]) #[[ATTR1:[0-9]+]] {
16; LIGHT-NEXT:    [[CALL:%.*]] = call float @llvm.round.f32(float [[ARG0]]) #[[ATTR2:[0-9]+]]
17; LIGHT-NEXT:    ret float [[CALL]]
18;
19  %call = call float @llvm.round.f32(float %arg0)
20  ret float %call
21}
22
23define float @ret_round_noinf(float nofpclass(inf) %arg0) {
24; CHECK-LABEL: define nofpclass(inf sub) float @ret_round_noinf
25; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]]) #[[ATTR1]] {
26; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(inf sub) float @llvm.round.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR2]]
27; CHECK-NEXT:    ret float [[CALL]]
28;
29; LIGHT-LABEL: define float @ret_round_noinf
30; LIGHT-SAME: (float nofpclass(inf) [[ARG0:%.*]]) #[[ATTR1]] {
31; LIGHT-NEXT:    [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR2]]
32; LIGHT-NEXT:    ret float [[CALL]]
33;
34  %call = call float @llvm.round.f32(float %arg0)
35  ret float %call
36}
37
38define float @ret_round_nopinf(float nofpclass(pinf) %arg0) {
39; CHECK-LABEL: define nofpclass(pinf sub) float @ret_round_nopinf
40; CHECK-SAME: (float nofpclass(pinf) [[ARG0:%.*]]) #[[ATTR1]] {
41; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(pinf sub) float @llvm.round.f32(float nofpclass(pinf) [[ARG0]]) #[[ATTR2]]
42; CHECK-NEXT:    ret float [[CALL]]
43;
44; LIGHT-LABEL: define float @ret_round_nopinf
45; LIGHT-SAME: (float nofpclass(pinf) [[ARG0:%.*]]) #[[ATTR1]] {
46; LIGHT-NEXT:    [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(pinf) [[ARG0]]) #[[ATTR2]]
47; LIGHT-NEXT:    ret float [[CALL]]
48;
49  %call = call float @llvm.round.f32(float %arg0)
50  ret float %call
51}
52
53define float @ret_round_noninf(float nofpclass(ninf) %arg0) {
54; CHECK-LABEL: define nofpclass(ninf sub) float @ret_round_noninf
55; CHECK-SAME: (float nofpclass(ninf) [[ARG0:%.*]]) #[[ATTR1]] {
56; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(ninf sub) float @llvm.round.f32(float nofpclass(ninf) [[ARG0]]) #[[ATTR2]]
57; CHECK-NEXT:    ret float [[CALL]]
58;
59; LIGHT-LABEL: define float @ret_round_noninf
60; LIGHT-SAME: (float nofpclass(ninf) [[ARG0:%.*]]) #[[ATTR1]] {
61; LIGHT-NEXT:    [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(ninf) [[ARG0]]) #[[ATTR2]]
62; LIGHT-NEXT:    ret float [[CALL]]
63;
64  %call = call float @llvm.round.f32(float %arg0)
65  ret float %call
66}
67
68define float @ret_round_nonan(float nofpclass(nan) %arg0) {
69; CHECK-LABEL: define nofpclass(nan sub) float @ret_round_nonan
70; CHECK-SAME: (float nofpclass(nan) [[ARG0:%.*]]) #[[ATTR1]] {
71; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan sub) float @llvm.round.f32(float nofpclass(nan) [[ARG0]]) #[[ATTR2]]
72; CHECK-NEXT:    ret float [[CALL]]
73;
74; LIGHT-LABEL: define float @ret_round_nonan
75; LIGHT-SAME: (float nofpclass(nan) [[ARG0:%.*]]) #[[ATTR1]] {
76; LIGHT-NEXT:    [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(nan) [[ARG0]]) #[[ATTR2]]
77; LIGHT-NEXT:    ret float [[CALL]]
78;
79  %call = call float @llvm.round.f32(float %arg0)
80  ret float %call
81}
82
83define float @ret_round_noqnan(float nofpclass(qnan) %arg0) {
84; CHECK-LABEL: define nofpclass(sub) float @ret_round_noqnan
85; CHECK-SAME: (float nofpclass(qnan) [[ARG0:%.*]]) #[[ATTR1]] {
86; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float nofpclass(qnan) [[ARG0]]) #[[ATTR2]]
87; CHECK-NEXT:    ret float [[CALL]]
88;
89; LIGHT-LABEL: define float @ret_round_noqnan
90; LIGHT-SAME: (float nofpclass(qnan) [[ARG0:%.*]]) #[[ATTR1]] {
91; LIGHT-NEXT:    [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(qnan) [[ARG0]]) #[[ATTR2]]
92; LIGHT-NEXT:    ret float [[CALL]]
93;
94  %call = call float @llvm.round.f32(float %arg0)
95  ret float %call
96}
97
98define float @ret_round_nosnan(float nofpclass(snan) %arg0) {
99; CHECK-LABEL: define nofpclass(snan sub) float @ret_round_nosnan
100; CHECK-SAME: (float nofpclass(snan) [[ARG0:%.*]]) #[[ATTR1]] {
101; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(snan sub) float @llvm.round.f32(float nofpclass(snan) [[ARG0]]) #[[ATTR2]]
102; CHECK-NEXT:    ret float [[CALL]]
103;
104; LIGHT-LABEL: define float @ret_round_nosnan
105; LIGHT-SAME: (float nofpclass(snan) [[ARG0:%.*]]) #[[ATTR1]] {
106; LIGHT-NEXT:    [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(snan) [[ARG0]]) #[[ATTR2]]
107; LIGHT-NEXT:    ret float [[CALL]]
108;
109  %call = call float @llvm.round.f32(float %arg0)
110  ret float %call
111}
112
113define float @ret_round_nozero(float nofpclass(zero) %arg0) {
114; CHECK-LABEL: define nofpclass(sub) float @ret_round_nozero
115; CHECK-SAME: (float nofpclass(zero) [[ARG0:%.*]]) #[[ATTR1]] {
116; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float nofpclass(zero) [[ARG0]]) #[[ATTR2]]
117; CHECK-NEXT:    ret float [[CALL]]
118;
119; LIGHT-LABEL: define float @ret_round_nozero
120; LIGHT-SAME: (float nofpclass(zero) [[ARG0:%.*]]) #[[ATTR1]] {
121; LIGHT-NEXT:    [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(zero) [[ARG0]]) #[[ATTR2]]
122; LIGHT-NEXT:    ret float [[CALL]]
123;
124  %call = call float @llvm.round.f32(float %arg0)
125  ret float %call
126}
127
128define float @ret_round_nopzero(float nofpclass(pzero) %arg0) {
129; CHECK-LABEL: define nofpclass(sub) float @ret_round_nopzero
130; CHECK-SAME: (float nofpclass(pzero) [[ARG0:%.*]]) #[[ATTR1]] {
131; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float nofpclass(pzero) [[ARG0]]) #[[ATTR2]]
132; CHECK-NEXT:    ret float [[CALL]]
133;
134; LIGHT-LABEL: define float @ret_round_nopzero
135; LIGHT-SAME: (float nofpclass(pzero) [[ARG0:%.*]]) #[[ATTR1]] {
136; LIGHT-NEXT:    [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(pzero) [[ARG0]]) #[[ATTR2]]
137; LIGHT-NEXT:    ret float [[CALL]]
138;
139  %call = call float @llvm.round.f32(float %arg0)
140  ret float %call
141}
142
143define float @ret_round_nonzero(float nofpclass(nzero) %arg0) {
144; CHECK-LABEL: define nofpclass(sub) float @ret_round_nonzero
145; CHECK-SAME: (float nofpclass(nzero) [[ARG0:%.*]]) #[[ATTR1]] {
146; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float nofpclass(nzero) [[ARG0]]) #[[ATTR2]]
147; CHECK-NEXT:    ret float [[CALL]]
148;
149; LIGHT-LABEL: define float @ret_round_nonzero
150; LIGHT-SAME: (float nofpclass(nzero) [[ARG0:%.*]]) #[[ATTR1]] {
151; LIGHT-NEXT:    [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(nzero) [[ARG0]]) #[[ATTR2]]
152; LIGHT-NEXT:    ret float [[CALL]]
153;
154  %call = call float @llvm.round.f32(float %arg0)
155  ret float %call
156}
157
158define float @ret_round_nonorm(float nofpclass(norm) %arg0) {
159; CHECK-LABEL: define nofpclass(sub) float @ret_round_nonorm
160; CHECK-SAME: (float nofpclass(norm) [[ARG0:%.*]]) #[[ATTR1]] {
161; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float nofpclass(norm) [[ARG0]]) #[[ATTR2]]
162; CHECK-NEXT:    ret float [[CALL]]
163;
164; LIGHT-LABEL: define float @ret_round_nonorm
165; LIGHT-SAME: (float nofpclass(norm) [[ARG0:%.*]]) #[[ATTR1]] {
166; LIGHT-NEXT:    [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(norm) [[ARG0]]) #[[ATTR2]]
167; LIGHT-NEXT:    ret float [[CALL]]
168;
169  %call = call float @llvm.round.f32(float %arg0)
170  ret float %call
171}
172
173define float @ret_round_nonnorm(float nofpclass(nnorm) %arg0) {
174; CHECK-LABEL: define nofpclass(sub) float @ret_round_nonnorm
175; CHECK-SAME: (float nofpclass(nnorm) [[ARG0:%.*]]) #[[ATTR1]] {
176; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float nofpclass(nnorm) [[ARG0]]) #[[ATTR2]]
177; CHECK-NEXT:    ret float [[CALL]]
178;
179; LIGHT-LABEL: define float @ret_round_nonnorm
180; LIGHT-SAME: (float nofpclass(nnorm) [[ARG0:%.*]]) #[[ATTR1]] {
181; LIGHT-NEXT:    [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(nnorm) [[ARG0]]) #[[ATTR2]]
182; LIGHT-NEXT:    ret float [[CALL]]
183;
184  %call = call float @llvm.round.f32(float %arg0)
185  ret float %call
186}
187
188define float @ret_round_nopnorm(float nofpclass(pnorm) %arg0) {
189; CHECK-LABEL: define nofpclass(sub) float @ret_round_nopnorm
190; CHECK-SAME: (float nofpclass(pnorm) [[ARG0:%.*]]) #[[ATTR1]] {
191; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float nofpclass(pnorm) [[ARG0]]) #[[ATTR2]]
192; CHECK-NEXT:    ret float [[CALL]]
193;
194; LIGHT-LABEL: define float @ret_round_nopnorm
195; LIGHT-SAME: (float nofpclass(pnorm) [[ARG0:%.*]]) #[[ATTR1]] {
196; LIGHT-NEXT:    [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(pnorm) [[ARG0]]) #[[ATTR2]]
197; LIGHT-NEXT:    ret float [[CALL]]
198;
199  %call = call float @llvm.round.f32(float %arg0)
200  ret float %call
201}
202
203define float @ret_round_nonsub(float nofpclass(nsub) %arg0) {
204; CHECK-LABEL: define nofpclass(sub) float @ret_round_nonsub
205; CHECK-SAME: (float nofpclass(nsub) [[ARG0:%.*]]) #[[ATTR1]] {
206; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float nofpclass(nsub) [[ARG0]]) #[[ATTR2]]
207; CHECK-NEXT:    ret float [[CALL]]
208;
209; LIGHT-LABEL: define float @ret_round_nonsub
210; LIGHT-SAME: (float nofpclass(nsub) [[ARG0:%.*]]) #[[ATTR1]] {
211; LIGHT-NEXT:    [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(nsub) [[ARG0]]) #[[ATTR2]]
212; LIGHT-NEXT:    ret float [[CALL]]
213;
214  %call = call float @llvm.round.f32(float %arg0)
215  ret float %call
216}
217
218define float @ret_round_nopsub(float nofpclass(psub) %arg0) {
219; CHECK-LABEL: define nofpclass(sub) float @ret_round_nopsub
220; CHECK-SAME: (float nofpclass(psub) [[ARG0:%.*]]) #[[ATTR1]] {
221; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float nofpclass(psub) [[ARG0]]) #[[ATTR2]]
222; CHECK-NEXT:    ret float [[CALL]]
223;
224; LIGHT-LABEL: define float @ret_round_nopsub
225; LIGHT-SAME: (float nofpclass(psub) [[ARG0:%.*]]) #[[ATTR1]] {
226; LIGHT-NEXT:    [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(psub) [[ARG0]]) #[[ATTR2]]
227; LIGHT-NEXT:    ret float [[CALL]]
228;
229  %call = call float @llvm.round.f32(float %arg0)
230  ret float %call
231}
232
233define float @ret_round_nonorm_nosub(float nofpclass(norm sub) %arg0) {
234; CHECK-LABEL: define nofpclass(sub) float @ret_round_nonorm_nosub
235; CHECK-SAME: (float nofpclass(sub norm) [[ARG0:%.*]]) #[[ATTR1]] {
236; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float nofpclass(sub norm) [[ARG0]]) #[[ATTR2]]
237; CHECK-NEXT:    ret float [[CALL]]
238;
239; LIGHT-LABEL: define float @ret_round_nonorm_nosub
240; LIGHT-SAME: (float nofpclass(sub norm) [[ARG0:%.*]]) #[[ATTR1]] {
241; LIGHT-NEXT:    [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(sub norm) [[ARG0]]) #[[ATTR2]]
242; LIGHT-NEXT:    ret float [[CALL]]
243;
244  %call = call float @llvm.round.f32(float %arg0)
245  ret float %call
246}
247
248define float @ret_round_nopnorm_nopsub(float nofpclass(pnorm psub) %arg0) {
249; CHECK-LABEL: define nofpclass(sub) float @ret_round_nopnorm_nopsub
250; CHECK-SAME: (float nofpclass(psub pnorm) [[ARG0:%.*]]) #[[ATTR1]] {
251; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float nofpclass(psub pnorm) [[ARG0]]) #[[ATTR2]]
252; CHECK-NEXT:    ret float [[CALL]]
253;
254; LIGHT-LABEL: define float @ret_round_nopnorm_nopsub
255; LIGHT-SAME: (float nofpclass(psub pnorm) [[ARG0:%.*]]) #[[ATTR1]] {
256; LIGHT-NEXT:    [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(psub pnorm) [[ARG0]]) #[[ATTR2]]
257; LIGHT-NEXT:    ret float [[CALL]]
258;
259  %call = call float @llvm.round.f32(float %arg0)
260  ret float %call
261}
262
263define float @ret_round_nonnorm_nonsub(float nofpclass(nnorm nsub) %arg0) {
264; CHECK-LABEL: define nofpclass(sub) float @ret_round_nonnorm_nonsub
265; CHECK-SAME: (float nofpclass(nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] {
266; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float nofpclass(nsub nnorm) [[ARG0]]) #[[ATTR2]]
267; CHECK-NEXT:    ret float [[CALL]]
268;
269; LIGHT-LABEL: define float @ret_round_nonnorm_nonsub
270; LIGHT-SAME: (float nofpclass(nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] {
271; LIGHT-NEXT:    [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(nsub nnorm) [[ARG0]]) #[[ATTR2]]
272; LIGHT-NEXT:    ret float [[CALL]]
273;
274  %call = call float @llvm.round.f32(float %arg0)
275  ret float %call
276}
277
278define float @ret_round_nopnorm_nonsub(float nofpclass(pnorm nsub) %arg0) {
279; CHECK-LABEL: define nofpclass(sub) float @ret_round_nopnorm_nonsub
280; CHECK-SAME: (float nofpclass(nsub pnorm) [[ARG0:%.*]]) #[[ATTR1]] {
281; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float nofpclass(nsub pnorm) [[ARG0]]) #[[ATTR2]]
282; CHECK-NEXT:    ret float [[CALL]]
283;
284; LIGHT-LABEL: define float @ret_round_nopnorm_nonsub
285; LIGHT-SAME: (float nofpclass(nsub pnorm) [[ARG0:%.*]]) #[[ATTR1]] {
286; LIGHT-NEXT:    [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(nsub pnorm) [[ARG0]]) #[[ATTR2]]
287; LIGHT-NEXT:    ret float [[CALL]]
288;
289  %call = call float @llvm.round.f32(float %arg0)
290  ret float %call
291}
292
293define ppc_fp128 @ret_round_ppcf128(ppc_fp128 %arg0) {
294; CHECK-LABEL: define nofpclass(sub) ppc_fp128 @ret_round_ppcf128
295; CHECK-SAME: (ppc_fp128 [[ARG0:%.*]]) #[[ATTR1]] {
296; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(sub) ppc_fp128 @llvm.round.ppcf128(ppc_fp128 [[ARG0]]) #[[ATTR2]]
297; CHECK-NEXT:    ret ppc_fp128 [[CALL]]
298;
299; LIGHT-LABEL: define ppc_fp128 @ret_round_ppcf128
300; LIGHT-SAME: (ppc_fp128 [[ARG0:%.*]]) #[[ATTR1]] {
301; LIGHT-NEXT:    [[CALL:%.*]] = call ppc_fp128 @llvm.round.ppcf128(ppc_fp128 [[ARG0]]) #[[ATTR2]]
302; LIGHT-NEXT:    ret ppc_fp128 [[CALL]]
303;
304  %call = call ppc_fp128 @llvm.round.ppcf128(ppc_fp128 %arg0)
305  ret ppc_fp128 %call
306}
307
308define ppc_fp128 @ret_round_noinf_ppcf128(ppc_fp128 nofpclass(inf) %arg0) {
309; CHECK-LABEL: define nofpclass(sub) ppc_fp128 @ret_round_noinf_ppcf128
310; CHECK-SAME: (ppc_fp128 nofpclass(inf) [[ARG0:%.*]]) #[[ATTR1]] {
311; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(sub) ppc_fp128 @llvm.round.ppcf128(ppc_fp128 nofpclass(inf) [[ARG0]]) #[[ATTR2]]
312; CHECK-NEXT:    ret ppc_fp128 [[CALL]]
313;
314; LIGHT-LABEL: define ppc_fp128 @ret_round_noinf_ppcf128
315; LIGHT-SAME: (ppc_fp128 nofpclass(inf) [[ARG0:%.*]]) #[[ATTR1]] {
316; LIGHT-NEXT:    [[CALL:%.*]] = call ppc_fp128 @llvm.round.ppcf128(ppc_fp128 nofpclass(inf) [[ARG0]]) #[[ATTR2]]
317; LIGHT-NEXT:    ret ppc_fp128 [[CALL]]
318;
319  %call = call ppc_fp128 @llvm.round.ppcf128(ppc_fp128 %arg0)
320  ret ppc_fp128 %call
321}
322
323define ppc_fp128 @ret_round_nopinf_ppcf128(ppc_fp128 nofpclass(pinf) %arg0) {
324; CHECK-LABEL: define nofpclass(sub) ppc_fp128 @ret_round_nopinf_ppcf128
325; CHECK-SAME: (ppc_fp128 nofpclass(pinf) [[ARG0:%.*]]) #[[ATTR1]] {
326; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(sub) ppc_fp128 @llvm.round.ppcf128(ppc_fp128 nofpclass(pinf) [[ARG0]]) #[[ATTR2]]
327; CHECK-NEXT:    ret ppc_fp128 [[CALL]]
328;
329; LIGHT-LABEL: define ppc_fp128 @ret_round_nopinf_ppcf128
330; LIGHT-SAME: (ppc_fp128 nofpclass(pinf) [[ARG0:%.*]]) #[[ATTR1]] {
331; LIGHT-NEXT:    [[CALL:%.*]] = call ppc_fp128 @llvm.round.ppcf128(ppc_fp128 nofpclass(pinf) [[ARG0]]) #[[ATTR2]]
332; LIGHT-NEXT:    ret ppc_fp128 [[CALL]]
333;
334  %call = call ppc_fp128 @llvm.round.ppcf128(ppc_fp128 %arg0)
335  ret ppc_fp128 %call
336}
337
338define ppc_fp128 @ret_round_noninf_ppcf128(ppc_fp128 nofpclass(ninf) %arg0) {
339; CHECK-LABEL: define nofpclass(sub) ppc_fp128 @ret_round_noninf_ppcf128
340; CHECK-SAME: (ppc_fp128 nofpclass(ninf) [[ARG0:%.*]]) #[[ATTR1]] {
341; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(sub) ppc_fp128 @llvm.round.ppcf128(ppc_fp128 nofpclass(ninf) [[ARG0]]) #[[ATTR2]]
342; CHECK-NEXT:    ret ppc_fp128 [[CALL]]
343;
344; LIGHT-LABEL: define ppc_fp128 @ret_round_noninf_ppcf128
345; LIGHT-SAME: (ppc_fp128 nofpclass(ninf) [[ARG0:%.*]]) #[[ATTR1]] {
346; LIGHT-NEXT:    [[CALL:%.*]] = call ppc_fp128 @llvm.round.ppcf128(ppc_fp128 nofpclass(ninf) [[ARG0]]) #[[ATTR2]]
347; LIGHT-NEXT:    ret ppc_fp128 [[CALL]]
348;
349  %call = call ppc_fp128 @llvm.round.ppcf128(ppc_fp128 %arg0)
350  ret ppc_fp128 %call
351}
352
353define ppc_fp128 @ret_round_nonan_ppcf128(ppc_fp128 nofpclass(nan) %arg0) {
354; CHECK-LABEL: define nofpclass(nan sub) ppc_fp128 @ret_round_nonan_ppcf128
355; CHECK-SAME: (ppc_fp128 nofpclass(nan) [[ARG0:%.*]]) #[[ATTR1]] {
356; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan sub) ppc_fp128 @llvm.round.ppcf128(ppc_fp128 nofpclass(nan) [[ARG0]]) #[[ATTR2]]
357; CHECK-NEXT:    ret ppc_fp128 [[CALL]]
358;
359; LIGHT-LABEL: define ppc_fp128 @ret_round_nonan_ppcf128
360; LIGHT-SAME: (ppc_fp128 nofpclass(nan) [[ARG0:%.*]]) #[[ATTR1]] {
361; LIGHT-NEXT:    [[CALL:%.*]] = call ppc_fp128 @llvm.round.ppcf128(ppc_fp128 nofpclass(nan) [[ARG0]]) #[[ATTR2]]
362; LIGHT-NEXT:    ret ppc_fp128 [[CALL]]
363;
364  %call = call ppc_fp128 @llvm.round.ppcf128(ppc_fp128 %arg0)
365  ret ppc_fp128 %call
366}
367
368define float @ret_round_noneg(float nofpclass(ninf nsub nnorm) %arg0) {
369; CHECK-LABEL: define nofpclass(ninf sub) float @ret_round_noneg
370; CHECK-SAME: (float nofpclass(ninf nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] {
371; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(ninf sub) float @llvm.round.f32(float nofpclass(ninf nsub nnorm) [[ARG0]]) #[[ATTR2]]
372; CHECK-NEXT:    ret float [[CALL]]
373;
374; LIGHT-LABEL: define float @ret_round_noneg
375; LIGHT-SAME: (float nofpclass(ninf nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] {
376; LIGHT-NEXT:    [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(ninf nsub nnorm) [[ARG0]]) #[[ATTR2]]
377; LIGHT-NEXT:    ret float [[CALL]]
378;
379  %call = call float @llvm.round.f32(float %arg0)
380  ret float %call
381}
382
383define float @ret_round_noneg_nonegzero(float nofpclass(ninf nsub nnorm nzero) %arg0) {
384; CHECK-LABEL: define nofpclass(ninf nzero sub nnorm) float @ret_round_noneg_nonegzero
385; CHECK-SAME: (float nofpclass(ninf nzero nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] {
386; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(ninf nzero sub nnorm) float @llvm.round.f32(float nofpclass(ninf nzero nsub nnorm) [[ARG0]]) #[[ATTR2]]
387; CHECK-NEXT:    ret float [[CALL]]
388;
389; LIGHT-LABEL: define float @ret_round_noneg_nonegzero
390; LIGHT-SAME: (float nofpclass(ninf nzero nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] {
391; LIGHT-NEXT:    [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(ninf nzero nsub nnorm) [[ARG0]]) #[[ATTR2]]
392; LIGHT-NEXT:    ret float [[CALL]]
393;
394  %call = call float @llvm.round.f32(float %arg0)
395  ret float %call
396}
397
398define float @ret_round_noneg_nonegzero_nonan(float nofpclass(ninf nsub nnorm nzero nan) %arg0) {
399; CHECK-LABEL: define nofpclass(nan ninf nzero sub nnorm) float @ret_round_noneg_nonegzero_nonan
400; CHECK-SAME: (float nofpclass(nan ninf nzero nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] {
401; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan ninf nzero sub nnorm) float @llvm.round.f32(float nofpclass(nan ninf nzero nsub nnorm) [[ARG0]]) #[[ATTR2]]
402; CHECK-NEXT:    ret float [[CALL]]
403;
404; LIGHT-LABEL: define float @ret_round_noneg_nonegzero_nonan
405; LIGHT-SAME: (float nofpclass(nan ninf nzero nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] {
406; LIGHT-NEXT:    [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(nan ninf nzero nsub nnorm) [[ARG0]]) #[[ATTR2]]
407; LIGHT-NEXT:    ret float [[CALL]]
408;
409  %call = call float @llvm.round.f32(float %arg0)
410  ret float %call
411}
412
413define float @ret_round_noneg_nozero(float nofpclass(ninf nsub nnorm zero) %arg0) {
414; CHECK-LABEL: define nofpclass(ninf nzero sub nnorm) float @ret_round_noneg_nozero
415; CHECK-SAME: (float nofpclass(ninf zero nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] {
416; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(ninf nzero sub nnorm) float @llvm.round.f32(float nofpclass(ninf zero nsub nnorm) [[ARG0]]) #[[ATTR2]]
417; CHECK-NEXT:    ret float [[CALL]]
418;
419; LIGHT-LABEL: define float @ret_round_noneg_nozero
420; LIGHT-SAME: (float nofpclass(ninf zero nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] {
421; LIGHT-NEXT:    [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(ninf zero nsub nnorm) [[ARG0]]) #[[ATTR2]]
422; LIGHT-NEXT:    ret float [[CALL]]
423;
424  %call = call float @llvm.round.f32(float %arg0)
425  ret float %call
426}
427
428define float @ret_round_noneg_nozero_nonan(float nofpclass(ninf nsub nnorm zero nan) %arg0) {
429; CHECK-LABEL: define nofpclass(nan ninf nzero sub nnorm) float @ret_round_noneg_nozero_nonan
430; CHECK-SAME: (float nofpclass(nan ninf zero nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] {
431; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan ninf nzero sub nnorm) float @llvm.round.f32(float nofpclass(nan ninf zero nsub nnorm) [[ARG0]]) #[[ATTR2]]
432; CHECK-NEXT:    ret float [[CALL]]
433;
434; LIGHT-LABEL: define float @ret_round_noneg_nozero_nonan
435; LIGHT-SAME: (float nofpclass(nan ninf zero nsub nnorm) [[ARG0:%.*]]) #[[ATTR1]] {
436; LIGHT-NEXT:    [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(nan ninf zero nsub nnorm) [[ARG0]]) #[[ATTR2]]
437; LIGHT-NEXT:    ret float [[CALL]]
438;
439  %call = call float @llvm.round.f32(float %arg0)
440  ret float %call
441}
442
443define float @ret_round_nopos(float nofpclass(pinf psub pnorm) %arg0) {
444; CHECK-LABEL: define nofpclass(pinf sub) float @ret_round_nopos
445; CHECK-SAME: (float nofpclass(pinf psub pnorm) [[ARG0:%.*]]) #[[ATTR1]] {
446; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(pinf sub) float @llvm.round.f32(float nofpclass(pinf psub pnorm) [[ARG0]]) #[[ATTR2]]
447; CHECK-NEXT:    ret float [[CALL]]
448;
449; LIGHT-LABEL: define float @ret_round_nopos
450; LIGHT-SAME: (float nofpclass(pinf psub pnorm) [[ARG0:%.*]]) #[[ATTR1]] {
451; LIGHT-NEXT:    [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(pinf psub pnorm) [[ARG0]]) #[[ATTR2]]
452; LIGHT-NEXT:    ret float [[CALL]]
453;
454  %call = call float @llvm.round.f32(float %arg0)
455  ret float %call
456}
457
458define float @ret_round_nopos_nopzero(float nofpclass(pinf psub pnorm pzero) %arg0) {
459; CHECK-LABEL: define nofpclass(pinf pzero sub pnorm) float @ret_round_nopos_nopzero
460; CHECK-SAME: (float nofpclass(pinf pzero psub pnorm) [[ARG0:%.*]]) #[[ATTR1]] {
461; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(pinf pzero sub pnorm) float @llvm.round.f32(float nofpclass(pinf pzero psub pnorm) [[ARG0]]) #[[ATTR2]]
462; CHECK-NEXT:    ret float [[CALL]]
463;
464; LIGHT-LABEL: define float @ret_round_nopos_nopzero
465; LIGHT-SAME: (float nofpclass(pinf pzero psub pnorm) [[ARG0:%.*]]) #[[ATTR1]] {
466; LIGHT-NEXT:    [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(pinf pzero psub pnorm) [[ARG0]]) #[[ATTR2]]
467; LIGHT-NEXT:    ret float [[CALL]]
468;
469  %call = call float @llvm.round.f32(float %arg0)
470  ret float %call
471}
472
473define float @ret_round_nopos_nopzero_nonan(float nofpclass(pinf psub pnorm pzero nan) %arg0) {
474; CHECK-LABEL: define nofpclass(nan pinf pzero sub pnorm) float @ret_round_nopos_nopzero_nonan
475; CHECK-SAME: (float nofpclass(nan pinf pzero psub pnorm) [[ARG0:%.*]]) #[[ATTR1]] {
476; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan pinf pzero sub pnorm) float @llvm.round.f32(float nofpclass(nan pinf pzero psub pnorm) [[ARG0]]) #[[ATTR2]]
477; CHECK-NEXT:    ret float [[CALL]]
478;
479; LIGHT-LABEL: define float @ret_round_nopos_nopzero_nonan
480; LIGHT-SAME: (float nofpclass(nan pinf pzero psub pnorm) [[ARG0:%.*]]) #[[ATTR1]] {
481; LIGHT-NEXT:    [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(nan pinf pzero psub pnorm) [[ARG0]]) #[[ATTR2]]
482; LIGHT-NEXT:    ret float [[CALL]]
483;
484  %call = call float @llvm.round.f32(float %arg0)
485  ret float %call
486}
487
488define float @ret_round_nopos_nozero(float nofpclass(pinf psub pnorm zero) %arg0) {
489; CHECK-LABEL: define nofpclass(pinf pzero sub pnorm) float @ret_round_nopos_nozero
490; CHECK-SAME: (float nofpclass(pinf zero psub pnorm) [[ARG0:%.*]]) #[[ATTR1]] {
491; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(pinf pzero sub pnorm) float @llvm.round.f32(float nofpclass(pinf zero psub pnorm) [[ARG0]]) #[[ATTR2]]
492; CHECK-NEXT:    ret float [[CALL]]
493;
494; LIGHT-LABEL: define float @ret_round_nopos_nozero
495; LIGHT-SAME: (float nofpclass(pinf zero psub pnorm) [[ARG0:%.*]]) #[[ATTR1]] {
496; LIGHT-NEXT:    [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(pinf zero psub pnorm) [[ARG0]]) #[[ATTR2]]
497; LIGHT-NEXT:    ret float [[CALL]]
498;
499  %call = call float @llvm.round.f32(float %arg0)
500  ret float %call
501}
502
503define float @ret_round_nopos_nozero_nonan(float nofpclass(pinf psub pnorm zero nan) %arg0) {
504; CHECK-LABEL: define nofpclass(nan pinf pzero sub pnorm) float @ret_round_nopos_nozero_nonan
505; CHECK-SAME: (float nofpclass(nan pinf zero psub pnorm) [[ARG0:%.*]]) #[[ATTR1]] {
506; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan pinf pzero sub pnorm) float @llvm.round.f32(float nofpclass(nan pinf zero psub pnorm) [[ARG0]]) #[[ATTR2]]
507; CHECK-NEXT:    ret float [[CALL]]
508;
509; LIGHT-LABEL: define float @ret_round_nopos_nozero_nonan
510; LIGHT-SAME: (float nofpclass(nan pinf zero psub pnorm) [[ARG0:%.*]]) #[[ATTR1]] {
511; LIGHT-NEXT:    [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(nan pinf zero psub pnorm) [[ARG0]]) #[[ATTR2]]
512; LIGHT-NEXT:    ret float [[CALL]]
513;
514  %call = call float @llvm.round.f32(float %arg0)
515  ret float %call
516}
517
518define float @ret_round_nopzero_nopnorm(float nofpclass(pzero pnorm) %arg0) {
519; CHECK-LABEL: define nofpclass(sub) float @ret_round_nopzero_nopnorm
520; CHECK-SAME: (float nofpclass(pzero pnorm) [[ARG0:%.*]]) #[[ATTR1]] {
521; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float nofpclass(pzero pnorm) [[ARG0]]) #[[ATTR2]]
522; CHECK-NEXT:    ret float [[CALL]]
523;
524; LIGHT-LABEL: define float @ret_round_nopzero_nopnorm
525; LIGHT-SAME: (float nofpclass(pzero pnorm) [[ARG0:%.*]]) #[[ATTR1]] {
526; LIGHT-NEXT:    [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(pzero pnorm) [[ARG0]]) #[[ATTR2]]
527; LIGHT-NEXT:    ret float [[CALL]]
528;
529  %call = call float @llvm.round.f32(float %arg0)
530  ret float %call
531}
532
533define float @ret_round_nonzero_nonnorm(float nofpclass(nzero nnorm) %arg0) {
534; CHECK-LABEL: define nofpclass(sub) float @ret_round_nonzero_nonnorm
535; CHECK-SAME: (float nofpclass(nzero nnorm) [[ARG0:%.*]]) #[[ATTR1]] {
536; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float nofpclass(nzero nnorm) [[ARG0]]) #[[ATTR2]]
537; CHECK-NEXT:    ret float [[CALL]]
538;
539; LIGHT-LABEL: define float @ret_round_nonzero_nonnorm
540; LIGHT-SAME: (float nofpclass(nzero nnorm) [[ARG0:%.*]]) #[[ATTR1]] {
541; LIGHT-NEXT:    [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(nzero nnorm) [[ARG0]]) #[[ATTR2]]
542; LIGHT-NEXT:    ret float [[CALL]]
543;
544  %call = call float @llvm.round.f32(float %arg0)
545  ret float %call
546}
547
548define float @ret_round_nozero_nonorm(float nofpclass(zero norm) %arg0) {
549; CHECK-LABEL: define nofpclass(sub) float @ret_round_nozero_nonorm
550; CHECK-SAME: (float nofpclass(zero norm) [[ARG0:%.*]]) #[[ATTR1]] {
551; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(sub) float @llvm.round.f32(float nofpclass(zero norm) [[ARG0]]) #[[ATTR2]]
552; CHECK-NEXT:    ret float [[CALL]]
553;
554; LIGHT-LABEL: define float @ret_round_nozero_nonorm
555; LIGHT-SAME: (float nofpclass(zero norm) [[ARG0:%.*]]) #[[ATTR1]] {
556; LIGHT-NEXT:    [[CALL:%.*]] = call float @llvm.round.f32(float nofpclass(zero norm) [[ARG0]]) #[[ATTR2]]
557; LIGHT-NEXT:    ret float [[CALL]]
558;
559  %call = call float @llvm.round.f32(float %arg0)
560  ret float %call
561}
562