Skip to content

Commit deb71df

Browse files
author
git apple-llvm automerger
committed
Merge commit '33d7cd67a829' from llvm.org/main into next
2 parents 10fb470 + 33d7cd6 commit deb71df

File tree

1 file changed

+130
-0
lines changed

1 file changed

+130
-0
lines changed
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
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+
declare float @llvm.amdgcn.exp2.f32(float)
5+
6+
define half @ret_exp_f16(half %arg0) {
7+
; CHECK-LABEL: define half @ret_exp_f16(
8+
; CHECK-SAME: half [[ARG0:%.*]]) #[[ATTR1:[0-9]+]] {
9+
; CHECK-NEXT: [[CALL:%.*]] = call half @llvm.amdgcn.exp2.f16(half [[ARG0]]) #[[ATTR2:[0-9]+]]
10+
; CHECK-NEXT: ret half [[CALL]]
11+
;
12+
%call = call half @llvm.amdgcn.exp2.f16(half %arg0)
13+
ret half %call
14+
}
15+
16+
define float @ret_exp_f32(float %arg0) {
17+
; CHECK-LABEL: define float @ret_exp_f32(
18+
; CHECK-SAME: float [[ARG0:%.*]]) #[[ATTR1]] {
19+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.exp2.f32(float [[ARG0]]) #[[ATTR2]]
20+
; CHECK-NEXT: ret float [[CALL]]
21+
;
22+
%call = call float @llvm.amdgcn.exp2.f32(float %arg0)
23+
ret float %call
24+
}
25+
26+
define float @ret_exp_noinf(float nofpclass(inf) %arg0) {
27+
; CHECK-LABEL: define float @ret_exp_noinf(
28+
; CHECK-SAME: float nofpclass(inf) [[ARG0:%.*]]) #[[ATTR1]] {
29+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.exp2.f32(float nofpclass(inf) [[ARG0]]) #[[ATTR2]]
30+
; CHECK-NEXT: ret float [[CALL]]
31+
;
32+
%call = call float @llvm.amdgcn.exp2.f32(float %arg0)
33+
ret float %call
34+
}
35+
36+
define float @ret_exp_nopinf(float nofpclass(pinf) %arg0) {
37+
; CHECK-LABEL: define float @ret_exp_nopinf(
38+
; CHECK-SAME: float nofpclass(pinf) [[ARG0:%.*]]) #[[ATTR1]] {
39+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.exp2.f32(float nofpclass(pinf) [[ARG0]]) #[[ATTR2]]
40+
; CHECK-NEXT: ret float [[CALL]]
41+
;
42+
%call = call float @llvm.amdgcn.exp2.f32(float %arg0)
43+
ret float %call
44+
}
45+
46+
define float @ret_exp_noninf(float nofpclass(ninf) %arg0) {
47+
; CHECK-LABEL: define float @ret_exp_noninf(
48+
; CHECK-SAME: float nofpclass(ninf) [[ARG0:%.*]]) #[[ATTR1]] {
49+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.exp2.f32(float nofpclass(ninf) [[ARG0]]) #[[ATTR2]]
50+
; CHECK-NEXT: ret float [[CALL]]
51+
;
52+
%call = call float @llvm.amdgcn.exp2.f32(float %arg0)
53+
ret float %call
54+
}
55+
56+
define float @ret_exp_nonan(float nofpclass(nan) %arg0) {
57+
; CHECK-LABEL: define float @ret_exp_nonan(
58+
; CHECK-SAME: float nofpclass(nan) [[ARG0:%.*]]) #[[ATTR1]] {
59+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.exp2.f32(float nofpclass(nan) [[ARG0]]) #[[ATTR2]]
60+
; CHECK-NEXT: ret float [[CALL]]
61+
;
62+
%call = call float @llvm.amdgcn.exp2.f32(float %arg0)
63+
ret float %call
64+
}
65+
66+
define float @ret_exp_nonan_noinf(float nofpclass(nan inf) %arg0) {
67+
; CHECK-LABEL: define float @ret_exp_nonan_noinf(
68+
; CHECK-SAME: float nofpclass(nan inf) [[ARG0:%.*]]) #[[ATTR1]] {
69+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.exp2.f32(float nofpclass(nan inf) [[ARG0]]) #[[ATTR2]]
70+
; CHECK-NEXT: ret float [[CALL]]
71+
;
72+
%call = call float @llvm.amdgcn.exp2.f32(float %arg0)
73+
ret float %call
74+
}
75+
76+
define float @ret_exp_nonan_noinf_nozero(float nofpclass(nan inf zero) %arg0) {
77+
; CHECK-LABEL: define float @ret_exp_nonan_noinf_nozero(
78+
; CHECK-SAME: float nofpclass(nan inf zero) [[ARG0:%.*]]) #[[ATTR1]] {
79+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.exp2.f32(float nofpclass(nan inf zero) [[ARG0]]) #[[ATTR2]]
80+
; CHECK-NEXT: ret float [[CALL]]
81+
;
82+
%call = call float @llvm.amdgcn.exp2.f32(float %arg0)
83+
ret float %call
84+
}
85+
86+
define float @ret_exp_noinf_nozero(float nofpclass(inf zero) %arg0) {
87+
; CHECK-LABEL: define float @ret_exp_noinf_nozero(
88+
; CHECK-SAME: float nofpclass(inf zero) [[ARG0:%.*]]) #[[ATTR1]] {
89+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.exp2.f32(float nofpclass(inf zero) [[ARG0]]) #[[ATTR2]]
90+
; CHECK-NEXT: ret float [[CALL]]
91+
;
92+
%call = call float @llvm.amdgcn.exp2.f32(float %arg0)
93+
ret float %call
94+
}
95+
96+
define float @ret_exp_noinf_nonegzero(float nofpclass(inf nzero) %arg0) {
97+
; CHECK-LABEL: define float @ret_exp_noinf_nonegzero(
98+
; CHECK-SAME: float nofpclass(inf nzero) [[ARG0:%.*]]) #[[ATTR1]] {
99+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.exp2.f32(float nofpclass(inf nzero) [[ARG0]]) #[[ATTR2]]
100+
; CHECK-NEXT: ret float [[CALL]]
101+
;
102+
%call = call float @llvm.amdgcn.exp2.f32(float %arg0)
103+
ret float %call
104+
}
105+
106+
define float @ret_exp_positive_source(i32 %arg) {
107+
; CHECK-LABEL: define float @ret_exp_positive_source(
108+
; CHECK-SAME: i32 [[ARG:%.*]]) #[[ATTR1]] {
109+
; CHECK-NEXT: [[UITOFP:%.*]] = uitofp i32 [[ARG]] to float
110+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.exp2.f32(float [[UITOFP]]) #[[ATTR2]]
111+
; CHECK-NEXT: ret float [[CALL]]
112+
;
113+
%uitofp = uitofp i32 %arg to float
114+
%call = call float @llvm.amdgcn.exp2.f32(float %uitofp)
115+
ret float %call
116+
}
117+
118+
; Could produce a nan because we don't know if the multiply is negative.
119+
define float @ret_exp_unknown_sign(float nofpclass(nan) %arg0, float nofpclass(nan) %arg1) {
120+
; CHECK-LABEL: define float @ret_exp_unknown_sign(
121+
; CHECK-SAME: float nofpclass(nan) [[ARG0:%.*]], float nofpclass(nan) [[ARG1:%.*]]) #[[ATTR1]] {
122+
; CHECK-NEXT: [[UNKNOWN_SIGN_NOT_NAN:%.*]] = fmul nnan float [[ARG0]], [[ARG1]]
123+
; CHECK-NEXT: [[CALL:%.*]] = call float @llvm.amdgcn.exp2.f32(float [[UNKNOWN_SIGN_NOT_NAN]]) #[[ATTR2]]
124+
; CHECK-NEXT: ret float [[CALL]]
125+
;
126+
%unknown.sign.not.nan = fmul nnan float %arg0, %arg1
127+
%call = call float @llvm.amdgcn.exp2.f32(float %unknown.sign.not.nan)
128+
ret float %call
129+
}
130+

0 commit comments

Comments
 (0)