[PATCH] IRBuilder: Allow retrieval of the inserted instructions

Hal Finkel hfinkel at anl.gov
Thu Feb 5 12:12:47 PST 2015


----- Original Message -----
> From: "Adam Nemet" <anemet at apple.com>
> To: "Hal Finkel" <hfinkel at anl.gov>
> Cc: reviews+D7421+public+86df0334cf13545b at reviews.llvm.org, "llvm-commits" <llvm-commits at cs.uiuc.edu>, "Nadav
> Rotem(nrotem at apple.com)" <nrotem at apple.com>, "Arnold Schwaighofer" <aschwaighofer at apple.com>, chandlerc at gmail.com
> Sent: Thursday, February 5, 2015 2:08:33 PM
> Subject: Re: [PATCH] IRBuilder: Allow retrieval of the inserted instructions
> 
> On Feb 5, 2015, at 1:06 AM, Hal Finkel < hfinkel at anl.gov > wrote:
> 
> ----- Original Message -----
> 
> 
> From: "Adam Nemet" < anemet at apple.com >
> To: "Hal Finkel" < hfinkel at anl.gov >
> Cc: reviews+D7421+public+86df0334cf13545b at reviews.llvm.org ,
> "llvm-commits" < llvm-commits at cs.uiuc.edu >, "Nadav
> Rotem( nrotem at apple.com )" < nrotem at apple.com >, "Arnold
> Schwaighofer" < aschwaighofer at apple.com >, chandlerc at gmail.com
> Sent: Thursday, February 5, 2015 2:19:24 AM
> Subject: Re: [PATCH] IRBuilder: Allow retrieval of the inserted
> instructions
> 
> On Feb 4, 2015, at 10:15 PM, Hal Finkel < hfinkel at anl.gov > wrote:
> 
> 
> ----- Original Message -----
> 
> 
> From: "Adam Nemet" < anemet at apple.com >
> To: "Hal Finkel" < hfinkel at anl.gov >
> Cc: reviews+D7421+public+86df0334cf13545b at reviews.llvm.org ,
> "llvm-commits" < llvm-commits at cs.uiuc.edu >, "Nadav Rotem <
> nrotem at apple.com > ( nrotem at apple.com )" < nrotem at apple.com >,
> "Arnold Schwaighofer" < aschwaighofer at apple.com >,
> chandlerc at gmail.com
> Sent: Wednesday, February 4, 2015 10:04:54 PM
> Subject: Re: [PATCH] IRBuilder: Allow retrieval of the inserted
> instructions
> 
> On Feb 4, 2015, at 6:14 PM, Hal Finkel < hfinkel at anl.gov > wrote:
> 
> ----- Original Message -----
> 
> From: "Adam Nemet" < anemet at apple.com >
> To: anemet at apple.com , hfinkel at anl.gov , nrotem at apple.com ,
> aschwaighofer at apple.com , chandlerc at gmail.com
> Cc: llvm-commits at cs.uiuc.edu
> Sent: Wednesday, February 4, 2015 5:58:45 PM
> Subject: [PATCH] IRBuilder: Allow retrieval of the inserted
> instructions
> 
> Hi hfinkel, nadav, aschwaighofer, chandlerc,
> 
> This is an RFC.
> 
> When the Loop Vectorizer builds the instruction sequence for checks
> it tries
> to determine the first instruction that was emitted in the current
> block.
> This is then used to split the block.
> 
> Silly question: Why don't we split the block first?
> 
> 
> 
> Because we may end up not needing any checks in which case we don’t
> split. The decision of whether checks are necessary is local to both
> addRuntimeCheck and addStrideCheck.
> Okay, but an alternative design would be to always split early, and
> then let SimplifyCFG put them back together again should we not
> actually end up with any checks, right? I'm not necessarily
> advocating for this approach, and think that the marker code will be
> cleaner than the existing getFirstInst code, but splitting the block
> eagerly will also create a trivial way of marking that point, and I
> want to understand if there are any downsides to that approach
> before we invent something new.
> 
> 
> 
> I am not aware of any other downsides but I haven’t written this code
> of course. Hopefully Nadav/Arnold will chime in if there is
> something to add here.
> 
> 
> Perhaps as another argument you could consider that there seems to be
> some existing practice to fix up simple things like this in the pass
> itself rather than relying on other passes. Especially in this case
> where we could avoid producing the potential inefficiency.
> 
> 
> You're certainly right about that. And I certainly have no problems
> with this so long as it remains embedded inside the transformation
> itself.
> 
> 
> 
> 
> I guess I am also interested if you see some gotchas with the marker
> feature or you just think that it’s not a generally useful new
> addition.
> 
> I'm not sure that I'm seeing the complete picture. Are these going to
> be on the new interface boundary between the vectorization analysis
> utilities and their users? Or just used internally?
> 
> 
> 
> getFirstInst is used by both addRuntimeCheck and addStrideCheck. I’d
> like to move addRuntimeCheck to LAA but not stride checking. Stride
> checking has some more dependencies that makes this a bit more
> involved. So getFirstInst or the corresponding feature would have to
> live somewhere where it could be shared between to LV.cpp and
> LAA.cpp.

FWIW, it is just a few lines of fairly generic code in a static function. I'd not object to copy-and-paste for now while we figure out what we actually want to do here.

 -Hal

> 
> 
> I hope this clears up the picture.
> 
> 
> 
> Any why is this marker class associated with IRBuilder?
> 
> 
> 
> I doesn’t have to. It’s actually associated with an insertion point.
> I put it in the IRBuilder header because:
> 
> 
> 1. I felt that insertion point was an IRBuilder concept
> 2. Its main aim is to query the result of IRBuilder inserts that may
> or may not end up generating instructions
> 3. I was thinking that it’s a generally useful feature essentially
> answering the question of what IRBuilder has actually done with the
> instruction stream through its various levels of smartness
> 
> 
> We can obviously move it under LAA or as you say rip it out
> completely and have SimplifyCFG fix this up for us. I was mostly
> trying to test the waters if this was a generally interesting
> addition.
> 
> 
> Sounds like it’s not. I can try to see if there are code changes
> without getFirstInst and report back.
> 
> 
> Adam
> 
> 
> 
> Thanks again,
> Hal
> 
> 
> 
> 
> 
> Thanks,
> Adam
> 
> Thanks again,
> Hal
> 
> Adam
> 
> 
> 
> -Hal
> 
> It uses a custom solution for this implemented in the static function
> getFirstInst. The pattern is something like:
> 
> Value *V = IRBuilder.CreateBlah(...);
> FirstInst = getFirstInst(FirstInst, V, Loc)
> Value *V2 = IRBuilder.CreateBlah(...);
> FirstInst = getFirstInst(FirstInst, V2, Loc);
> 
> (Since CreateBlah may return a constant we may not generate the first
> instruction for V.)
> 
> --
> 
> Hal Finkel
> Assistant Computational Scientist
> Leadership Computing Facility
> Argonne National Laboratory
> 
> 
> 
> --
> Hal Finkel
> Assistant Computational Scientist
> Leadership Computing Facility
> Argonne National Laboratory
> 

-- 
Hal Finkel
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory




More information about the llvm-commits mailing list