[PATCH] Clarify that the bypassSlowDivision optimization operates on a single BB.

Hal Finkel via llvm-commits llvm-commits at lists.llvm.org
Thu Dec 10 14:10:04 PST 2015


----- Original Message -----
> From: "Justin Lebar" <jlebar at google.com>
> To: "Hal Finkel" <hfinkel at anl.gov>, "llvm-commits" <llvm-commits at lists.llvm.org>
> Cc: "Tyler Nowicki" <tyler.nowicki at gmail.com>
> Sent: Thursday, December 10, 2015 4:00:47 PM
> Subject: Re: [PATCH] Clarify that the bypassSlowDivision optimization operates on a single BB.
> 
> Hi, thank you for the feedback, Hal.
> 
> I tried making this change, which I agree would be a big readability
> improvement.  But looking more closely at the code, I see that
> bypassSlowDivision is modifying the Function::iterator it's passed.
>  I
> think it's doing this to avoid running the bypassSlowDivision
> optimization on the BBs added by bypassSlowDivision itself.

We can, in a sense, emulate std::vector::erase, and have it return an Instruction *, which is the next one after any new instructions added by bypassSlowDivision itself. The caller can then use this pointer to reset any iterator it might be using.

> 
> It's not clear to me what's the right way to fix this.  We could make
> bypassSlowDivision operate over a whole Function, but that feels kind
> of wrong, since bypassSlowDivision can sanely be applied to a single
> BB.
> 
> Definitely if we leave things as-is, the comment on
> bypassSlowDivision
> should be updated to indicate how it modifies the Function::iterator
> it's passed.

Agreed.

 -Hal

> 
> Thank you again for your help and patience.
> 
> -Justin
> 
> 
> On Wed, Dec 9, 2015 at 8:55 PM, Hal Finkel <hfinkel at anl.gov> wrote:
> > Hi Justin,
> >
> > This is better. Our general convention is to use BasicBlock * and
> > Instruction * on interface boundaries. I think using those instead
> > of the iterator types would make things even clearer (and more
> > consistent with our general conventions).
> >
> >  -Hal
> >
> > ----- Original Message -----
> >> From: "Justin Lebar" <jlebar at google.com>
> >> To: "Hal Finkel" <hfinkel at anl.gov>, "Tyler Nowicki"
> >> <tyler.nowicki at gmail.com>
> >> Sent: Wednesday, December 9, 2015 4:36:25 PM
> >> Subject: [PATCH] Clarify that the bypassSlowDivision optimization
> >> operates on a single BB.
> >>
> >> Remove the Function& arg to bypassSlowDivision -- it isn't
> >> necessary,
> >> and makes it look like this function operates on a whole function
> >> rather
> >> than on one basic block.
> >>
> >> Also update some comments to be more explicit.
> >> ---
> >>  include/llvm/Transforms/Utils/BypassSlowDivision.h |  8 ++--
> >>  lib/CodeGen/CodeGenPrepare.cpp                     |  2 +-
> >>  lib/Transforms/Utils/BypassSlowDivision.cpp        | 53
> >>  ++++++++++------------
> >>  3 files changed, 29 insertions(+), 34 deletions(-)
> >>
> >
> > --
> > 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