[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