1f82d307cSDiego Caballero //===- AffineLoopNormalize.cpp - AffineLoopNormalize Pass -----------------===// 2f82d307cSDiego Caballero // 3f82d307cSDiego Caballero // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4f82d307cSDiego Caballero // See https://llvm.org/LICENSE.txt for license information. 5f82d307cSDiego Caballero // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6f82d307cSDiego Caballero // 7f82d307cSDiego Caballero //===----------------------------------------------------------------------===// 8f82d307cSDiego Caballero // 9f82d307cSDiego Caballero // This file implements a normalizer for affine loop-like ops. 10f82d307cSDiego Caballero // 11f82d307cSDiego Caballero //===----------------------------------------------------------------------===// 12f82d307cSDiego Caballero 13f82d307cSDiego Caballero #include "PassDetail.h" 14f82d307cSDiego Caballero #include "mlir/Dialect/Affine/IR/AffineOps.h" 15f82d307cSDiego Caballero #include "mlir/Dialect/Affine/Passes.h" 16f82d307cSDiego Caballero #include "mlir/Dialect/Affine/Utils.h" 17f82d307cSDiego Caballero 18f82d307cSDiego Caballero using namespace mlir; 19f82d307cSDiego Caballero 20f82d307cSDiego Caballero namespace { 21f82d307cSDiego Caballero 22f82d307cSDiego Caballero /// Normalize affine.parallel ops so that lower bounds are 0 and steps are 1. 23f82d307cSDiego Caballero /// As currently implemented, this pass cannot fail, but it might skip over ops 24f82d307cSDiego Caballero /// that are already in a normalized form. 25f82d307cSDiego Caballero struct AffineLoopNormalizePass 26f82d307cSDiego Caballero : public AffineLoopNormalizeBase<AffineLoopNormalizePass> { 27f82d307cSDiego Caballero runOnOperation__anon125188a80111::AffineLoopNormalizePass2841574554SRiver Riddle void runOnOperation() override { 2941574554SRiver Riddle getOperation().walk([](Operation *op) { 30f82d307cSDiego Caballero if (auto affineParallel = dyn_cast<AffineParallelOp>(op)) 31f82d307cSDiego Caballero normalizeAffineParallel(affineParallel); 32f82d307cSDiego Caballero else if (auto affineFor = dyn_cast<AffineForOp>(op)) 33f2ff8a8eSUday Bondhugula (void)normalizeAffineFor(affineFor); 34f82d307cSDiego Caballero }); 35f82d307cSDiego Caballero } 36f82d307cSDiego Caballero }; 37f82d307cSDiego Caballero 38f82d307cSDiego Caballero } // namespace 39f82d307cSDiego Caballero 40*58ceae95SRiver Riddle std::unique_ptr<OperationPass<func::FuncOp>> createAffineLoopNormalizePass()41*58ceae95SRiver Riddlemlir::createAffineLoopNormalizePass() { 42f82d307cSDiego Caballero return std::make_unique<AffineLoopNormalizePass>(); 43f82d307cSDiego Caballero } 44