[llvm] 2c8d004 - ValueTracking: Handle freeze in computeKnownFPClass
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 14 14:53:47 PDT 2023
Author: Matt Arsenault
Date: 2023-04-14T17:53:41-04:00
New Revision: 2c8d0048f03d054f13909a26f959ef95b2a0a4de
URL: https://github.com/llvm/llvm-project/commit/2c8d0048f03d054f13909a26f959ef95b2a0a4de
DIFF: https://github.com/llvm/llvm-project/commit/2c8d0048f03d054f13909a26f959ef95b2a0a4de.diff
LOG: ValueTracking: Handle freeze in computeKnownFPClass
Added:
Modified:
llvm/lib/Analysis/ValueTracking.cpp
llvm/test/Transforms/Attributor/nofpclass.ll
Removed:
################################################################################
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index cad331b222b0..1c0dbba4d111 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -4625,7 +4625,8 @@ void computeKnownFPClass(const Value *V, const APInt &DemandedElts,
break;
}
- case Instruction::ExtractValue: {
+ case Instruction::ExtractValue:
+ case Instruction::Freeze: {
computeKnownFPClass(Op->getOperand(0), DemandedElts, InterestedClasses,
Known, Depth + 1, Q, TLI);
break;
diff --git a/llvm/test/Transforms/Attributor/nofpclass.ll b/llvm/test/Transforms/Attributor/nofpclass.ll
index 52c9c2e12fdb..6ac9baf57eac 100644
--- a/llvm/test/Transforms/Attributor/nofpclass.ll
+++ b/llvm/test/Transforms/Attributor/nofpclass.ll
@@ -884,3 +884,27 @@ define float @returned_extractvalue([4 x float] nofpclass(nan) %array) {
%extract = extractvalue [4 x float] %array, 0
ret float %extract
}
+
+define float @return_nofpclass_freeze_nan_arg(float nofpclass(nan) %arg) {
+; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
+; CHECK-LABEL: define noundef nofpclass(nan) float @return_nofpclass_freeze_nan_arg
+; CHECK-SAME: (float nofpclass(nan) [[ARG:%.*]]) #[[ATTR2]] {
+; CHECK-NEXT: [[FREEZE:%.*]] = freeze float [[ARG]]
+; CHECK-NEXT: ret float [[FREEZE]]
+;
+ %freeze = freeze float %arg
+ ret float %freeze
+}
+
+define float @return_nofpclass_extractelement_freeze_pinf_arg(<2 x float> nofpclass(pinf) %arg) {
+; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)
+; CHECK-LABEL: define noundef nofpclass(pinf) float @return_nofpclass_extractelement_freeze_pinf_arg
+; CHECK-SAME: (<2 x float> nofpclass(pinf) [[ARG:%.*]]) #[[ATTR2]] {
+; CHECK-NEXT: [[FREEZE:%.*]] = freeze <2 x float> [[ARG]]
+; CHECK-NEXT: [[ELT:%.*]] = extractelement <2 x float> [[FREEZE]], i32 0
+; CHECK-NEXT: ret float [[ELT]]
+;
+ %freeze = freeze <2 x float> %arg
+ %elt = extractelement <2 x float> %freeze, i32 0
+ ret float %elt
+}
More information about the llvm-commits
mailing list