[LLVMdev] llvm.loop metadata placement and critical edge splitting
doerfert at cs.uni-saarland.de
doerfert at cs.uni-saarland.de
Tue Oct 7 04:09:16 PDT 2014
Making the metadata more stable sounds good to me.
No objections from my side.
On 10/07, Musman, Alexander wrote:
> I'm happy with any representation that works for optimizer. I can prepare a patch for clang to update the 'omp simd' and 'clang loop' CodeGen.
> We do not use LoopInfo in front-end, but it's no problem to go to the block's single predecessor and attach the metadata there.
>
> Regards,
> Alexander
>
> -----Original Message-----
> From: Tobias Grosser [mailto:tobias at grosser.es]
> Sent: Tuesday, October 07, 2014 11:22 AM
> To: Hal Finkel; Andrew Trick
> Cc: doerfert at cs.uni-saarland.de; zinovy nis; Arnold Schwaighofer; llvmdev at cs.uiuc.edu Dev; Bataev, Alexey; Musman, Alexander; Erik Schnetter
> Subject: Re: llvm.loop metadata placement and critical edge splitting
>
> On 06/10/2014 23:56, Hal Finkel wrote:
> > ----- Original Message -----
> >> From: "Andrew Trick" <atrick at apple.com>
> >> To: "llvmdev at cs.uiuc.edu Dev" <llvmdev at cs.uiuc.edu>
> >> Cc: doerfert at cs.uni-saarland.de, "zinovy nis" <zinovy.nis at gmail.com>,
> >> "Hal Finkel" <hfinkel at anl.gov>, "Arnold Schwaighofer"
> >> <aschwaighofer at apple.com>
> >> Sent: Monday, October 6, 2014 12:55:11 PM
> >> Subject: llvm.loop metadata placement and critical edge splitting
> >>
> >> While reviewing a fix for maintaining loop metadata
> >> (http://reviews.llvm.org/D5539) I noticed that we make a strict
> >> assumption about the metadata being attached to the branch that is an
> >> immediate predecessor of the loop header. This does not work well
> >> with LLVM's approach of lazy critical edge splitting. I've proposed
> >> working around this with heroics inside the critical edges splitting
> >> utility, but feel that the workaround is really unnecessary because
> >> the design could be fixed more easily. I was not involved in the
> >> original design discussion for llvm.loop metadata, so I want to get
> >> feedback before proposing a direction.
> >>
> >> My question is: Why can't we define requirements of loop metadata
> >> such that *critical edge splitting does not invalidate loop
> >> metadata*.
> >>
> >> I think fixing this may be an easy change to LoopInfo get/setLoopID.
> >> The rule would be simple, if the loop back branch is unconditional,
> >> and it has a single predecessor, the metadata is expected on the
> >> predecessaor's conditional branch:
> >>
> >> loop.body:
> >> ...
> >> br i1 %c, label %loop.tail, label %exit, !llvm.loop
> >>
> >> loop.tail:
> >> ...
> >> br label %loop.body
> >>
> >> exit:
> >> ret
> >>
> >> If the loop tail does not have a single predecessor (complex control
> >> flow occurs after the loop test), then the metadata can still be
> >> placed on the unconditional branch. Either way, we don't need to
> >> worry about edge splitting. Only a signficant loop restructuring will
> >> invalidate the metadata.
> >>
> >> I don't think any change is necessary when clang emits a loop with an
> >> unconditional backedge, but someone will want to verify with some
> >> test cases. If a change is needed it should also be easy.
> >>
> >> With that design change we can remove any current workarounds from
> >> SplitCriticalEdge and simply preserve loop metadata, which remains
> >> valid by definition.
> >
> > I think this makes sense. cc'ing the folks who did the OpenMP codegen work in case they have an opinion. Also, maybe the polly and/or POCL folks have an opinion (not sure exactly who to ask for those).
>
> From my side, this makes a lot of sense.
>
> @Johannes, what do you think?
>
> Cheers,
> Tobias
>
> --------------------------------------------------------------------
> Closed Joint Stock Company Intel A/O
> Registered legal address: Krylatsky Hills Business Park,
> 17 Krylatskaya Str., Bldg 4, Moscow 121614,
> Russian Federation
>
> This e-mail and any attachments may contain confidential material for
> the sole use of the intended recipient(s). Any review or distribution
> by others is strictly prohibited. If you are not the intended
> recipient, please contact the sender and delete all copies.
--
Johannes Doerfert
Researcher / PhD Student
Compiler Design Lab (Prof. Hack)
Saarland University, Computer Science
Building E1.3, Room 4.26
Tel. +49 (0)681 302-57521 : doerfert at cs.uni-saarland.de
Fax. +49 (0)681 302-3065 : http://www.cdl.uni-saarland.de/people/doerfert
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 213 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20141007/60b9e215/attachment.sig>
More information about the llvm-dev
mailing list