mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-15 13:40:33 +00:00
RegionPrinter: Ignore back edges when layouting the graph
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126564 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f3a83d6d0b
commit
3091c92eed
@ -70,6 +70,32 @@ struct DOTGraphTraits<RegionInfo*> : public DOTGraphTraits<RegionNode*> {
|
||||
G->getTopLevelRegion());
|
||||
}
|
||||
|
||||
std::string getEdgeAttributes(RegionNode *srcNode,
|
||||
GraphTraits<RegionInfo*>::ChildIteratorType CI, RegionInfo *RI) {
|
||||
|
||||
RegionNode *destNode = *CI;
|
||||
|
||||
if (srcNode->isSubRegion() || destNode->isSubRegion())
|
||||
return "";
|
||||
|
||||
// In case of a backedge, do not use it to define the layout of the nodes.
|
||||
BasicBlock *srcBB = srcNode->getNodeAs<BasicBlock>();
|
||||
BasicBlock *destBB = destNode->getNodeAs<BasicBlock>();
|
||||
|
||||
Region *R = RI->getRegionFor(destBB);
|
||||
|
||||
while (R && R->getParent())
|
||||
if (R->getParent()->getEntry() == destBB)
|
||||
R = R->getParent();
|
||||
else
|
||||
break;
|
||||
|
||||
if (R->getEntry() == destBB && R->contains(srcBB))
|
||||
return "constraint=false";
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
// Print the cluster of the subregions. This groups the single basic blocks
|
||||
// and adds a different background color for each group.
|
||||
static void printRegionCluster(const Region *R, GraphWriter<RegionInfo*> &GW,
|
||||
|
Loading…
x
Reference in New Issue
Block a user