[llvm] [KnownFPClass] Propagate sign information through atan (PR #229902)
Youssef W. Abdallah via llvm-commits
llvm-commits at lists.llvm.org
Sat Oct 10 13:36:34 PDT 2026
https://github.com/Wael-06 updated https://github.com/llvm/llvm-project/pull/229902
>From e180f91dc86acfe475983c6cef62a864a3eb00d7 Mon Sep 17 00:00:00 2001
From: Youssef Wael <youssefwael.work at gmail.com>
Date: Wed, 7 Oct 2026 23:22:39 +0300
Subject: [PATCH 1/4] [KnownFPClass] Propagate sign information through atan
---
llvm/lib/Support/KnownFPClass.cpp | 16 +++++--
.../Transforms/Attributor/nofpclass-trig.ll | 45 ++++++++++++++-----
2 files changed, 46 insertions(+), 15 deletions(-)
diff --git a/llvm/lib/Support/KnownFPClass.cpp b/llvm/lib/Support/KnownFPClass.cpp
index 4a91675450be2..97110a0fcd870 100644
--- a/llvm/lib/Support/KnownFPClass.cpp
+++ b/llvm/lib/Support/KnownFPClass.cpp
@@ -950,9 +950,19 @@ KnownFPClass KnownFPClass::atan(const KnownFPClass &KnownSrc) {
// atan is bounded to (-pi/2, pi/2), never Inf. atan(+-Inf) = +-pi/2 (finite).
Known.knownNot(fcInf);
- // atan is sign-preserving: atan(x) < 0 iff x < 0.
- if (KnownSrc.isKnownNever(fcNegative))
- Known.knownNot(fcNegative);
+ // For non-zero numeric inputs, atan preserves the sign.
+ if (KnownSrc.isKnownNever(fcNegSubnormal | fcNegNormal | fcNegInf))
+ Known.knownNot(fcNegSubnormal | fcNegNormal);
+
+ if (KnownSrc.isKnownNever(fcPosSubnormal | fcPosNormal | fcPosInf))
+ Known.knownNot(fcPosSubnormal | fcPosNormal);
+
+ // atan(-0.0) = -0.0 and atan(+0.0) = +0.0.
+ if (KnownSrc.isKnownNever(fcNegZero))
+ Known.knownNot(fcNegZero);
+
+ if (KnownSrc.isKnownNever(fcPosZero))
+ Known.knownNot(fcPosZero);
Known.propagateNonNaN(KnownSrc);
diff --git a/llvm/test/Transforms/Attributor/nofpclass-trig.ll b/llvm/test/Transforms/Attributor/nofpclass-trig.ll
index e2e2196092dea..475277435b3ff 100644
--- a/llvm/test/Transforms/Attributor/nofpclass-trig.ll
+++ b/llvm/test/Transforms/Attributor/nofpclass-trig.ll
@@ -418,6 +418,27 @@ define float @ret_atan_nonneg(float nofpclass(ninf nzero nsub nnorm) %arg) {
ret float %call
}
+; atan preserves the sign of non-zero finite inputs.
+define float @ret_atan_no_negative_nonzero(float nofpclass(ninf nsub nnorm) %arg) {
+; CHECK-LABEL: define nofpclass(inf nsub nnorm) float @ret_atan_no_negative_nonzero
+; CHECK-SAME: (float nofpclass(ninf nsub nnorm) [[ARG:%.*]]) #[[ATTR1]] {
+; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(inf nsub nnorm) float @llvm.atan.f32(float nofpclass(ninf nsub nnorm) [[ARG]]) #[[ATTR4]]
+; CHECK-NEXT: ret float [[CALL]]
+;
+ %call = call float @llvm.atan.f32(float %arg)
+ ret float %call
+}
+
+define float @ret_atan_no_positive_nonzero(float nofpclass(pinf psub pnorm) %arg) {
+; CHECK-LABEL: define nofpclass(inf psub pnorm) float @ret_atan_no_positive_nonzero
+; CHECK-SAME: (float nofpclass(pinf psub pnorm) [[ARG:%.*]]) #[[ATTR1]] {
+; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(inf psub pnorm) float @llvm.atan.f32(float nofpclass(pinf psub pnorm) [[ARG]]) #[[ATTR4]]
+; CHECK-NEXT: ret float [[CALL]]
+;
+ %call = call float @llvm.atan.f32(float %arg)
+ ret float %call
+}
+
define float @ret_atan_nonan(float nofpclass(nan) %arg) {
; CHECK-LABEL: define nofpclass(nan inf) float @ret_atan_nonan
; CHECK-SAME: (float nofpclass(nan) [[ARG:%.*]]) #[[ATTR1]] {
@@ -440,9 +461,9 @@ define float @ret_tan_nosnan(float nofpclass(snan) %arg) {
}
define float @ret_atan_negnormal_negsubnormal_mode_dynamic_dynamic(float nofpclass(nan inf zero psub pnorm) %arg) #0 {
-; CHECK-LABEL: define nofpclass(nan inf) float @ret_atan_negnormal_negsubnormal_mode_dynamic_dynamic
+; CHECK-LABEL: define nofpclass(nan inf zero psub pnorm) float @ret_atan_negnormal_negsubnormal_mode_dynamic_dynamic
; CHECK-SAME: (float nofpclass(nan inf zero psub pnorm) [[ARG:%.*]]) #[[ATTR2]] {
-; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan inf) float @llvm.atan.f32(float nofpclass(nan inf zero psub pnorm) [[ARG]]) #[[ATTR4]]
+; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan inf zero psub pnorm) float @llvm.atan.f32(float nofpclass(nan inf zero psub pnorm) [[ARG]]) #[[ATTR4]]
; CHECK-NEXT: ret float [[CALL]]
;
%call = call float @llvm.atan.f32(float %arg)
@@ -450,9 +471,9 @@ define float @ret_atan_negnormal_negsubnormal_mode_dynamic_dynamic(float nofpcla
}
define float @ret_atan_negnormal_negsubnormal_mode_ftpz_dapz(float nofpclass(nan inf zero psub pnorm) %arg) #1 {
-; CHECK-LABEL: define nofpclass(nan inf) float @ret_atan_negnormal_negsubnormal_mode_ftpz_dapz
+; CHECK-LABEL: define nofpclass(nan inf zero psub pnorm) float @ret_atan_negnormal_negsubnormal_mode_ftpz_dapz
; CHECK-SAME: (float nofpclass(nan inf zero psub pnorm) [[ARG:%.*]]) #[[ATTR3]] {
-; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan inf) float @llvm.atan.f32(float nofpclass(nan inf zero psub pnorm) [[ARG]]) #[[ATTR4]]
+; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan inf zero psub pnorm) float @llvm.atan.f32(float nofpclass(nan inf zero psub pnorm) [[ARG]]) #[[ATTR4]]
; CHECK-NEXT: ret float [[CALL]]
;
%call = call float @llvm.atan.f32(float %arg)
@@ -460,9 +481,9 @@ define float @ret_atan_negnormal_negsubnormal_mode_ftpz_dapz(float nofpclass(nan
}
define float @ret_atan_negnormal_mode_dynamic_dynamic(float nofpclass(nan inf zero sub pnorm) %arg) #0 {
-; CHECK-LABEL: define nofpclass(nan inf) float @ret_atan_negnormal_mode_dynamic_dynamic
+; CHECK-LABEL: define nofpclass(nan inf zero psub pnorm) float @ret_atan_negnormal_mode_dynamic_dynamic
; CHECK-SAME: (float nofpclass(nan inf zero sub pnorm) [[ARG:%.*]]) #[[ATTR2]] {
-; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan inf) float @llvm.atan.f32(float nofpclass(nan inf zero sub pnorm) [[ARG]]) #[[ATTR4]]
+; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan inf zero psub pnorm) float @llvm.atan.f32(float nofpclass(nan inf zero sub pnorm) [[ARG]]) #[[ATTR4]]
; CHECK-NEXT: ret float [[CALL]]
;
%call = call float @llvm.atan.f32(float %arg)
@@ -470,9 +491,9 @@ define float @ret_atan_negnormal_mode_dynamic_dynamic(float nofpclass(nan inf ze
}
define float @ret_atan_negnormal_mode_ftpz_dapz(float nofpclass(nan inf zero sub pnorm) %arg) #1 {
-; CHECK-LABEL: define nofpclass(nan inf) float @ret_atan_negnormal_mode_ftpz_dapz
+; CHECK-LABEL: define nofpclass(nan inf zero psub pnorm) float @ret_atan_negnormal_mode_ftpz_dapz
; CHECK-SAME: (float nofpclass(nan inf zero sub pnorm) [[ARG:%.*]]) #[[ATTR3]] {
-; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan inf) float @llvm.atan.f32(float nofpclass(nan inf zero sub pnorm) [[ARG]]) #[[ATTR4]]
+; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan inf zero psub pnorm) float @llvm.atan.f32(float nofpclass(nan inf zero sub pnorm) [[ARG]]) #[[ATTR4]]
; CHECK-NEXT: ret float [[CALL]]
;
%call = call float @llvm.atan.f32(float %arg)
@@ -480,9 +501,9 @@ define float @ret_atan_negnormal_mode_ftpz_dapz(float nofpclass(nan inf zero sub
}
define float @ret_atan_negsubnormal_mode_dynamic_dynamic(float nofpclass(nan inf zero psub norm) %arg) #0 {
-; CHECK-LABEL: define nofpclass(nan inf) float @ret_atan_negsubnormal_mode_dynamic_dynamic
+; CHECK-LABEL: define nofpclass(nan inf zero psub pnorm) float @ret_atan_negsubnormal_mode_dynamic_dynamic
; CHECK-SAME: (float nofpclass(nan inf zero psub norm) [[ARG:%.*]]) #[[ATTR2]] {
-; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan inf) float @llvm.atan.f32(float nofpclass(nan inf zero psub norm) [[ARG]]) #[[ATTR4]]
+; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan inf zero psub pnorm) float @llvm.atan.f32(float nofpclass(nan inf zero psub norm) [[ARG]]) #[[ATTR4]]
; CHECK-NEXT: ret float [[CALL]]
;
%call = call float @llvm.atan.f32(float %arg)
@@ -490,9 +511,9 @@ define float @ret_atan_negsubnormal_mode_dynamic_dynamic(float nofpclass(nan inf
}
define float @ret_atan_negsubnormal_mode_ftpz_dapz(float nofpclass(nan inf zero psub norm) %arg) #1 {
-; CHECK-LABEL: define nofpclass(nan inf) float @ret_atan_negsubnormal_mode_ftpz_dapz
+; CHECK-LABEL: define nofpclass(nan inf zero psub pnorm) float @ret_atan_negsubnormal_mode_ftpz_dapz
; CHECK-SAME: (float nofpclass(nan inf zero psub norm) [[ARG:%.*]]) #[[ATTR3]] {
-; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan inf) float @llvm.atan.f32(float nofpclass(nan inf zero psub norm) [[ARG]]) #[[ATTR4]]
+; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan inf zero psub pnorm) float @llvm.atan.f32(float nofpclass(nan inf zero psub norm) [[ARG]]) #[[ATTR4]]
; CHECK-NEXT: ret float [[CALL]]
;
%call = call float @llvm.atan.f32(float %arg)
>From a332ea07ae847883874f558e02876f46af43b5f4 Mon Sep 17 00:00:00 2001
From: Youssef Wael <youssefwael.work at gmail.com>
Date: Thu, 8 Oct 2026 23:05:27 +0300
Subject: [PATCH 2/4] considering that subnormal can round to zeros
---
llvm/lib/Support/KnownFPClass.cpp | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/llvm/lib/Support/KnownFPClass.cpp b/llvm/lib/Support/KnownFPClass.cpp
index 97110a0fcd870..0fba42f287b12 100644
--- a/llvm/lib/Support/KnownFPClass.cpp
+++ b/llvm/lib/Support/KnownFPClass.cpp
@@ -951,17 +951,27 @@ KnownFPClass KnownFPClass::atan(const KnownFPClass &KnownSrc) {
Known.knownNot(fcInf);
// For non-zero numeric inputs, atan preserves the sign.
+ // A normal result can become normal or subnormal,
+ // and a subnormal result can become normal or subnormal
+ // or round to signed zero.
if (KnownSrc.isKnownNever(fcNegSubnormal | fcNegNormal | fcNegInf))
Known.knownNot(fcNegSubnormal | fcNegNormal);
if (KnownSrc.isKnownNever(fcPosSubnormal | fcPosNormal | fcPosInf))
Known.knownNot(fcPosSubnormal | fcPosNormal);
- // atan(-0.0) = -0.0 and atan(+0.0) = +0.0.
- if (KnownSrc.isKnownNever(fcNegZero))
+ // atan(-0.0) = -0.0.
+ // A negative subnormal can also round to -0.0, so -0.0 can only
+ // be ruled out when both negative zero and negative subnormal
+ // are impossible.
+ if (KnownSrc.isKnownNever(fcNegZero | fcNegSubnormal))
Known.knownNot(fcNegZero);
- if (KnownSrc.isKnownNever(fcPosZero))
+ // atan(+0.0) = +0.0.
+ // A positive subnormal can also round to +0.0, so +0.0 can only
+ // be ruled out when both positive zero and positive subnormal
+ // are impossible.
+ if (KnownSrc.isKnownNever(fcPosZero | fcPosSubnormal))
Known.knownNot(fcPosZero);
Known.propagateNonNaN(KnownSrc);
>From 000439d98792d192f83f94d1bf7140916af048cb Mon Sep 17 00:00:00 2001
From: Youssef Wael <youssefwael.work at gmail.com>
Date: Sat, 10 Oct 2026 19:09:37 +0300
Subject: [PATCH 3/4] [KnownFPClass] Add atan sign-preserving known-class
deduction
---
llvm/lib/Support/KnownFPClass.cpp | 23 +++++++----------------
1 file changed, 7 insertions(+), 16 deletions(-)
diff --git a/llvm/lib/Support/KnownFPClass.cpp b/llvm/lib/Support/KnownFPClass.cpp
index 0fba42f287b12..08b946ad5a82a 100644
--- a/llvm/lib/Support/KnownFPClass.cpp
+++ b/llvm/lib/Support/KnownFPClass.cpp
@@ -950,30 +950,21 @@ KnownFPClass KnownFPClass::atan(const KnownFPClass &KnownSrc) {
// atan is bounded to (-pi/2, pi/2), never Inf. atan(+-Inf) = +-pi/2 (finite).
Known.knownNot(fcInf);
- // For non-zero numeric inputs, atan preserves the sign.
- // A normal result can become normal or subnormal,
- // and a subnormal result can become normal or subnormal
- // or round to signed zero.
+ // Ruling out Subnormal/Normal from the result requires the
+ // input to never be finite-nonzero and never inf, since
+ // atan(+-inf) = +-pi/2
if (KnownSrc.isKnownNever(fcNegSubnormal | fcNegNormal | fcNegInf))
Known.knownNot(fcNegSubnormal | fcNegNormal);
if (KnownSrc.isKnownNever(fcPosSubnormal | fcPosNormal | fcPosInf))
Known.knownNot(fcPosSubnormal | fcPosNormal);
- // atan(-0.0) = -0.0.
- // A negative subnormal can also round to -0.0, so -0.0 can only
- // be ruled out when both negative zero and negative subnormal
- // are impossible.
- if (KnownSrc.isKnownNever(fcNegZero | fcNegSubnormal))
+ // -0.0 only ever arises from a negative-finite input (atan(-0.0) = -0.0,
+ // and a flushed negative subnormal may become -0.0). atan(-inf) is never
+ // -0.0, so this check does not need to exclude fcNegInf.
+ if (KnownSrc.isKnownNever(fcNegSubnormal | fcNegNormal | fcNegZero))
Known.knownNot(fcNegZero);
- // atan(+0.0) = +0.0.
- // A positive subnormal can also round to +0.0, so +0.0 can only
- // be ruled out when both positive zero and positive subnormal
- // are impossible.
- if (KnownSrc.isKnownNever(fcPosZero | fcPosSubnormal))
- Known.knownNot(fcPosZero);
-
Known.propagateNonNaN(KnownSrc);
return Known;
>From 4f4b772ea65163a61764a6a3fdbe646634e8d6b4 Mon Sep 17 00:00:00 2001
From: Youssef Wael <youssefwael.work at gmail.com>
Date: Sat, 10 Oct 2026 23:33:10 +0300
Subject: [PATCH 4/4] Improve atan negative zero inference
---
llvm/lib/Support/KnownFPClass.cpp | 7 +++---
.../Transforms/Attributor/nofpclass-trig.ll | 24 +++++++++----------
2 files changed, 15 insertions(+), 16 deletions(-)
diff --git a/llvm/lib/Support/KnownFPClass.cpp b/llvm/lib/Support/KnownFPClass.cpp
index 08b946ad5a82a..ccae3621f1e0c 100644
--- a/llvm/lib/Support/KnownFPClass.cpp
+++ b/llvm/lib/Support/KnownFPClass.cpp
@@ -959,10 +959,9 @@ KnownFPClass KnownFPClass::atan(const KnownFPClass &KnownSrc) {
if (KnownSrc.isKnownNever(fcPosSubnormal | fcPosNormal | fcPosInf))
Known.knownNot(fcPosSubnormal | fcPosNormal);
- // -0.0 only ever arises from a negative-finite input (atan(-0.0) = -0.0,
- // and a flushed negative subnormal may become -0.0). atan(-inf) is never
- // -0.0, so this check does not need to exclude fcNegInf.
- if (KnownSrc.isKnownNever(fcNegSubnormal | fcNegNormal | fcNegZero))
+ // atan(-0.0) = -0.0, and a negative subnormal may be flushed to -0.0.
+ // Negative normal values and -inf cannot produce -0.0.
+ if (KnownSrc.isKnownNever(fcNegSubnormal | fcNegZero))
Known.knownNot(fcNegZero);
Known.propagateNonNaN(KnownSrc);
diff --git a/llvm/test/Transforms/Attributor/nofpclass-trig.ll b/llvm/test/Transforms/Attributor/nofpclass-trig.ll
index 475277435b3ff..df38971402d9b 100644
--- a/llvm/test/Transforms/Attributor/nofpclass-trig.ll
+++ b/llvm/test/Transforms/Attributor/nofpclass-trig.ll
@@ -461,9 +461,9 @@ define float @ret_tan_nosnan(float nofpclass(snan) %arg) {
}
define float @ret_atan_negnormal_negsubnormal_mode_dynamic_dynamic(float nofpclass(nan inf zero psub pnorm) %arg) #0 {
-; CHECK-LABEL: define nofpclass(nan inf zero psub pnorm) float @ret_atan_negnormal_negsubnormal_mode_dynamic_dynamic
+; CHECK-LABEL: define nofpclass(nan inf psub pnorm) float @ret_atan_negnormal_negsubnormal_mode_dynamic_dynamic
; CHECK-SAME: (float nofpclass(nan inf zero psub pnorm) [[ARG:%.*]]) #[[ATTR2]] {
-; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan inf zero psub pnorm) float @llvm.atan.f32(float nofpclass(nan inf zero psub pnorm) [[ARG]]) #[[ATTR4]]
+; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan inf psub pnorm) float @llvm.atan.f32(float nofpclass(nan inf zero psub pnorm) [[ARG]]) #[[ATTR4]]
; CHECK-NEXT: ret float [[CALL]]
;
%call = call float @llvm.atan.f32(float %arg)
@@ -471,9 +471,9 @@ define float @ret_atan_negnormal_negsubnormal_mode_dynamic_dynamic(float nofpcla
}
define float @ret_atan_negnormal_negsubnormal_mode_ftpz_dapz(float nofpclass(nan inf zero psub pnorm) %arg) #1 {
-; CHECK-LABEL: define nofpclass(nan inf zero psub pnorm) float @ret_atan_negnormal_negsubnormal_mode_ftpz_dapz
+; CHECK-LABEL: define nofpclass(nan inf psub pnorm) float @ret_atan_negnormal_negsubnormal_mode_ftpz_dapz
; CHECK-SAME: (float nofpclass(nan inf zero psub pnorm) [[ARG:%.*]]) #[[ATTR3]] {
-; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan inf zero psub pnorm) float @llvm.atan.f32(float nofpclass(nan inf zero psub pnorm) [[ARG]]) #[[ATTR4]]
+; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan inf psub pnorm) float @llvm.atan.f32(float nofpclass(nan inf zero psub pnorm) [[ARG]]) #[[ATTR4]]
; CHECK-NEXT: ret float [[CALL]]
;
%call = call float @llvm.atan.f32(float %arg)
@@ -481,9 +481,9 @@ define float @ret_atan_negnormal_negsubnormal_mode_ftpz_dapz(float nofpclass(nan
}
define float @ret_atan_negnormal_mode_dynamic_dynamic(float nofpclass(nan inf zero sub pnorm) %arg) #0 {
-; CHECK-LABEL: define nofpclass(nan inf zero psub pnorm) float @ret_atan_negnormal_mode_dynamic_dynamic
+; CHECK-LABEL: define nofpclass(nan inf nzero psub pnorm) float @ret_atan_negnormal_mode_dynamic_dynamic
; CHECK-SAME: (float nofpclass(nan inf zero sub pnorm) [[ARG:%.*]]) #[[ATTR2]] {
-; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan inf zero psub pnorm) float @llvm.atan.f32(float nofpclass(nan inf zero sub pnorm) [[ARG]]) #[[ATTR4]]
+; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan inf nzero psub pnorm) float @llvm.atan.f32(float nofpclass(nan inf zero sub pnorm) [[ARG]]) #[[ATTR4]]
; CHECK-NEXT: ret float [[CALL]]
;
%call = call float @llvm.atan.f32(float %arg)
@@ -491,9 +491,9 @@ define float @ret_atan_negnormal_mode_dynamic_dynamic(float nofpclass(nan inf ze
}
define float @ret_atan_negnormal_mode_ftpz_dapz(float nofpclass(nan inf zero sub pnorm) %arg) #1 {
-; CHECK-LABEL: define nofpclass(nan inf zero psub pnorm) float @ret_atan_negnormal_mode_ftpz_dapz
+; CHECK-LABEL: define nofpclass(nan inf nzero psub pnorm) float @ret_atan_negnormal_mode_ftpz_dapz
; CHECK-SAME: (float nofpclass(nan inf zero sub pnorm) [[ARG:%.*]]) #[[ATTR3]] {
-; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan inf zero psub pnorm) float @llvm.atan.f32(float nofpclass(nan inf zero sub pnorm) [[ARG]]) #[[ATTR4]]
+; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan inf nzero psub pnorm) float @llvm.atan.f32(float nofpclass(nan inf zero sub pnorm) [[ARG]]) #[[ATTR4]]
; CHECK-NEXT: ret float [[CALL]]
;
%call = call float @llvm.atan.f32(float %arg)
@@ -501,9 +501,9 @@ define float @ret_atan_negnormal_mode_ftpz_dapz(float nofpclass(nan inf zero sub
}
define float @ret_atan_negsubnormal_mode_dynamic_dynamic(float nofpclass(nan inf zero psub norm) %arg) #0 {
-; CHECK-LABEL: define nofpclass(nan inf zero psub pnorm) float @ret_atan_negsubnormal_mode_dynamic_dynamic
+; CHECK-LABEL: define nofpclass(nan inf psub pnorm) float @ret_atan_negsubnormal_mode_dynamic_dynamic
; CHECK-SAME: (float nofpclass(nan inf zero psub norm) [[ARG:%.*]]) #[[ATTR2]] {
-; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan inf zero psub pnorm) float @llvm.atan.f32(float nofpclass(nan inf zero psub norm) [[ARG]]) #[[ATTR4]]
+; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan inf psub pnorm) float @llvm.atan.f32(float nofpclass(nan inf zero psub norm) [[ARG]]) #[[ATTR4]]
; CHECK-NEXT: ret float [[CALL]]
;
%call = call float @llvm.atan.f32(float %arg)
@@ -511,9 +511,9 @@ define float @ret_atan_negsubnormal_mode_dynamic_dynamic(float nofpclass(nan inf
}
define float @ret_atan_negsubnormal_mode_ftpz_dapz(float nofpclass(nan inf zero psub norm) %arg) #1 {
-; CHECK-LABEL: define nofpclass(nan inf zero psub pnorm) float @ret_atan_negsubnormal_mode_ftpz_dapz
+; CHECK-LABEL: define nofpclass(nan inf psub pnorm) float @ret_atan_negsubnormal_mode_ftpz_dapz
; CHECK-SAME: (float nofpclass(nan inf zero psub norm) [[ARG:%.*]]) #[[ATTR3]] {
-; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan inf zero psub pnorm) float @llvm.atan.f32(float nofpclass(nan inf zero psub norm) [[ARG]]) #[[ATTR4]]
+; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan inf psub pnorm) float @llvm.atan.f32(float nofpclass(nan inf zero psub norm) [[ARG]]) #[[ATTR4]]
; CHECK-NEXT: ret float [[CALL]]
;
%call = call float @llvm.atan.f32(float %arg)
More information about the llvm-commits
mailing list