[PATCH] D127854: [InstCombine] Use known bits to determine exact int->fp cast
Allen zhong via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 17 06:49:29 PDT 2022
Allen 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);
----------------
spatel wrote:
> 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
Done, thanks!
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D127854/new/
https://reviews.llvm.org/D127854
More information about the llvm-commits
mailing list