[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