<!DOCTYPE html><html><head><title></title><style type="text/css">p.MsoNormal,p.MsoNoSpacing{margin:0}</style></head><body><div>This is not correct. computeKnownFPClass only returns known FP classes up to poison, and freeze poison can have any FP class.<br></div><div><br></div><div>Nikita<br></div><div><br></div><div>On Fri, Apr 14, 2023, at 23:53, Matt Arsenault via llvm-commits wrote:<br></div><blockquote type="cite" id="qt" style=""><div><br></div><div>Author: Matt Arsenault<br></div><div>Date: 2023-04-14T17:53:41-04:00<br></div><div>New Revision: 2c8d0048f03d054f13909a26f959ef95b2a0a4de<br></div><div><br></div><div>URL: <a href="https://github.com/llvm/llvm-project/commit/2c8d0048f03d054f13909a26f959ef95b2a0a4de">https://github.com/llvm/llvm-project/commit/2c8d0048f03d054f13909a26f959ef95b2a0a4de</a><br></div><div>DIFF: <a href="https://github.com/llvm/llvm-project/commit/2c8d0048f03d054f13909a26f959ef95b2a0a4de.diff">https://github.com/llvm/llvm-project/commit/2c8d0048f03d054f13909a26f959ef95b2a0a4de.diff</a><br></div><div><br></div><div>LOG: ValueTracking: Handle freeze in computeKnownFPClass<br></div><div><br></div><div>Added: <br></div><div>    <br></div><div><br></div><div>Modified: <br></div><div>    llvm/lib/Analysis/ValueTracking.cpp<br></div><div>    llvm/test/Transforms/Attributor/nofpclass.ll<br></div><div><br></div><div>Removed: <br></div><div>    <br></div><div><br></div><div><br></div><div>################################################################################<br></div><div>diff  --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp<br></div><div>index cad331b222b0..1c0dbba4d111 100644<br></div><div>--- a/llvm/lib/Analysis/ValueTracking.cpp<br></div><div>+++ b/llvm/lib/Analysis/ValueTracking.cpp<br></div><div>@@ -4625,7 +4625,8 @@ void computeKnownFPClass(const Value *V, const APInt &DemandedElts,<br></div><div> <br></div><div>     break;<br></div><div>   }<br></div><div>-  case Instruction::ExtractValue: {<br></div><div>+  case Instruction::ExtractValue:<br></div><div>+  case Instruction::Freeze: {<br></div><div>     computeKnownFPClass(Op->getOperand(0), DemandedElts, InterestedClasses,<br></div><div>                         Known, Depth + 1, Q, TLI);<br></div><div>     break;<br></div><div><br></div><div>diff  --git a/llvm/test/Transforms/Attributor/nofpclass.ll b/llvm/test/Transforms/Attributor/nofpclass.ll<br></div><div>index 52c9c2e12fdb..6ac9baf57eac 100644<br></div><div>--- a/llvm/test/Transforms/Attributor/nofpclass.ll<br></div><div>+++ b/llvm/test/Transforms/Attributor/nofpclass.ll<br></div><div>@@ -884,3 +884,27 @@ define float @returned_extractvalue([4 x float] nofpclass(nan) %array) {<br></div><div>   %extract = extractvalue [4 x float] %array, 0<br></div><div>   ret float %extract<br></div><div>}<br></div><div>+<br></div><div>+define float @return_nofpclass_freeze_nan_arg(float nofpclass(nan) %arg) {<br></div><div>+; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)<br></div><div>+; CHECK-LABEL: define noundef nofpclass(nan) float @return_nofpclass_freeze_nan_arg<br></div><div>+; CHECK-SAME: (float nofpclass(nan) [[ARG:%.*]]) #[[ATTR2]] {<br></div><div>+; CHECK-NEXT:    [[FREEZE:%.*]] = freeze float [[ARG]]<br></div><div>+; CHECK-NEXT:    ret float [[FREEZE]]<br></div><div>+;<br></div><div>+  %freeze = freeze float %arg<br></div><div>+  ret float %freeze<br></div><div>+}<br></div><div>+<br></div><div>+define float @return_nofpclass_extractelement_freeze_pinf_arg(<2 x float> nofpclass(pinf) %arg) {<br></div><div>+; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn memory(none)<br></div><div>+; CHECK-LABEL: define noundef nofpclass(pinf) float @return_nofpclass_extractelement_freeze_pinf_arg<br></div><div>+; CHECK-SAME: (<2 x float> nofpclass(pinf) [[ARG:%.*]]) #[[ATTR2]] {<br></div><div>+; CHECK-NEXT:    [[FREEZE:%.*]] = freeze <2 x float> [[ARG]]<br></div><div>+; CHECK-NEXT:    [[ELT:%.*]] = extractelement <2 x float> [[FREEZE]], i32 0<br></div><div>+; CHECK-NEXT:    ret float [[ELT]]<br></div><div>+;<br></div><div>+  %freeze = freeze <2 x float> %arg<br></div><div>+  %elt = extractelement <2 x float> %freeze, i32 0<br></div><div>+  ret float %elt<br></div><div>+}<br></div><div><br></div><div><br></div><div>        <br></div><div>_______________________________________________<br></div><div>llvm-commits mailing list<br></div><div><a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br></div><div><a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br></div><div><br></div></blockquote><div><br></div></body></html>