Skip to content

Commit 7eff317

Browse files
committed
Move metadata replacement process
1 parent 0e954b3 commit 7eff317

File tree

1 file changed

+29
-24
lines changed

1 file changed

+29
-24
lines changed

llvm/lib/Transforms/Scalar/LoopInterchange.cpp

Lines changed: 29 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -566,6 +566,7 @@ struct LoopInterchange {
566566
const DenseMap<const Loop *, unsigned> &CostMap) {
567567
Loop *OuterLoop = LoopList[OuterLoopId];
568568
Loop *InnerLoop = LoopList[InnerLoopId];
569+
MDNode *LoopID = OuterLoop->getLoopID();
569570
LLVM_DEBUG(dbgs() << "Processing InnerLoopId = " << InnerLoopId
570571
<< " and OuterLoopId = " << OuterLoopId << "\n");
571572
if (findMetadata(OuterLoop) == false || findMetadata(InnerLoop) == false) {
@@ -607,6 +608,34 @@ struct LoopInterchange {
607608
LLVM_DEBUG(dbgs() << "Dependency matrix after interchange:\n";
608609
printDepMatrix(DependencyMatrix));
609610

611+
// The next outer loop, or nullptr if TargetLoop is the outermost one.
612+
Loop *NextOuterLoop = nullptr;
613+
if (0 < OuterLoopId)
614+
NextOuterLoop = LoopList[OuterLoopId - 1];
615+
616+
// Update the metadata.
617+
std::optional<MDNode *> MDNextOuterLoopID =
618+
makeFollowupLoopID(LoopID, {LLVMLoopInterchangeFollowupAll,
619+
LLVMLoopInterchangeFollowupNextOuter});
620+
std::optional<MDNode *> MDOuterLoopID =
621+
makeFollowupLoopID(LoopID, {LLVMLoopInterchangeFollowupAll,
622+
LLVMLoopInterchangeFollowupOuter});
623+
std::optional<MDNode *> MDInnerLoopID =
624+
makeFollowupLoopID(LoopID, {LLVMLoopInterchangeFollowupAll,
625+
LLVMLoopInterchangeFollowupInner});
626+
if (MDNextOuterLoopID) {
627+
if (NextOuterLoop) {
628+
NextOuterLoop->setLoopID(*MDNextOuterLoopID);
629+
} else {
630+
LLVM_DEBUG(
631+
dbgs() << "New metadata for the next outer loop is ignored.\n");
632+
}
633+
}
634+
if (MDOuterLoopID)
635+
OuterLoop->setLoopID(*MDOuterLoopID);
636+
if (MDInnerLoopID)
637+
InnerLoop->setLoopID(*MDInnerLoopID);
638+
610639
return true;
611640
}
612641

@@ -687,7 +716,6 @@ struct LoopInterchange {
687716
});
688717
break;
689718
}
690-
MDNode *LoopID = TargetLoop->getLoopID();
691719
bool Interchanged = processLoop(LoopList, InnerLoopId, OuterLoopId,
692720
DependencyMatrix, CostMap);
693721
if (!Interchanged) {
@@ -710,29 +738,6 @@ struct LoopInterchange {
710738
Loop2Index[OuterLoop] = OuterLoopId;
711739
Loop2Index[InnerLoop] = InnerLoopId;
712740

713-
// Update the metadata.
714-
std::optional<MDNode *> MDNextOuterLoopID =
715-
makeFollowupLoopID(LoopID, {LLVMLoopInterchangeFollowupAll,
716-
LLVMLoopInterchangeFollowupNextOuter});
717-
std::optional<MDNode *> MDOuterLoopID =
718-
makeFollowupLoopID(LoopID, {LLVMLoopInterchangeFollowupAll,
719-
LLVMLoopInterchangeFollowupOuter});
720-
std::optional<MDNode *> MDInnerLoopID =
721-
makeFollowupLoopID(LoopID, {LLVMLoopInterchangeFollowupAll,
722-
LLVMLoopInterchangeFollowupInner});
723-
if (MDNextOuterLoopID) {
724-
if (NextOuterLoop) {
725-
NextOuterLoop->setLoopID(*MDNextOuterLoopID);
726-
} else {
727-
LLVM_DEBUG(dbgs()
728-
<< "New metadata for the next outer loop is ignored.\n");
729-
}
730-
}
731-
if (MDOuterLoopID)
732-
OuterLoop->setLoopID(*MDOuterLoopID);
733-
if (MDInnerLoopID)
734-
InnerLoop->setLoopID(*MDInnerLoopID);
735-
736741
// Add new elements, paying attention to the order.
737742
bool Valid = true;
738743
if (NextOuterLoop)

0 commit comments

Comments
 (0)