[flang-commits] [flang] [Flang] Add opt-in affine loop optimization pipeline (PR #191854)
via flang-commits
flang-commits at lists.llvm.org
Tue Apr 14 03:02:52 PDT 2026
github-actions[bot] wrote:
<!--LLVM CODE FORMAT COMMENT: {clang-format}-->
:warning: C/C++ code formatter, clang-format found issues in your code. :warning:
<details>
<summary>
You can test this locally with the following command:
</summary>
``````````bash
git-clang-format --diff origin/main HEAD --extensions cpp,h -- flang/lib/Optimizer/Transforms/SimplifyDoLoop.cpp flang/include/flang/Optimizer/Passes/CommandLineOpts.h flang/include/flang/Optimizer/Transforms/Passes.h flang/lib/Optimizer/Passes/CommandLineOpts.cpp flang/lib/Optimizer/Passes/Pipelines.cpp flang/lib/Optimizer/Transforms/AffineDemotion.cpp flang/lib/Optimizer/Transforms/AffinePromotion.cpp --diff_from_common_commit
``````````
:warning:
The reproduction instructions above might return results for more than one PR
in a stack if you are using a stacked PR workflow. You can limit the results by
changing `origin/main` to the base branch/commit you want to compare against.
:warning:
</details>
<details>
<summary>
View the diff from clang-format here.
</summary>
``````````diff
diff --git a/flang/lib/Optimizer/Passes/CommandLineOpts.cpp b/flang/lib/Optimizer/Passes/CommandLineOpts.cpp
index bb5a0c369..d137eb820 100644
--- a/flang/lib/Optimizer/Passes/CommandLineOpts.cpp
+++ b/flang/lib/Optimizer/Passes/CommandLineOpts.cpp
@@ -63,11 +63,11 @@ cl::opt<bool> useOldAliasTags(
cl::init(false), cl::Hidden);
EnableOption(FirLICM, "fir-licm", "FIR loop invariant code motion");
EnableOption(AffineLoopOpt, "affine-loop-opt",
- "affine loop optimizations (tiling, fusion, interchange)");
+ "affine loop optimizations (tiling, fusion, interchange)");
cl::opt<unsigned> affineLoopOptTileSize(
-"affine-loop-opt-tile-size",
-cl::desc("tile size for affine loop tiling (0 = auto from cache model)"),
-cl::init(0), cl::Hidden);
+ "affine-loop-opt-tile-size",
+ cl::desc("tile size for affine loop tiling (0 = auto from cache model)"),
+ cl::init(0), cl::Hidden);
/// CodeGen Passes
DisableOption(CodeGenRewrite, "codegen-rewrite", "rewrite FIR for codegen");
diff --git a/flang/lib/Optimizer/Passes/Pipelines.cpp b/flang/lib/Optimizer/Passes/Pipelines.cpp
index eab64b583..0b09ac5c2 100644
--- a/flang/lib/Optimizer/Passes/Pipelines.cpp
+++ b/flang/lib/Optimizer/Passes/Pipelines.cpp
@@ -225,7 +225,7 @@ void createDefaultFIROptimizerPassPipeline(mlir::PassManager &pm,
if (affineLoopOptTileSize > 0) {
mlir::affine::registerAffineLoopTiling();
std::string pipeline = "func.func(affine-loop-tile{tile-size=" +
- std::to_string(affineLoopOptTileSize) + "})";
+ std::to_string(affineLoopOptTileSize) + "})";
(void)mlir::parsePassPipeline(pipeline, pm);
} else {
pm.addNestedPass<mlir::func::FuncOp>(
@@ -241,7 +241,7 @@ void createDefaultFIROptimizerPassPipeline(mlir::PassManager &pm,
pm.addPass(mlir::createCanonicalizerPass(config));
pm.addPass(mlir::createCSEPass());
}
-
+
fir::addAVC(pm, pc.OptLevel);
addNestedPassToAllTopLevelOperations<PassConstructor>(
pm, fir::createCharacterConversion);
diff --git a/flang/lib/Optimizer/Transforms/AffinePromotion.cpp b/flang/lib/Optimizer/Transforms/AffinePromotion.cpp
index 68a6b6912..da9364e62 100644
--- a/flang/lib/Optimizer/Transforms/AffinePromotion.cpp
+++ b/flang/lib/Optimizer/Transforms/AffinePromotion.cpp
@@ -536,7 +536,8 @@ static void rewriteMemoryOps(Block *block, mlir::PatternRewriter &rewriter) {
if (isa<fir::LoadOp>(bodyOp))
rewriteLoad(cast<fir::LoadOp>(bodyOp), rewriter);
else if (isa<fir::StoreOp>(bodyOp))
- rewriteStore(cast<fir::StoreOp>(bodyOp), rewriter); }
+ rewriteStore(cast<fir::StoreOp>(bodyOp), rewriter);
+ }
}
namespace {
diff --git a/flang/lib/Optimizer/Transforms/SimplifyDoLoop.cpp b/flang/lib/Optimizer/Transforms/SimplifyDoLoop.cpp
index 28dafd218..caf822d5e 100644
--- a/flang/lib/Optimizer/Transforms/SimplifyDoLoop.cpp
+++ b/flang/lib/Optimizer/Transforms/SimplifyDoLoop.cpp
@@ -33,8 +33,9 @@
// 1. For each loop (innermost first):
// a. Remove the initial store (fir.store %iter_arg to %iv_alloca)
// b. Forward all loads of IV alloca inside loop body to fir.convert(IV)
-// todo: the forwarding of load of iv alloca can be done by some other pass like fir-memref-dataflow-opt pass (if it is available).
-// c. Strip iter_args and fir.result, rebuild as simple fir.do_loop
+// todo: the forwarding of load of iv alloca can be done by some other pass
+// like fir-memref-dataflow-opt pass (if it is available). c. Strip
+// iter_args and fir.result, rebuild as simple fir.do_loop
// 2. After the outermost loop, compute and store final IV values
// for all loops whose IV is live after the loop (outer to inner order).
// Fortran final value: final_iv = lb + ((ub - lb + step) / step) * step
``````````
</details>
https://github.com/llvm/llvm-project/pull/191854
More information about the flang-commits
mailing list