[PATCH] D127854: [InstCombine] Use known bits to determine exact int->fp cast

Sanjay Patel via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Jun 17 06:21:01 PDT 2022


spatel added inline comments.


================
Comment at: llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp:1945
     auto *FPCast = cast<CastInst>(Src);
-    if (isKnownExactCastIntToFP(*FPCast))
+    if (isKnownExactCastIntToFP(*FPCast, *this))
       return CastInst::Create(FPCast->getOpcode(), FPCast->getOperand(0), Ty);
----------------
Allen wrote:
> spatel wrote:
> > We should have at least one test providing coverage for this path (and fpext too?). 
> > 
> > IIUC, this patch will improve a case like this:
> > 
> > ```
> > define half @masked_int_to_fp_trunc(i32 %A) {
> >   %m = and i32 %A, 16777215
> >   %B = sitofp i32 %m to float
> >   %C = fptrunc float %B to half
> >   ret half %C
> > }
> > 
> > ```
> > But we don't actually need a mask:
> > https://alive2.llvm.org/ce/z/iaEX2i
> > ...so the fold conditions still aren't quite right.
> hi @spatel, I think the case in your link https://alive2.llvm.org/ce/z/iaEX2i is related to another top, maybe make use of the fptrunc?
> 
> * In this patch, we hope fold the case
> ```
>   %m = and i25 %A, smallMaskValue
>   %B = uitofp i25 %m to float
>   %C = fptoui float %B to i25
> ```
> 
> * base on the bt we can see, it has both FPToUI and FPtoI.
> ```
> #0  isKnownExactCastIntToFP (I=..., IC=...)
>     at /home/zhongyunde/llvm-project-init-dev_12x/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp:1762
> #1  0x0000aaaaae7ee18c in llvm::InstCombinerImpl::foldItoFPtoI (this=0xffffffffbce0, FI=...)
>     at /home/zhongyunde/llvm-project-init-dev_12x/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp:1986
> #2  0x0000aaaaae7ee398 in llvm::InstCombinerImpl::visitFPToUI (this=0xffffffffbce0, FI=...)
>     at /home/zhongyunde/llvm-project-init-dev_12x/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp:2011
> ```
I understand that we are not optimizing ideally for this pattern, but that's not my point. 
These kinds of transforms are hard to get right (see for example D124692). 
This patch affects 3 caller code paths, so I'd like to have tests that provide some coverage for those paths.
Please rebase with test diffs after:
a5040860412f


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D127854/new/

https://reviews.llvm.org/D127854



More information about the llvm-commits mailing list