[llvm] r209617 - Make the LoopRotate pass's maximum header size configurable both programmatically

David Blaikie dblaikie at gmail.com
Mon May 26 07:01:41 PDT 2014


On Mon, May 26, 2014 at 1:58 AM, Owen Anderson <resistor at mac.com> wrote:
> Author: resistor
> Date: Mon May 26 03:58:51 2014
> New Revision: 209617
>
> URL: http://llvm.org/viewvc/llvm-project?rev=209617&view=rev
> Log:
> Make the LoopRotate pass's maximum header size configurable both programmatically
> and via the command line, mirroring similar functionality in LoopUnroll.  In
> situations where clients used custom unrolling thresholds, their intent could
> previously be foiled by LoopRotate having a hardcoded threshold.

Is this testable? I would've imagined an opt test could exercise this feature.

>
> Modified:
>     llvm/trunk/include/llvm/Transforms/Scalar.h
>     llvm/trunk/lib/Transforms/Scalar/LoopRotation.cpp
>
> Modified: llvm/trunk/include/llvm/Transforms/Scalar.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Scalar.h?rev=209617&r1=209616&r2=209617&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Transforms/Scalar.h (original)
> +++ llvm/trunk/include/llvm/Transforms/Scalar.h Mon May 26 03:58:51 2014
> @@ -155,7 +155,7 @@ Pass *createLoopRerollPass();
>  //
>  // LoopRotate - This pass is a simple loop rotating pass.
>  //
> -Pass *createLoopRotatePass();
> +Pass *createLoopRotatePass(int MaxHeaderSize = -1);
>
>  //===----------------------------------------------------------------------===//
>  //
>
> Modified: llvm/trunk/lib/Transforms/Scalar/LoopRotation.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopRotation.cpp?rev=209617&r1=209616&r2=209617&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Scalar/LoopRotation.cpp (original)
> +++ llvm/trunk/lib/Transforms/Scalar/LoopRotation.cpp Mon May 26 03:58:51 2014
> @@ -23,6 +23,7 @@
>  #include "llvm/IR/Dominators.h"
>  #include "llvm/IR/Function.h"
>  #include "llvm/IR/IntrinsicInst.h"
> +#include "llvm/Support/CommandLine.h"
>  #include "llvm/Support/Debug.h"
>  #include "llvm/Transforms/Utils/BasicBlockUtils.h"
>  #include "llvm/Transforms/Utils/Local.h"
> @@ -32,7 +33,9 @@ using namespace llvm;
>
>  #define DEBUG_TYPE "loop-rotate"
>
> -#define MAX_HEADER_SIZE 16
> +static cl::opt<unsigned>
> +DefaultRotationThreshold("rotation-max-header-size", cl::init(16), cl::Hidden,
> +       cl::desc("The default maximum header size for automatic loop rotation"));
>
>  STATISTIC(NumRotated, "Number of loops rotated");
>  namespace {
> @@ -40,8 +43,12 @@ namespace {
>    class LoopRotate : public LoopPass {
>    public:
>      static char ID; // Pass ID, replacement for typeid
> -    LoopRotate() : LoopPass(ID) {
> +    LoopRotate(int SpecifiedMaxHeaderSize = -1) : LoopPass(ID) {
>        initializeLoopRotatePass(*PassRegistry::getPassRegistry());
> +      if (SpecifiedMaxHeaderSize == -1)
> +        MaxHeaderSize = DefaultRotationThreshold;
> +      else
> +        MaxHeaderSize = unsigned(SpecifiedMaxHeaderSize);
>      }
>
>      // LCSSA form makes instruction renaming easier.
> @@ -62,6 +69,7 @@ namespace {
>      bool rotateLoop(Loop *L, bool SimplifiedLatch);
>
>    private:
> +    unsigned MaxHeaderSize;
>      LoopInfo *LI;
>      const TargetTransformInfo *TTI;
>    };
> @@ -75,7 +83,9 @@ INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
>  INITIALIZE_PASS_DEPENDENCY(LCSSA)
>  INITIALIZE_PASS_END(LoopRotate, "loop-rotate", "Rotate Loops", false, false)
>
> -Pass *llvm::createLoopRotatePass() { return new LoopRotate(); }
> +Pass *llvm::createLoopRotatePass(int MaxHeaderSize) {
> +  return new LoopRotate(MaxHeaderSize);
> +}
>
>  /// Rotate Loop L as many times as possible. Return true if
>  /// the loop is rotated at least once.
> @@ -320,7 +330,7 @@ bool LoopRotate::rotateLoop(Loop *L, boo
>              << " instructions: "; L->dump());
>        return false;
>      }
> -    if (Metrics.NumInsts > MAX_HEADER_SIZE)
> +    if (Metrics.NumInsts > MaxHeaderSize)
>        return false;
>    }
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list