[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