[llvm] ec210f3 - [LoopFuse] Ensure inner loops are in loop simplified form under new PM

via llvm-commits llvm-commits at lists.llvm.org
Fri Nov 11 12:58:28 PST 2022


Author: Mengxuan Cai
Date: 2022-11-11T15:55:59-05:00
New Revision: ec210f394233798c531b52b43ac3ff4354339bb0

URL: https://github.com/llvm/llvm-project/commit/ec210f394233798c531b52b43ac3ff4354339bb0
DIFF: https://github.com/llvm/llvm-project/commit/ec210f394233798c531b52b43ac3ff4354339bb0.diff

LOG: [LoopFuse] Ensure inner loops are in loop simplified form under new PM

LoopInfo doesn't give all loops in a loop nest, it gives top level loops
only. While isLoopSimplifyForm() only checkes for the outter most loop of a
loop nest. As a result, inner loops that are not in simplied form can
not be simplified with the original code.

Reviewed By: aeubanks

Differential Revision: https://reviews.llvm.org/D137672

Added: 
    

Modified: 
    llvm/lib/Transforms/Scalar/LoopFuse.cpp
    llvm/test/Transforms/LoopFusion/ensure_loop_simplify_form.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Transforms/Scalar/LoopFuse.cpp b/llvm/lib/Transforms/Scalar/LoopFuse.cpp
index 9d70f8929c134..70903f5acad75 100644
--- a/llvm/lib/Transforms/Scalar/LoopFuse.cpp
+++ b/llvm/lib/Transforms/Scalar/LoopFuse.cpp
@@ -2091,9 +2091,8 @@ PreservedAnalyses LoopFusePass::run(Function &F, FunctionAnalysisManager &AM) {
   // LoopSimplify pass as a dependency.
   bool Changed = false;
   for (auto &L : LI) {
-    if (!L->isLoopSimplifyForm())
-      Changed |= simplifyLoop(L, &DT, &LI, &SE, &AC, nullptr,
-                              false /* PreserveLCSSA */);
+    Changed |=
+        simplifyLoop(L, &DT, &LI, &SE, &AC, nullptr, false /* PreserveLCSSA */);
   }
   if (Changed)
     PDT.recalculate(F);

diff  --git a/llvm/test/Transforms/LoopFusion/ensure_loop_simplify_form.ll b/llvm/test/Transforms/LoopFusion/ensure_loop_simplify_form.ll
index c80b08e0cfa33..5129b7ab45658 100644
--- a/llvm/test/Transforms/LoopFusion/ensure_loop_simplify_form.ll
+++ b/llvm/test/Transforms/LoopFusion/ensure_loop_simplify_form.ll
@@ -33,3 +33,44 @@ for.body6:                                        ; preds = %for.body6, %for.con
   %v_loop_2.0.v_loop_2.0.v_loop_2.0.18 = load volatile i32, i32* %dummy, align 1
   br label %for.body6
 }
+
+define void @f943(i8* %dummy) {
+; CHECK-LABEL: @f943(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    br label [[FOR_COND32_I_I:%.*]]
+; CHECK:       for.cond32.i.i:
+; CHECK-NEXT:    br label [[FOR_BODY37_I_I:%.*]]
+; CHECK:       for.cond42.preheader.i.i:
+; CHECK-NEXT:    br i1 true, label [[FOR_BODY44_I_I_PREHEADER:%.*]], label [[FOR_END47_I_I:%.*]]
+; CHECK:       for.body44.i.i.preheader:
+; CHECK-NEXT:    br label [[FOR_BODY44_I_I:%.*]]
+; CHECK:       for.body37.i.i:
+; CHECK-NEXT:    br i1 true, label [[FOR_BODY37_I_I]], label [[FOR_COND42_PREHEADER_I_I:%.*]]
+; CHECK:       for.body44.i.i:
+; CHECK-NEXT:    store volatile i8 poison, i8* [[DUMMY:%.*]], align 1
+; CHECK-NEXT:    br i1 true, label [[FOR_BODY44_I_I]], label [[FOR_END47_I_I_LOOPEXIT:%.*]]
+; CHECK:       for.end47.i.i.loopexit:
+; CHECK-NEXT:    br label [[FOR_END47_I_I]]
+; CHECK:       for.end47.i.i:
+; CHECK-NEXT:    br label [[FOR_COND32_I_I]]
+;
+entry:
+  br label %for.cond32.i.i
+
+for.cond32.i.i:                                   ; preds = %for.end47.i.i, %entry
+  br label %for.body37.i.i
+
+for.cond42.preheader.i.i:                         ; preds = %for.body37.i.i
+  br i1 true, label %for.body44.i.i, label %for.end47.i.i
+
+for.body37.i.i:                                   ; preds = %for.body37.i.i, %for.cond32.i.i
+  br i1 true, label %for.body37.i.i, label %for.cond42.preheader.i.i
+
+for.body44.i.i:                                   ; preds = %for.body44.i.i, %for.cond42.preheader.i.i
+  store volatile i8 poison, i8* %dummy, align 1
+  br i1 true, label %for.body44.i.i, label %for.end47.i.i
+
+for.end47.i.i:                                    ; preds = %for.body44.i.i, %for.cond42.preheader.i.i
+  br label %for.cond32.i.i
+}
+


        


More information about the llvm-commits mailing list