[PATCH] Loop Rerolling Pass

Hal Finkel hfinkel at anl.gov
Mon Oct 28 16:04:16 PDT 2013


----- Original Message -----
> 
>   Why are you looking for Phi-IVs across all loop blocks instead of
>   just the header block in collectPossibleIVs and
>   collectPossibleReductions?
> 
>   Why is collectPossibleReductions a separate pass from
>   collectPossibleIVs?

These could be merged. I split them in order to make the code easier to read, and so that we did not bother analyzing possible reductions if no suitable IVs for rerolling are available.

> 
>   I'm not sure what IVInfo is for. It looks like the SCEV field is
>   always the result of calling getSCEV on the first field.

I had thought that it would be better to cache the result so I would not need to call getSCEV again. As you imply, this is probably not worthwhile.

> 
>   I'm not sure why findScaleFromMul needs to look for Mul
>   instructions instead of examining SCEVs.

I probably should look at the SCEVs (because the Mul might be a shift, etc.).

> 
>   I don't know what "Final" is for.

When collecting the set of users, there are three inputs:
 - The root instruction
 - The set of excluded instructions (which are never added to the use set even if they are users)
 - The set of final instructions (which are added to the use set if they are users, but on which we don't recurse looking for more users)

> 
>   Eventually I had to punt on the review. I wasn't able to grok
>   everything that is going on in LoopReroll::reroll. The function is
>   > 400 lines, with lots of state. Since I don't really understand
>   the algorithm, it's hard for me to suggest a better way of doing
>   it. If the results are good and compilation time isn't terrible, I
>   can't argue against checking it in as a prototype. It needs a lot
>   of improvement though before I would consider it
>   reviewable/maintainable.

I don't disagree with you. It still looks like something I hacked together at midnight, and I'm still actively working on refactoring, adding more comments, etc. The question is just whether I can do this in-tree or whether more is needed before an initial checkin. 

> 
> 
> ================
> Comment at: lib/Transforms/Scalar/LoopRerollPass.cpp:215
> @@ +214,3 @@
> +        if (const SCEVConstant *IncSCEV =
> +            dyn_cast<SCEVConstant>(PHISCEV->getOperand(1))) {
> +          if (!IncSCEV->getValue()->getValue().isStrictlyPositive())
> ----------------
> Did you mean PHISCEV->getStepRecurrence()

Yes.

Thanks again,
Hal

> 
> 
> http://llvm-reviews.chandlerc.com/D1940
> 

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



More information about the llvm-commits mailing list