Introduce loop unroll jam transformation.
- for test purposes, the unroll-jam pass unroll jams the first outermost loop.
While on this:
- fix StmtVisitor to allow overriding of function to iterate walk over children
of a stmt.
PiperOrigin-RevId: 210644813
diff --git a/lib/Transforms/LoopUnroll.cpp b/lib/Transforms/LoopUnroll.cpp
index 6a5c667..382b830 100644
--- a/lib/Transforms/LoopUnroll.cpp
+++ b/lib/Transforms/LoopUnroll.cpp
@@ -162,17 +162,17 @@
/// Unroll a for stmt. Default unroll factor is 4.
bool LoopUnroll::runOnForStmt(ForStmt *forStmt) {
+ // Unroll by the factor passed, if any.
+ if (unrollFactor.hasValue())
+ return loopUnrollByFactor(forStmt, unrollFactor.getValue());
+ // Unroll by the command line factor if one was specified.
+ if (clUnrollFactor.getNumOccurrences() > 0)
+ return loopUnrollByFactor(forStmt, clUnrollFactor);
// Unroll completely if full loop unroll was specified.
if (clUnrollFull.getNumOccurrences() > 0 ||
(unrollFull.hasValue() && unrollFull.getValue()))
return loopUnrollFull(forStmt);
- // Unroll by the specified factor if one was specified.
- if (clUnrollFactor.getNumOccurrences() > 0)
- return loopUnrollByFactor(forStmt, clUnrollFactor);
- else if (unrollFactor.hasValue())
- return loopUnrollByFactor(forStmt, unrollFactor.getValue());
-
// Unroll by four otherwise.
return loopUnrollByFactor(forStmt, 4);
}