[llvm-dev] Working on FP SCEV Analysis
Hal Finkel via llvm-dev
llvm-dev at lists.llvm.org
Mon May 16 18:31:31 PDT 2016
----- Original Message -----
> From: "Michael Zolotukhin" <mzolotukhin at apple.com>
> To: "Hal Finkel" <hfinkel at anl.gov>
> Cc: "Sanjoy Das" <sanjoy at playingwithpointers.com>, "llvm-dev"
> <llvm-dev at lists.llvm.org>, "Michael V Zolotukhin"
> <michael.v.zolotukhin at intel.com>, "tyler nowicki"
> <tyler.nowicki at gmail.com>
> Sent: Monday, May 16, 2016 8:20:05 PM
> Subject: Re: [llvm-dev] Working on FP SCEV Analysis
> > On May 16, 2016, at 5:35 PM, Hal Finkel via llvm-dev <
> > llvm-dev at lists.llvm.org > wrote:
>
> > ----- Original Message -----
>
> > > From: "Sanjoy Das via llvm-dev" < llvm-dev at lists.llvm.org >
> >
>
> > > To: escha at apple.com
> >
>
> > > Cc: "llvm-dev" < llvm-dev at lists.llvm.org >, "Michael V
> > > Zolotukhin"
> > > <
> > > michael.v.zolotukhin at intel.com >
> >
>
> > > Sent: Monday, May 16, 2016 7:31:20 PM
> >
>
> > > Subject: Re: [llvm-dev] Working on FP SCEV Analysis
> >
>
> > > Hi Escha,
> >
>
> > > via llvm-dev wrote:
> >
>
> > > > One thought I’ve had about this in the past —
> > >
> >
>
> > > > SCEV is useful for proving two expressions are equivalent (in
> > >
> >
>
> > > > general,
> > >
> >
>
> > > > not just specifically for loop induction variables). This gets
> > > > a
> > >
> >
>
> > > > little
> > >
> >
>
> > > > bit trickier with fast-math; for example, suppose two
> > > > expressions
> > >
> >
>
> > > > are
> > >
> >
>
> > > > equivalent, but *only* with reassociativity allowed?
> > >
> >
>
> > > This isn't too different from "sext(a + b) == sext(a) + sext(b)
> > > only
> >
>
> > > if the addition is nsw".
> >
>
> > > However, it wasn't clear to me from the lang-ref what the
> > > fastmath
> >
>
> > > flags really mean. What is the semantics of a program that
> > > computes
> >
>
> > > ((a +fast b) +fast c) when ((a + b) + c) != (a + (b + c))?
> >
>
> > This is often true, and it is neither UB nor poison. The user has
> > given the compiler the freedom to choose whatever the compiler
> > decides will be most-efficient to compute. "fast math" is an odd
> > concept in that sense. It is giving the compiler the freedom to
> > change the program semantics to some extent.
>
> It’s possible to make an infinite loop finite with fast math if the
> primary IV is float. Is it acceptable behavior too? What I mean is
> that if we have
> for (float i = 0.0; i < HUGE_FLOAT_NUMBER; i += 0.5) {
> ...
> }
> we might never reach HUGE_FLOAT_NUMBER, as at some point i+1.0 = i in
> float (or am I totally wrong here?). However, when analyzing this
> loop, we might find its trip count to be exactly
> HUGE_FLOAT_NUMBER*2. There are all kinds of odd stuff with floats in
> this area, but probably if ‘-ffast-math’ is provided, we’re fine.
Great question. So, if I paraphrase the intent of "fast math" to be, "I'm only thinking about these floating-point numbers as real numbers, you can do the same", then I think the answer to your question is yes. Furthermore, that would certainly speed things up. ;)
> I’m also very interested in specific cases we want to catch here. In
> the past Tyler (CCed) looked into this problem, but as far as I
> remember we decided that complexity/gains ratio was too low.
> Basically, I anticipate that the code to support this in SCEV will
> be at least as sophisticated as for integers, but in contrast to
> integers FP induction variables are much rarer in real world
> programs, at least to my impression.
To be honest, I don't think that loops with a floating-point reduction variable, written as the loop counter, is common or worth much dedicated effort. I have seen this in real code, but it normally comes from people trying (perhaps too hard) to work around integer register pressure problems. The case that Elena presented, however:
> float fp_inc;
>
> float x = init;
> for (int i=0;i<N;i++){
> A[i] = x;
> x += fp_inc; // Loop invariant variable or constant
> }
is not uncommon. Being able to do something intelligent with this is worthwhile.
-Hal
> Thanks,
> Michael
> > -Hal
>
> > > Does it
> >
>
> > > have UB (in which case we can't hoist fastmath arithmetic) or is
> > > it
> >
>
> > > more like poison? Depending on the answer, for fastmath we can
> >
>
> > > considering doing what we do today for nuw/nsw (which has its own
> > > set
> >
>
> > > of issues, but at least wouldn't require us to start from
> > > scratch).
> >
>
> > > -- Sanjoy
> >
>
> > > _______________________________________________
> >
>
> > > LLVM Developers mailing list
> >
>
> > > llvm-dev at lists.llvm.org
> >
>
> > > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
> >
>
> > --
>
> > Hal Finkel
>
> > Assistant Computational Scientist
>
> > Leadership Computing Facility
>
> > Argonne National Laboratory
>
> > _______________________________________________
>
> > LLVM Developers mailing list
>
> > llvm-dev at lists.llvm.org
>
> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
--
Hal Finkel
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160516/d5c09f7a/attachment.html>
More information about the llvm-dev
mailing list