[llvm] 1a99df9 - ValueTracking: Add tests for fcmpToClassTest for fcmp ole/ugt inf
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 22 21:11:15 PST 2024
Author: Matt Arsenault
Date: 2024-01-23T12:10:40+07:00
New Revision: 1a99df9f3dfdfd6ff3a3d46113c9e0e9d55ad892
URL: https://github.com/llvm/llvm-project/commit/1a99df9f3dfdfd6ff3a3d46113c9e0e9d55ad892
DIFF: https://github.com/llvm/llvm-project/commit/1a99df9f3dfdfd6ff3a3d46113c9e0e9d55ad892.diff
LOG: ValueTracking: Add tests for fcmpToClassTest for fcmp ole/ugt inf
This catches an assertion in a recommit of
dc3faf0ed0e3f1ea9e435a006167d9649f865da1
Added:
Modified:
llvm/test/Transforms/Attributor/nofpclass-implied-by-fcmp.ll
Removed:
################################################################################
diff --git a/llvm/test/Transforms/Attributor/nofpclass-implied-by-fcmp.ll b/llvm/test/Transforms/Attributor/nofpclass-implied-by-fcmp.ll
index 8c7d58bf43d6cf2..3984dd9a25c8e0b 100644
--- a/llvm/test/Transforms/Attributor/nofpclass-implied-by-fcmp.ll
+++ b/llvm/test/Transforms/Attributor/nofpclass-implied-by-fcmp.ll
@@ -2395,6 +2395,110 @@ define float @assume_oeq_smallest_normal_known_pos(float nofpclass(ninf nsub nno
ret float %arg
}
+;---------------------------------------------------------------------
+; compare to inf
+;---------------------------------------------------------------------
+
+define float @assume_ole_pinf(float %arg) {
+; CHECK-LABEL: define float @assume_ole_pinf(
+; CHECK-SAME: float returned [[ARG:%.*]]) #[[ATTR3]] {
+; CHECK-NEXT: [[FCMP:%.*]] = fcmp ole float [[ARG]], 0x7FF0000000000000
+; CHECK-NEXT: call void @llvm.assume(i1 noundef [[FCMP]]) #[[ATTR5]]
+; CHECK-NEXT: ret float [[ARG]]
+;
+ %fcmp = fcmp ole float %arg, 0x7FF0000000000000
+ call void @llvm.assume(i1 %fcmp)
+ ret float %arg
+}
+
+define float @assume_ole_ninf(float %arg) {
+; CHECK-LABEL: define float @assume_ole_ninf(
+; CHECK-SAME: float returned [[ARG:%.*]]) #[[ATTR3]] {
+; CHECK-NEXT: [[FCMP:%.*]] = fcmp ole float [[ARG]], 0xFFF0000000000000
+; CHECK-NEXT: call void @llvm.assume(i1 noundef [[FCMP]]) #[[ATTR5]]
+; CHECK-NEXT: ret float [[ARG]]
+;
+ %fcmp = fcmp ole float %arg, 0xFFF0000000000000
+ call void @llvm.assume(i1 %fcmp)
+ ret float %arg
+}
+
+define float @assume_ugt_pinf(float %arg) {
+; CHECK-LABEL: define float @assume_ugt_pinf(
+; CHECK-SAME: float returned [[ARG:%.*]]) #[[ATTR3]] {
+; CHECK-NEXT: [[FCMP:%.*]] = fcmp ugt float [[ARG]], 0x7FF0000000000000
+; CHECK-NEXT: call void @llvm.assume(i1 noundef [[FCMP]]) #[[ATTR5]]
+; CHECK-NEXT: ret float [[ARG]]
+;
+ %fcmp = fcmp ugt float %arg, 0x7FF0000000000000
+ call void @llvm.assume(i1 %fcmp)
+ ret float %arg
+}
+
+define float @assume_ugt_ninf(float %arg) {
+; CHECK-LABEL: define float @assume_ugt_ninf(
+; CHECK-SAME: float returned [[ARG:%.*]]) #[[ATTR3]] {
+; CHECK-NEXT: [[FCMP:%.*]] = fcmp ugt float [[ARG]], 0xFFF0000000000000
+; CHECK-NEXT: call void @llvm.assume(i1 noundef [[FCMP]]) #[[ATTR5]]
+; CHECK-NEXT: ret float [[ARG]]
+;
+ %fcmp = fcmp ugt float %arg, 0xFFF0000000000000
+ call void @llvm.assume(i1 %fcmp)
+ ret float %arg
+}
+
+define float @assume_fabs_ole_pinf(float %arg) {
+; CHECK-LABEL: define nofpclass(ninf nzero nsub nnorm) float @assume_fabs_ole_pinf(
+; CHECK-SAME: float returned nofpclass(ninf nzero nsub nnorm) [[ARG:%.*]]) #[[ATTR3]] {
+; CHECK-NEXT: [[FABS:%.*]] = call float @llvm.fabs.f32(float [[ARG]]) #[[ATTR4]]
+; CHECK-NEXT: [[FCMP:%.*]] = fcmp ole float [[FABS]], 0x7FF0000000000000
+; CHECK-NEXT: call void @llvm.assume(i1 noundef [[FCMP]]) #[[ATTR5]]
+; CHECK-NEXT: ret float [[ARG]]
+;
+ %fabs = call float @llvm.fabs.f32(float %arg)
+ %fcmp = fcmp ole float %fabs, 0x7FF0000000000000
+ call void @llvm.assume(i1 %fcmp)
+ ret float %arg
+}
+
+define float @assume_fabs_ole_ninf(float %arg) {
+; CHECK-LABEL: define nofpclass(ninf nzero nsub nnorm) float @assume_fabs_ole_ninf(
+; CHECK-SAME: float returned nofpclass(ninf nzero nsub nnorm) [[ARG:%.*]]) #[[ATTR3]] {
+; CHECK-NEXT: call void @llvm.assume(i1 noundef false) #[[ATTR5]]
+; CHECK-NEXT: ret float [[ARG]]
+;
+ %fabs = call float @llvm.fabs.f32(float %arg)
+ %fcmp = fcmp ole float %fabs, 0xFFF0000000000000
+ call void @llvm.assume(i1 %fcmp)
+ ret float %arg
+}
+
+define float @assume_fabs_ugt_pinf(float %arg) {
+; CHECK-LABEL: define nofpclass(ninf nzero nsub nnorm) float @assume_fabs_ugt_pinf(
+; CHECK-SAME: float returned nofpclass(ninf nzero nsub nnorm) [[ARG:%.*]]) #[[ATTR3]] {
+; CHECK-NEXT: [[FABS:%.*]] = call float @llvm.fabs.f32(float [[ARG]]) #[[ATTR4]]
+; CHECK-NEXT: [[FCMP:%.*]] = fcmp ugt float [[FABS]], 0x7FF0000000000000
+; CHECK-NEXT: call void @llvm.assume(i1 noundef [[FCMP]]) #[[ATTR5]]
+; CHECK-NEXT: ret float [[ARG]]
+;
+ %fabs = call float @llvm.fabs.f32(float %arg)
+ %fcmp = fcmp ugt float %fabs, 0x7FF0000000000000
+ call void @llvm.assume(i1 %fcmp)
+ ret float %arg
+}
+
+define float @assume_fabs_ugt_ninf(float %arg) {
+; CHECK-LABEL: define nofpclass(ninf nzero nsub nnorm) float @assume_fabs_ugt_ninf(
+; CHECK-SAME: float returned nofpclass(ninf nzero nsub nnorm) [[ARG:%.*]]) #[[ATTR3]] {
+; CHECK-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR5]]
+; CHECK-NEXT: ret float [[ARG]]
+;
+ %fabs = call float @llvm.fabs.f32(float %arg)
+ %fcmp = fcmp ugt float %fabs, 0xFFF0000000000000
+ call void @llvm.assume(i1 %fcmp)
+ ret float %arg
+}
+
;---------------------------------------------------------------------
; fcmp false
;---------------------------------------------------------------------
More information about the llvm-commits
mailing list