[llvm] 2c8d004 - ValueTracking: Handle freeze in computeKnownFPClass
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 14 14:59:52 PDT 2023
This is not correct. computeKnownFPClass only returns known FP classes up to poison, and freeze poison can have any FP class.
Nikita
On Fri, Apr 14, 2023, at 23:53, Matt Arsenault via llvm-commits wrote:
>
> 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
> +}
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230414/04d344f0/attachment-0001.html>
More information about the llvm-commits
mailing list