[llvm] [MachineLoopInfo] Fix getLoopID to handle multi latches. (PR #106195)
Freddy Ye via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 27 00:48:03 PDT 2024
https://github.com/FreddyLeaf updated https://github.com/llvm/llvm-project/pull/106195
>From b52dc77e9d8935870d12b2e984e0c53b5cac5517 Mon Sep 17 00:00:00 2001
From: Freddy Ye <freddy.ye at intel.com>
Date: Wed, 21 Aug 2024 11:12:57 +0800
Subject: [PATCH] [MachineLoopInfo] Fix getLoopID to handle multi latches.
This patch also fixed CodegenPrepare to reserve loop metadata
when merging blocks.
This fixes issue #102632
---
llvm/lib/CodeGen/CodeGenPrepare.cpp | 6 ++++++
llvm/lib/CodeGen/MachineLoopInfo.cpp | 2 --
llvm/test/CodeGen/X86/code-align-loops.ll | 2 +-
3 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/llvm/lib/CodeGen/CodeGenPrepare.cpp b/llvm/lib/CodeGen/CodeGenPrepare.cpp
index bf48c1fdab0ff0..c63a265fe27789 100644
--- a/llvm/lib/CodeGen/CodeGenPrepare.cpp
+++ b/llvm/lib/CodeGen/CodeGenPrepare.cpp
@@ -1183,6 +1183,12 @@ void CodeGenPrepare::eliminateMostlyEmptyBlock(BasicBlock *BB) {
}
}
+ // Reserve loop Metadata.
+ if (BI->hasMetadata(LLVMContext::MD_loop)) {
+ for (auto *Pred : predecessors(BB))
+ Pred->getTerminator()->copyMetadata(*BI, LLVMContext::MD_loop);
+ }
+
// The PHIs are now updated, change everything that refers to BB to use
// DestBB and remove BB.
BB->replaceAllUsesWith(DestBB);
diff --git a/llvm/lib/CodeGen/MachineLoopInfo.cpp b/llvm/lib/CodeGen/MachineLoopInfo.cpp
index 88ba10fbe29a91..b82b41fac662d7 100644
--- a/llvm/lib/CodeGen/MachineLoopInfo.cpp
+++ b/llvm/lib/CodeGen/MachineLoopInfo.cpp
@@ -211,8 +211,6 @@ MDNode *MachineLoop::getLoopID() const {
break;
}
}
- if (!MD)
- return nullptr;
if (!LoopID)
LoopID = MD;
else if (MD != LoopID)
diff --git a/llvm/test/CodeGen/X86/code-align-loops.ll b/llvm/test/CodeGen/X86/code-align-loops.ll
index 616478993a51da..40ad3b4c8d600e 100644
--- a/llvm/test/CodeGen/X86/code-align-loops.ll
+++ b/llvm/test/CodeGen/X86/code-align-loops.ll
@@ -111,7 +111,7 @@ for.body5: ; preds = %for.body, %for.body
; }
; }
; CHECK-LABEL: test3_multilatch:
-; ALIGN: .p2align 4, 0x90
+; ALIGN: .p2align 6, 0x90
; ALIGN-NEXT: .LBB2_1: # %while.cond
define dso_local i32 @test3_multilatch() #0 {
entry:
More information about the llvm-commits
mailing list