[LLVMdev] Convert fdiv - X/Y -> X*1/Y

Chad Rosier chad.rosier at gmail.com
Thu Aug 8 10:12:14 PDT 2013


It is the very same bug.

On Thu, Aug 8, 2013 at 1:05 PM, Benjamin Kramer <benny.kra at gmail.com> wrote:

>
> On 08.08.2013, at 18:25, Chad Rosier <chad.rosier at gmail.com> wrote:
>
> > I would like to transform X/Y -> X*1/Y.  Specifically, I would like to
> convert:
> >
> > define void @t1a(double %a, double %b, double %d) {
> > entry:
> >   %div = fdiv fast double %a, %d
> >   %div1 = fdiv fast double %b, %d
> >   %call = tail call i32 @foo(double %div, double %div1)
> >   ret void
> > }
> >
> > to:
> >
> > define void @t1b(double %a, double %b, double %d) {
> > entry:
> >   %div = fdiv fast double 1.000000e+00, %d
> >   %mul = fmul fast double %div, %a
> >   %mul1 = fmul fast double %div, %b
> >   %call = tail call i32 @foo(double %mul, double %mul1)
> >   ret void
> > }
> >
> > Is such a transformation best done as a (target-specific) DAG combine?
> >
> > A similar instcombine already exists for the X/C->X*1/C case (see the
> CvtFDivConstToReciprocal function in InstCombineMlDivRem.cpp), but I don't
> believe the above can be done as an instcombine as it creates a new
> instruction (in addition to replacing the original).  Also, I only want to
> perform the transformation if there are multiple uses of 1/Y (like in my
> test case).  Otherwise, the transformation replaces a fdiv with a fdiv+fmul
> pair, which I doubt would be profitable.
> >
> > FWIW, I'm also pretty sure this combine requires -fast-math.
> >
> > Can someone point me in the right direction?
>
> Isn't this http://llvm.org/bugs/show_bug.cgi?id=16218 ? I posted a patch
> there but never had the time to finish it.
>
> - Ben
>
> >
> >  Thanks,
> >   Chad
> > _______________________________________________
> > LLVM Developers mailing list
> > LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130808/414f75ab/attachment.html>


More information about the llvm-dev mailing list