[llvm] r182299 - Expose InsertPreheaderForLoop from LoopSimplify to other passes

Andrew Trick atrick at apple.com
Mon May 20 11:06:23 PDT 2013


On May 20, 2013, at 10:04 AM, Hal Finkel <hfinkel at anl.gov> wrote:

> ----- Original Message -----
>> 
>> On May 20, 2013, at 9:47 AM, Hal Finkel <hfinkel at anl.gov> wrote:
>> 
>>> Author: hfinkel
>>> Date: Mon May 20 11:47:07 2013
>>> New Revision: 182299
>>> 
>>> URL: http://llvm.org/viewvc/llvm-project?rev=182299&view=rev
>>> Log:
>>> Expose InsertPreheaderForLoop from LoopSimplify to other passes
>>> 
>>> Other passes, PPC counter-loop formation for example, also need to
>>> add loop
>>> preheaders outside of the regular loop simplification pass. This
>>> makes
>>> InsertPreheaderForLoop a global function so that it can be used by
>>> other
>>> passes.
>> 
>> Hi Hal,
>> 
>> How about something more general, like
>> Transforms/Utils/LoopTransforms.h?
> 
> I agree, although it is already in the Transforms directory (so putting Transforms in the name seems redundant). Some of the other files have Utils in the name (and then there is Local.h), so how about LoopUtils.h, or just Loop.h?

It would be nice to have a LoopUtils.h. Thanks.
-Andy

>>> 
>>> No functionality change intended.
>>> 
>>> Added:
>>>   llvm/trunk/include/llvm/Transforms/Utils/LoopSimplify.h
>>> Modified:
>>>   llvm/trunk/lib/Transforms/Utils/LoopSimplify.cpp
>>> 
>>> Added: llvm/trunk/include/llvm/Transforms/Utils/LoopSimplify.h
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Utils/LoopSimplify.h?rev=182299&view=auto
>>> ==============================================================================
>>> --- llvm/trunk/include/llvm/Transforms/Utils/LoopSimplify.h (added)
>>> +++ llvm/trunk/include/llvm/Transforms/Utils/LoopSimplify.h Mon May
>>> 20 11:47:07 2013
>>> @@ -0,0 +1,26 @@
>>> +//===- llvm/Transforms/Utils/LoopSimplify.h - Loop utilities -*-
>>> C++ -*-======//
>>> +//
>>> +//                     The LLVM Compiler Infrastructure
>>> +//
>>> +// This file is distributed under the University of Illinois Open
>>> Source
>>> +// License. See LICENSE.TXT for details.
>>> +//
>>> +//===----------------------------------------------------------------------===//
>>> +//
>>> +// This file defines some loop transformation utilities.
>>> +//
>>> +//===----------------------------------------------------------------------===//
>>> +
>>> +#ifndef LLVM_TRANSFORMS_UTILS_LOOPSIMPLIFY_H
>>> +#define LLVM_TRANSFORMS_UTILS_LOOPSIMPLIFY_H
>>> +
>>> +namespace llvm {
>>> +
>>> +class Loop;
>>> +class Pass;
>>> +
>>> +BasicBlock *InsertPreheaderForLoop(Loop *L, Pass *P);
>>> +
>>> +}
>>> +
>>> +#endif
>>> 
>>> Modified: llvm/trunk/lib/Transforms/Utils/LoopSimplify.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/LoopSimplify.cpp?rev=182299&r1=182298&r2=182299&view=diff
>>> ==============================================================================
>>> --- llvm/trunk/lib/Transforms/Utils/LoopSimplify.cpp (original)
>>> +++ llvm/trunk/lib/Transforms/Utils/LoopSimplify.cpp Mon May 20
>>> 11:47:07 2013
>>> @@ -59,6 +59,7 @@
>>> #include "llvm/Support/Debug.h"
>>> #include "llvm/Transforms/Utils/BasicBlockUtils.h"
>>> #include "llvm/Transforms/Utils/Local.h"
>>> +#include "llvm/Transforms/Utils/LoopSimplify.h"
>>> using namespace llvm;
>>> 
>>> STATISTIC(NumInserted, "Number of pre-header or exit blocks
>>> inserted");
>>> @@ -100,16 +101,16 @@ namespace {
>>>  private:
>>>    bool ProcessLoop(Loop *L, LPPassManager &LPM);
>>>    BasicBlock *RewriteLoopExitBlock(Loop *L, BasicBlock *Exit);
>>> -    BasicBlock *InsertPreheaderForLoop(Loop *L);
>>>    Loop *SeparateNestedLoop(Loop *L, LPPassManager &LPM,
>>>                             BasicBlock *Preheader);
>>>    BasicBlock *InsertUniqueBackedgeBlock(Loop *L, BasicBlock
>>>    *Preheader);
>>> -    void PlaceSplitBlockCarefully(BasicBlock *NewBB,
>>> -                                  SmallVectorImpl<BasicBlock*>
>>> &SplitPreds,
>>> -                                  Loop *L);
>>>  };
>>> }
>>> 
>>> +static void PlaceSplitBlockCarefully(BasicBlock *NewBB,
>>> +                                     SmallVectorImpl<BasicBlock*>
>>> &SplitPreds,
>>> +                                     Loop *L);
>>> +
>>> char LoopSimplify::ID = 0;
>>> INITIALIZE_PASS_BEGIN(LoopSimplify, "loop-simplify",
>>>                "Canonicalize natural loops", true, false)
>>> @@ -208,7 +209,7 @@ ReprocessLoop:
>>>  // Does the loop already have a preheader?  If so, don't insert
>>>  one.
>>>  BasicBlock *Preheader = L->getLoopPreheader();
>>>  if (!Preheader) {
>>> -    Preheader = InsertPreheaderForLoop(L);
>>> +    Preheader = InsertPreheaderForLoop(L, this);
>>>    if (Preheader) {
>>>      ++NumInserted;
>>>      Changed = true;
>>> @@ -367,7 +368,7 @@ ReprocessLoop:
>>> /// preheader, this method is called to insert one.  This method
>>> has two phases:
>>> /// preheader insertion and analysis updating.
>>> ///
>>> -BasicBlock *LoopSimplify::InsertPreheaderForLoop(Loop *L) {
>>> +BasicBlock *llvm::InsertPreheaderForLoop(Loop *L, Pass *PP) {
>>>  BasicBlock *Header = L->getHeader();
>>> 
>>>  // Compute the set of predecessors of the loop that are not in
>>>  the loop.
>>> @@ -390,11 +391,11 @@ BasicBlock *LoopSimplify::InsertPreheade
>>>  BasicBlock *PreheaderBB;
>>>  if (!Header->isLandingPad()) {
>>>    PreheaderBB = SplitBlockPredecessors(Header, OutsideBlocks,
>>>    ".preheader",
>>> -                                         this);
>>> +                                         PP);
>>>  } else {
>>>    SmallVector<BasicBlock*, 2> NewBBs;
>>>    SplitLandingPadPredecessors(Header, OutsideBlocks,
>>>    ".preheader",
>>> -                                ".split-lp", this, NewBBs);
>>> +                                ".split-lp", PP, NewBBs);
>>>    PreheaderBB = NewBBs[0];
>>>  }
>>> 
>>> @@ -491,9 +492,9 @@ static PHINode *FindPHIToPartitionLoops(
>>> // PlaceSplitBlockCarefully - If the block isn't already, move the
>>> new block to
>>> // right after some 'outside block' block.  This prevents the
>>> preheader from
>>> // being placed inside the loop body, e.g. when the loop hasn't
>>> been rotated.
>>> -void LoopSimplify::PlaceSplitBlockCarefully(BasicBlock *NewBB,
>>> -
>>>                                      SmallVectorImpl<BasicBlock*>
>>> &SplitPreds,
>>> -                                            Loop *L) {
>>> +void PlaceSplitBlockCarefully(BasicBlock *NewBB,
>>> +                              SmallVectorImpl<BasicBlock*>
>>> &SplitPreds,
>>> +                              Loop *L) {
>>>  // Check to see if NewBB is already well placed.
>>>  Function::iterator BBI = NewBB; --BBI;
>>>  for (unsigned i = 0, e = SplitPreds.size(); i != e; ++i) {
>>> 
>>> 
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>> 
>> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130520/b6c469a5/attachment.html>


More information about the llvm-commits mailing list