[llvm-dev] Wrong code bug after GVN/PRE?
Philip Reames via llvm-dev
llvm-dev at lists.llvm.org
Fri Jan 20 15:19:47 PST 2017
If someone can produce an *IR* reproducer which they believe is
incorrect, I'm happy to take a look at the PRE code. I will not have
the time to reproduce this from C or work through the interaction of
other passes; I will only look at this if there is a bug with PRE
specific IR reproducer attached.
Philip
On 01/16/2017 10:14 AM, Daniel Berlin via llvm-dev wrote:
>
>
> On Mon, Jan 16, 2017 at 2:46 AM, Mikael Holmén
> <mikael.holmen at ericsson.com <mailto:mikael.holmen at ericsson.com>> wrote:
>
> Hi,
>
> On 01/13/2017 10:29 PM, Daniel Berlin wrote:
>
> Yeah, there's a lot of things this could be.
>
> On the memdep side:
> Note that memdep is not actually properly updated in all cases
> by most
> passes that claim to not invalidate it (they don't invalidate
> dependent
> pointers, only pointers they directly touch).
>
> There's already a bug filed about this.
>
>
> You mean
> https://llvm.org/bugs/show_bug.cgi?id=27740
> <https://llvm.org/bugs/show_bug.cgi?id=27740>
> ?
>
> Among others.
>
>
>
> So far we've only seen
> missed-opt, not wrong code from this.
> But it should be possible to generate wrong code bugs with it
> (if you
> place the load/store in a place that invalidates the cached
> dependent
> result) , so i wonder if this is one.
>
>
> Any idea what to do about it?
>
> It depends on where the real bug is.
>
>
> You filed a reproducer that does not require running the other passes
> first, which means it's either just a bug in PRE, or a bug in memdep.
>
> If i was a betting man, i'd bet on PRE and it's inter-iteration pre
> attempts.
> Staring at this case for a second, my money is on the following happening.
>
> 1. PRE starts by asking if the value of step[i] where i == 0 is fully
> available in all preds
> 2. PHITransaddr get it as part of memdep, and inside of those preds
> (which are in loop 1, not loop2), using it's magical powers, gives an
> answer about step[i] (note, not step[0]) instead. This answer may
> even be valid in the loop. The problem may even be related to the
> fact that the loops both iterate the same way (so it thinks step[i] is
> valid in both, even though the i's are different).
> 3. The answer is not valid outside of the loop, but it now thinks the
> value is fully available
> 4. It performs insertions and gives you the wrong answer.
>
> If i disable all of phitransaddr's fun magic, your testcase starts
> working.
>
> I'll be honest, i don't have the energy ATM to track down what fun
> safety condition it's missing here.
> I'd actually rather disable the code (which is a mess) and focus on
> improving looploadelimination.
> Maybe someone else wants to take a look at it.
>
> (I'll add all this to the bug)
>
> --Dan
>
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170120/38d75e68/attachment.html>
More information about the llvm-dev
mailing list