[llvm-dev] [RFC] Simple GVN hoist

Philip Reames via llvm-dev llvm-dev at lists.llvm.org
Thu Sep 16 10:50:45 PDT 2021


On 9/15/21 9:17 AM, Sjoerd Meijer wrote:
>
> The SLP vectoriser will fail to vectorise this because it wasn't 
> taught to emit runtime alias analysis checks. This is being addressed 
> by Florian in https://reviews.llvm.org/D102834 
> <https://reviews.llvm.org/D102834>. We had many issues with full 
> unrolling removing opportunities for the loop vectoriser, and the SLP 
> missing some tricks. But with D102834 
> <https://reviews.llvm.org/D102834> fixed, I expect this loop to be SLP 
> vectorised and most of this pass ordering problems to disappear.
>
> Philip seems happy with this being part of GVN, and I don't have 
> strong opinions, but GVNHoist seems like the natural place for this. 
> An alternative strategy could thus be to integrate this into GVNHoist, 
> enable it by default but only your simple gvn hoist algorithm (and 
> disable the rest). That would perhaps then be a first step to address 
> Philip's unhappiness with GVNHoist and restructure and improve it step 
> by step.

+1 to this point.  This would be a perfectly reasonable way to implement 
the MemorySSA based approach in a shippable way.  I'm not opposed to the 
non-memoryssa variant in (old) GVN, but this would be fine too.


Philip

> ------------------------------------------------------------------------
> *From:* Momchil Velikov <momchil.velikov at gmail.com>
> *Sent:* 15 September 2021 12:30
> *To:* Sjoerd Meijer <Sjoerd.Meijer at arm.com>
> *Cc:* Momchil Velikov <Momchil.Velikov at arm.com>; 
> llvm-dev at lists.llvm.org <llvm-dev at lists.llvm.org>; Philip Reames 
> <listmail at philipreames.com>
> *Subject:* Re: [llvm-dev] [RFC] Simple GVN hoist
> On Wed, Sep 15, 2021 at 12:18 PM Momchil Velikov
> <momchil.velikov at gmail.com> wrote:
> >
> > On Tue, Sep 14, 2021 at 7:56 PM Sjoerd Meijer via llvm-dev
> > <llvm-dev at lists.llvm.org> wrote:
> > > Fix GVNHoist. I like your patch because it's small and concise, 
> but missing in the RFC is a discussion why we don't try to re-enable 
> GVNHoist. I know it was briefly enabled by default, which was reverted 
> due to correctness (or was it regressions?) problems. But if this 
> belongs in GVNHoist, could this for example be added to GVNHoist, and 
> only this part enabled? Not sure if that's possible as I haven't 
> looked at GVNHoist.
> >
> > Yes, GVNHoist will do what we need
>
> [hit send too soon]
>
> So, GVNHoist will do the hoisting we want.. However, while technically
> possible there a few drawbacks in taking the existing GVNHoist
> approach:
> * GVNHoist is large and algorithmically complex
> * Even if enabled, it won't solve this specific issue - after hoisting
> of the loads the loop size falls below some unrolling threshold and
> the loop is fully unrolled - instead the loop should be
> loop-vectorised, IMHO - so we get a pass order issue.
> * After unrolling the SLP vectoriser does not vectorise the loop - so
> we have to fix the SLP vectoriser too.
>
> While I think all of these are worthwhile, we have on one hand some
> rather simple transformation (the mini-GVNHoist) vs. on the other hand
> the actual  GVNHoist+pass manager+SLP Vectoriser, which
> could easily turn into a time sink with no end in sight.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210916/498fe92b/attachment.html>


More information about the llvm-dev mailing list