42 #include "llvm/Support/CommandLine.h"
47 #define GEN_PASS_DEF_AFFINELOOPUNROLLANDJAM
48 #include "mlir/Dialect/Affine/Passes.h.inc"
52 #define DEBUG_TYPE "affine-loop-unroll-jam"
60 struct LoopUnrollAndJam
61 :
public affine::impl::AffineLoopUnrollAndJamBase<LoopUnrollAndJam> {
62 explicit LoopUnrollAndJam(
63 std::optional<unsigned> unrollJamFactor = std::nullopt) {
65 this->unrollJamFactor = *unrollJamFactor;
68 void runOnOperation()
override;
72 std::unique_ptr<InterfacePass<FunctionOpInterface>>
74 return std::make_unique<LoopUnrollAndJam>(
75 unrollJamFactor == -1 ? std::nullopt
76 : std::optional<unsigned>(unrollJamFactor));
79 void LoopUnrollAndJam::runOnOperation() {
80 if (getOperation().isExternal())
86 auto &entryBlock = getOperation().front();
87 if (
auto forOp = dyn_cast<AffineForOp>(entryBlock.front()))
LogicalResult loopUnrollJamByFactor(AffineForOp forOp, uint64_t unrollJamFactor)
Unrolls and jams this loop by the specified factor.
std::unique_ptr< InterfacePass< FunctionOpInterface > > createLoopUnrollAndJamPass(int unrollJamFactor=-1)
Creates a loop unroll jam pass to unroll jam by the specified factor.
Include the generated interface declarations.