Skip to content

Commit 10fb470

Browse files
author
git apple-llvm automerger
committed
Merge commit '3734ace841fe' from llvm.org/main into next
2 parents 01d9cef + 3734ace commit 10fb470

File tree

1 file changed

+276
-0
lines changed

1 file changed

+276
-0
lines changed
Lines changed: 276 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,276 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
2+
; RUN: opt -S -passes=attributor -attributor-manifest-internal < %s | FileCheck %s
3+
4+
define half @ret_log_f16(half %arg) #1 {
5+
; CHECK-LABEL: define half @ret_log_f16(
6+
; CHECK-SAME: half [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
7+
; CHECK-NEXT: [[CALL:%.*]] = call half @llvm.amdgcn.log.f16(half [[ARG]]) #[[ATTR7:[0-9]+]]
8+
; CHECK-NEXT: ret half [[CALL]]
9+
;
10+
%call = call half @llvm.amdgcn.log.f16(half %arg)
11+
ret half %call
12+
}
13+
14+
define float @ret_log_f32(float %arg) #1 {
15+
; CHECK-LABEL: define float @ret_log_f32(
16+
; CHECK-SAME: float [[ARG:%.*]]) #[[ATTR0]] {
17+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.log.f32(float [[ARG]]) #[[ATTR7]]
18+
; CHECK-NEXT: ret float [[CALL]]
19+
;
20+
%call = call float @llvm.amdgcn.log.f32(float %arg)
21+
ret float %call
22+
}
23+
24+
define float @ret_log_noinf(float nofpclass(inf) %arg) #1 {
25+
; CHECK-LABEL: define float @ret_log_noinf(
26+
; CHECK-SAME: float nofpclass(inf) [[ARG:%.*]]) #[[ATTR0]] {
27+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.log.f32(float nofpclass(inf) [[ARG]]) #[[ATTR7]]
28+
; CHECK-NEXT: ret float [[CALL]]
29+
;
30+
%call = call float @llvm.amdgcn.log.f32(float %arg)
31+
ret float %call
32+
}
33+
34+
define float @ret_log_noneg(float nofpclass(ninf nsub nnorm) %arg) #1 {
35+
; CHECK-LABEL: define float @ret_log_noneg(
36+
; CHECK-SAME: float nofpclass(ninf nsub nnorm) [[ARG:%.*]]) #[[ATTR0]] {
37+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.log.f32(float nofpclass(ninf nsub nnorm) [[ARG]]) #[[ATTR7]]
38+
; CHECK-NEXT: ret float [[CALL]]
39+
;
40+
%call = call float @llvm.amdgcn.log.f32(float %arg)
41+
ret float %call
42+
}
43+
44+
define float @ret_log_noneg_nonan(float nofpclass(nan ninf nsub nnorm) %arg) #1 {
45+
; CHECK-LABEL: define float @ret_log_noneg_nonan(
46+
; CHECK-SAME: float nofpclass(nan ninf nsub nnorm) [[ARG:%.*]]) #[[ATTR0]] {
47+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.log.f32(float nofpclass(nan ninf nsub nnorm) [[ARG]]) #[[ATTR7]]
48+
; CHECK-NEXT: ret float [[CALL]]
49+
;
50+
%call = call float @llvm.amdgcn.log.f32(float %arg)
51+
ret float %call
52+
}
53+
54+
define float @ret_log_noinf_noneg(float nofpclass(inf nsub nnorm) %arg) #1 {
55+
; CHECK-LABEL: define float @ret_log_noinf_noneg(
56+
; CHECK-SAME: float nofpclass(inf nsub nnorm) [[ARG:%.*]]) #[[ATTR0]] {
57+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.log.f32(float nofpclass(inf nsub nnorm) [[ARG]]) #[[ATTR7]]
58+
; CHECK-NEXT: ret float [[CALL]]
59+
;
60+
%call = call float @llvm.amdgcn.log.f32(float %arg)
61+
ret float %call
62+
}
63+
64+
define float @ret_log_noinf_noneg_nonan(float nofpclass(nan inf nsub nnorm) %arg) #1 {
65+
; CHECK-LABEL: define float @ret_log_noinf_noneg_nonan(
66+
; CHECK-SAME: float nofpclass(nan inf nsub nnorm) [[ARG:%.*]]) #[[ATTR0]] {
67+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.log.f32(float nofpclass(nan inf nsub nnorm) [[ARG]]) #[[ATTR7]]
68+
; CHECK-NEXT: ret float [[CALL]]
69+
;
70+
%call = call float @llvm.amdgcn.log.f32(float %arg)
71+
ret float %call
72+
}
73+
74+
define float @ret_log_nopinf(float nofpclass(pinf) %arg) #1 {
75+
; CHECK-LABEL: define float @ret_log_nopinf(
76+
; CHECK-SAME: float nofpclass(pinf) [[ARG:%.*]]) #[[ATTR0]] {
77+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.log.f32(float nofpclass(pinf) [[ARG]]) #[[ATTR7]]
78+
; CHECK-NEXT: ret float [[CALL]]
79+
;
80+
%call = call float @llvm.amdgcn.log.f32(float %arg)
81+
ret float %call
82+
}
83+
84+
define float @ret_log_noninf(float nofpclass(ninf) %arg) #1 {
85+
; CHECK-LABEL: define float @ret_log_noninf(
86+
; CHECK-SAME: float nofpclass(ninf) [[ARG:%.*]]) #[[ATTR0]] {
87+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.log.f32(float nofpclass(ninf) [[ARG]]) #[[ATTR7]]
88+
; CHECK-NEXT: ret float [[CALL]]
89+
;
90+
%call = call float @llvm.amdgcn.log.f32(float %arg)
91+
ret float %call
92+
}
93+
94+
define float @ret_log_nonan(float nofpclass(nan) %arg) #1 {
95+
; CHECK-LABEL: define float @ret_log_nonan(
96+
; CHECK-SAME: float nofpclass(nan) [[ARG:%.*]]) #[[ATTR0]] {
97+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.log.f32(float nofpclass(nan) [[ARG]]) #[[ATTR7]]
98+
; CHECK-NEXT: ret float [[CALL]]
99+
;
100+
%call = call float @llvm.amdgcn.log.f32(float %arg)
101+
ret float %call
102+
}
103+
104+
define float @ret_log_nonan_noinf(float nofpclass(nan inf) %arg) #1 {
105+
; CHECK-LABEL: define float @ret_log_nonan_noinf(
106+
; CHECK-SAME: float nofpclass(nan inf) [[ARG:%.*]]) #[[ATTR0]] {
107+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.log.f32(float nofpclass(nan inf) [[ARG]]) #[[ATTR7]]
108+
; CHECK-NEXT: ret float [[CALL]]
109+
;
110+
%call = call float @llvm.amdgcn.log.f32(float %arg)
111+
ret float %call
112+
}
113+
114+
define float @ret_log_nonan_noinf_nozero(float nofpclass(nan inf zero) %arg) #1 {
115+
; CHECK-LABEL: define float @ret_log_nonan_noinf_nozero(
116+
; CHECK-SAME: float nofpclass(nan inf zero) [[ARG:%.*]]) #[[ATTR0]] {
117+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.log.f32(float nofpclass(nan inf zero) [[ARG]]) #[[ATTR7]]
118+
; CHECK-NEXT: ret float [[CALL]]
119+
;
120+
%call = call float @llvm.amdgcn.log.f32(float %arg)
121+
ret float %call
122+
}
123+
124+
define float @ret_log_noinf_nozero(float nofpclass(inf zero) %arg) #1 {
125+
; CHECK-LABEL: define float @ret_log_noinf_nozero(
126+
; CHECK-SAME: float nofpclass(inf zero) [[ARG:%.*]]) #[[ATTR0]] {
127+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.log.f32(float nofpclass(inf zero) [[ARG]]) #[[ATTR7]]
128+
; CHECK-NEXT: ret float [[CALL]]
129+
;
130+
%call = call float @llvm.amdgcn.log.f32(float %arg)
131+
ret float %call
132+
}
133+
134+
define float @ret_log_noinf_nonegzero(float nofpclass(inf nzero) %arg) #1 {
135+
; CHECK-LABEL: define float @ret_log_noinf_nonegzero(
136+
; CHECK-SAME: float nofpclass(inf nzero) [[ARG:%.*]]) #[[ATTR0]] {
137+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.log.f32(float nofpclass(inf nzero) [[ARG]]) #[[ATTR7]]
138+
; CHECK-NEXT: ret float [[CALL]]
139+
;
140+
%call = call float @llvm.amdgcn.log.f32(float %arg)
141+
ret float %call
142+
}
143+
144+
define float @ret_log_positive_source(i32 %arg) #1 {
145+
; CHECK-LABEL: define float @ret_log_positive_source(
146+
; CHECK-SAME: i32 [[ARG:%.*]]) #[[ATTR0]] {
147+
; CHECK-NEXT: [[UITOFP:%.*]] = uitofp i32 [[ARG]] to float
148+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.log.f32(float [[UITOFP]]) #[[ATTR7]]
149+
; CHECK-NEXT: ret float [[CALL]]
150+
;
151+
%uitofp = uitofp i32 %arg to float
152+
%call = call float @llvm.amdgcn.log.f32(float %uitofp)
153+
ret float %call
154+
}
155+
156+
define float @ret_log_unknown_sign(float nofpclass(nan) %arg, float nofpclass(nan) %arg1) #1 {
157+
; CHECK-LABEL: define float @ret_log_unknown_sign(
158+
; CHECK-SAME: float nofpclass(nan) [[ARG:%.*]], float nofpclass(nan) [[ARG1:%.*]]) #[[ATTR0]] {
159+
; CHECK-NEXT: [[UNKNOWN_SIGN_NOT_NAN:%.*]] = fmul nnan float [[ARG]], [[ARG1]]
160+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.log.f32(float [[UNKNOWN_SIGN_NOT_NAN]]) #[[ATTR7]]
161+
; CHECK-NEXT: ret float [[CALL]]
162+
;
163+
%unknown.sign.not.nan = fmul nnan float %arg, %arg1
164+
%call = call float @llvm.amdgcn.log.f32(float %unknown.sign.not.nan)
165+
ret float %call
166+
}
167+
168+
define float @ret_log_daz_noinf_nozero(float nofpclass(inf zero) %arg) #2 {
169+
; CHECK-LABEL: define float @ret_log_daz_noinf_nozero(
170+
; CHECK-SAME: float nofpclass(inf zero) [[ARG:%.*]]) #[[ATTR1:[0-9]+]] {
171+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.log.f32(float nofpclass(inf zero) [[ARG]]) #[[ATTR7]]
172+
; CHECK-NEXT: ret float [[CALL]]
173+
;
174+
%call = call float @llvm.amdgcn.log.f32(float %arg)
175+
ret float %call
176+
}
177+
178+
define <2 x float> @ret_log_daz_noinf_nozero_v2f32(<2 x float> nofpclass(inf zero) %arg) #2 {
179+
; CHECK-LABEL: define nofpclass(pinf) <2 x float> @ret_log_daz_noinf_nozero_v2f32(
180+
; CHECK-SAME: <2 x float> nofpclass(inf zero) [[ARG:%.*]]) #[[ATTR1]] {
181+
; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(pinf) <2 x float> @llvm.log.v2f32(<2 x float> nofpclass(inf zero) [[ARG]]) #[[ATTR7]]
182+
; CHECK-NEXT: ret <2 x float> [[CALL]]
183+
;
184+
%call = call <2 x float> @llvm.log.v2f32(<2 x float> %arg)
185+
ret <2 x float> %call
186+
}
187+
188+
define float @ret_log_daz_noinf_nonegzero(float nofpclass(inf nzero) %arg) #2 {
189+
; CHECK-LABEL: define float @ret_log_daz_noinf_nonegzero(
190+
; CHECK-SAME: float nofpclass(inf nzero) [[ARG:%.*]]) #[[ATTR1]] {
191+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.log.f32(float nofpclass(inf nzero) [[ARG]]) #[[ATTR7]]
192+
; CHECK-NEXT: ret float [[CALL]]
193+
;
194+
%call = call float @llvm.amdgcn.log.f32(float %arg)
195+
ret float %call
196+
}
197+
198+
define float @ret_log_dynamic_noinf_nozero(float nofpclass(inf zero) %arg) #3 {
199+
; CHECK-LABEL: define float @ret_log_dynamic_noinf_nozero(
200+
; CHECK-SAME: float nofpclass(inf zero) [[ARG:%.*]]) #[[ATTR2:[0-9]+]] {
201+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.log.f32(float nofpclass(inf zero) [[ARG]]) #[[ATTR7]]
202+
; CHECK-NEXT: ret float [[CALL]]
203+
;
204+
%call = call float @llvm.amdgcn.log.f32(float %arg)
205+
ret float %call
206+
}
207+
208+
define float @ret_log_dynamic_noinf_nonegzero(float nofpclass(inf nzero) %arg) #3 {
209+
; CHECK-LABEL: define float @ret_log_dynamic_noinf_nonegzero(
210+
; CHECK-SAME: float nofpclass(inf nzero) [[ARG:%.*]]) #[[ATTR2]] {
211+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.log.f32(float nofpclass(inf nzero) [[ARG]]) #[[ATTR7]]
212+
; CHECK-NEXT: ret float [[CALL]]
213+
;
214+
%call = call float @llvm.amdgcn.log.f32(float %arg)
215+
ret float %call
216+
}
217+
218+
define float @ret_log_ftz_noinf_nonegzero(float nofpclass(inf nzero) %arg) #4 {
219+
; CHECK-LABEL: define float @ret_log_ftz_noinf_nonegzero(
220+
; CHECK-SAME: float nofpclass(inf nzero) [[ARG:%.*]]) #[[ATTR3:[0-9]+]] {
221+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.log.f32(float nofpclass(inf nzero) [[ARG]]) #[[ATTR7]]
222+
; CHECK-NEXT: ret float [[CALL]]
223+
;
224+
%call = call float @llvm.amdgcn.log.f32(float %arg)
225+
ret float %call
226+
}
227+
228+
define float @ret_log_ftz_dynamic_noinf_nonegzero(float nofpclass(inf nzero) %arg) #5 {
229+
; CHECK-LABEL: define float @ret_log_ftz_dynamic_noinf_nonegzero(
230+
; CHECK-SAME: float nofpclass(inf nzero) [[ARG:%.*]]) #[[ATTR4:[0-9]+]] {
231+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.log.f32(float nofpclass(inf nzero) [[ARG]]) #[[ATTR7]]
232+
; CHECK-NEXT: ret float [[CALL]]
233+
;
234+
%call = call float @llvm.amdgcn.log.f32(float %arg)
235+
ret float %call
236+
}
237+
238+
define float @ret_log_dynamic_noinf_nozero_nosub(float nofpclass(inf zero sub) %arg) #3 {
239+
; CHECK-LABEL: define float @ret_log_dynamic_noinf_nozero_nosub(
240+
; CHECK-SAME: float nofpclass(inf zero sub) [[ARG:%.*]]) #[[ATTR2]] {
241+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.log.f32(float nofpclass(inf zero sub) [[ARG]]) #[[ATTR7]]
242+
; CHECK-NEXT: ret float [[CALL]]
243+
;
244+
%call = call float @llvm.amdgcn.log.f32(float %arg)
245+
ret float %call
246+
}
247+
248+
define float @ret_log_dynamic_noinf_nopzero_nopsub(float nofpclass(inf pzero psub) %arg) #3 {
249+
; CHECK-LABEL: define float @ret_log_dynamic_noinf_nopzero_nopsub(
250+
; CHECK-SAME: float nofpclass(inf pzero psub) [[ARG:%.*]]) #[[ATTR2]] {
251+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.log.f32(float nofpclass(inf pzero psub) [[ARG]]) #[[ATTR7]]
252+
; CHECK-NEXT: ret float [[CALL]]
253+
;
254+
%call = call float @llvm.amdgcn.log.f32(float %arg)
255+
ret float %call
256+
}
257+
258+
define float @ret_log_dynamic_noinf_nonzero_nonsub(float nofpclass(inf nzero nsub) %arg) #3 {
259+
; CHECK-LABEL: define float @ret_log_dynamic_noinf_nonzero_nonsub(
260+
; CHECK-SAME: float nofpclass(inf nzero nsub) [[ARG:%.*]]) #[[ATTR2]] {
261+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.log.f32(float nofpclass(inf nzero nsub) [[ARG]]) #[[ATTR7]]
262+
; CHECK-NEXT: ret float [[CALL]]
263+
;
264+
%call = call float @llvm.amdgcn.log.f32(float %arg)
265+
ret float %call
266+
}
267+
268+
declare half @llvm.amdgcn.log.f16(half) #0
269+
declare float @llvm.amdgcn.log.f32(float) #0
270+
271+
attributes #0 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
272+
attributes #1 = { "denormal-fp-math"="ieee,ieee" }
273+
attributes #2 = { "denormal-fp-math"="ieee,preserve-sign" }
274+
attributes #3 = { "denormal-fp-math"="ieee,dynamic" }
275+
attributes #4 = { "denormal-fp-math"="preserve-sign,ieee" }
276+
attributes #5 = { "denormal-fp-math"="dynamic,ieee" }

0 commit comments

Comments
 (0)