[llvm] 41dd02e - ValueTracking: Teach isKnownNeverInfinity about min/max functions
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Tue Dec 20 09:53:06 PST 2022
Author: Matt Arsenault
Date: 2022-12-20T12:52:59-05:00
New Revision: 41dd02e8575144e576e9ad111bbdc3f856c58445
URL: https://github.com/llvm/llvm-project/commit/41dd02e8575144e576e9ad111bbdc3f856c58445
DIFF: https://github.com/llvm/llvm-project/commit/41dd02e8575144e576e9ad111bbdc3f856c58445.diff
LOG: ValueTracking: Teach isKnownNeverInfinity about min/max functions
Added:
Modified:
llvm/lib/Analysis/ValueTracking.cpp
llvm/test/Transforms/InstSimplify/floating-point-compare.ll
Removed:
################################################################################
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index c25506e5030f..4181831c284c 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -3822,6 +3822,12 @@ bool llvm::isKnownNeverInfinity(const Value *V, const TargetLibraryInfo *TLI,
case Intrinsic::fptrunc_round:
// Requires knowing the value range.
return false;
+ case Intrinsic::minnum:
+ case Intrinsic::maxnum:
+ case Intrinsic::minimum:
+ case Intrinsic::maximum:
+ return isKnownNeverInfinity(Inst->getOperand(0), TLI, Depth + 1) &&
+ isKnownNeverInfinity(Inst->getOperand(1), TLI, Depth + 1);
default:
break;
}
diff --git a/llvm/test/Transforms/InstSimplify/floating-point-compare.ll b/llvm/test/Transforms/InstSimplify/floating-point-compare.ll
index a2628d5c777d..019069ae14d1 100644
--- a/llvm/test/Transforms/InstSimplify/floating-point-compare.ll
+++ b/llvm/test/Transforms/InstSimplify/floating-point-compare.ll
@@ -1663,11 +1663,7 @@ define i1 @isKnownNeverInfinity_ceil_x86_fp80(x86_fp80 %x) {
define i1 @isKnownNeverInfinity_minnum(double %x, double %y) {
; CHECK-LABEL: @isKnownNeverInfinity_minnum(
-; CHECK-NEXT: [[NINF_X:%.*]] = fadd ninf double [[X:%.*]], 1.000000e+00
-; CHECK-NEXT: [[NINF_Y:%.*]] = fadd ninf double [[Y:%.*]], 1.000000e+00
-; CHECK-NEXT: [[OP:%.*]] = call double @llvm.minnum.f64(double [[NINF_X]], double [[NINF_Y]])
-; CHECK-NEXT: [[CMP:%.*]] = fcmp une double [[OP]], 0x7FF0000000000000
-; CHECK-NEXT: ret i1 [[CMP]]
+; CHECK-NEXT: ret i1 true
;
%ninf.x = fadd ninf double %x, 1.0
%ninf.y = fadd ninf double %y, 1.0
@@ -1706,11 +1702,7 @@ declare double @llvm.minnum.f64(double, double)
define i1 @isKnownNeverInfinity_maxnum(double %x, double %y) {
; CHECK-LABEL: @isKnownNeverInfinity_maxnum(
-; CHECK-NEXT: [[NINF_X:%.*]] = fadd ninf double [[X:%.*]], 1.000000e+00
-; CHECK-NEXT: [[NINF_Y:%.*]] = fadd ninf double [[Y:%.*]], 1.000000e+00
-; CHECK-NEXT: [[OP:%.*]] = call double @llvm.maxnum.f64(double [[NINF_X]], double [[NINF_Y]])
-; CHECK-NEXT: [[CMP:%.*]] = fcmp une double [[OP]], 0x7FF0000000000000
-; CHECK-NEXT: ret i1 [[CMP]]
+; CHECK-NEXT: ret i1 true
;
%ninf.x = fadd ninf double %x, 1.0
%ninf.y = fadd ninf double %y, 1.0
@@ -1749,11 +1741,7 @@ declare double @llvm.maxnum.f64(double, double)
define i1 @isKnownNeverInfinity_minimum(double %x, double %y) {
; CHECK-LABEL: @isKnownNeverInfinity_minimum(
-; CHECK-NEXT: [[NINF_X:%.*]] = fadd ninf double [[X:%.*]], 1.000000e+00
-; CHECK-NEXT: [[NINF_Y:%.*]] = fadd ninf double [[Y:%.*]], 1.000000e+00
-; CHECK-NEXT: [[OP:%.*]] = call double @llvm.minimum.f64(double [[NINF_X]], double [[NINF_Y]])
-; CHECK-NEXT: [[CMP:%.*]] = fcmp une double [[OP]], 0x7FF0000000000000
-; CHECK-NEXT: ret i1 [[CMP]]
+; CHECK-NEXT: ret i1 true
;
%ninf.x = fadd ninf double %x, 1.0
%ninf.y = fadd ninf double %y, 1.0
@@ -1792,11 +1780,7 @@ declare double @llvm.minimum.f64(double, double)
define i1 @isKnownNeverInfinity_maximum(double %x, double %y) {
; CHECK-LABEL: @isKnownNeverInfinity_maximum(
-; CHECK-NEXT: [[NINF_X:%.*]] = fadd ninf double [[X:%.*]], 1.000000e+00
-; CHECK-NEXT: [[NINF_Y:%.*]] = fadd ninf double [[Y:%.*]], 1.000000e+00
-; CHECK-NEXT: [[OP:%.*]] = call double @llvm.maximum.f64(double [[NINF_X]], double [[NINF_Y]])
-; CHECK-NEXT: [[CMP:%.*]] = fcmp une double [[OP]], 0x7FF0000000000000
-; CHECK-NEXT: ret i1 [[CMP]]
+; CHECK-NEXT: ret i1 true
;
%ninf.x = fadd ninf double %x, 1.0
%ninf.y = fadd ninf double %y, 1.0
More information about the llvm-commits
mailing list