[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