mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-20 11:26:35 +00:00
Add support for tracking array allocations
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2328 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -53,6 +53,7 @@ static void DestroyFirstNodeOfPair(DSNode *N1, DSNode *N2) {
|
|||||||
assert(RanOnce && "Node on user set but cannot find the use!");
|
assert(RanOnce && "Node on user set but cannot find the use!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
N1->mergeInto(N2);
|
||||||
N1->removeAllIncomingEdges();
|
N1->removeAllIncomingEdges();
|
||||||
delete N1;
|
delete N1;
|
||||||
}
|
}
|
||||||
|
@@ -21,6 +21,12 @@ bool AllocDSNode::isEquivalentTo(DSNode *Node) const {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AllocDSNode::mergeInto(DSNode *Node) const {
|
||||||
|
// Make sure the merged node is variable size if this node is var size
|
||||||
|
AllocDSNode *N = cast<AllocDSNode>(Node);
|
||||||
|
N->isVarSize |= isVarSize;
|
||||||
|
}
|
||||||
|
|
||||||
bool GlobalDSNode::isEquivalentTo(DSNode *Node) const {
|
bool GlobalDSNode::isEquivalentTo(DSNode *Node) const {
|
||||||
if (GlobalDSNode *G = dyn_cast<GlobalDSNode>(Node)) {
|
if (GlobalDSNode *G = dyn_cast<GlobalDSNode>(Node)) {
|
||||||
if (G->Val != Val) return false;
|
if (G->Val != Val) return false;
|
||||||
@@ -217,8 +223,12 @@ void DSNode::mapNode(map<const DSNode*, DSNode*> &NodeMap, const DSNode *Old) {
|
|||||||
(ShadowDSNode*)NodeMap[Old->SynthNodes[i].second]));
|
(ShadowDSNode*)NodeMap[Old->SynthNodes[i].second]));
|
||||||
}
|
}
|
||||||
|
|
||||||
AllocDSNode::AllocDSNode(AllocationInst *V)
|
AllocDSNode::AllocDSNode(AllocationInst *V, bool isvarsize)
|
||||||
: DSNode(NewNode, V->getType()->getElementType()), Allocation(V) {
|
: DSNode(NewNode, V->getType()->getElementType()), Allocation(V) {
|
||||||
|
|
||||||
|
// Is variable size if incoming flag says so, or if allocation is var size
|
||||||
|
// already.
|
||||||
|
isVarSize = isvarsize || !isa<Constant>(V->getArraySize());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AllocDSNode::isAllocaNode() const {
|
bool AllocDSNode::isAllocaNode() const {
|
||||||
@@ -232,7 +242,7 @@ string AllocDSNode::getCaption() const {
|
|||||||
|
|
||||||
WriteTypeSymbolic(OS, getType(),
|
WriteTypeSymbolic(OS, getType(),
|
||||||
Allocation->getParent()->getParent()->getParent());
|
Allocation->getParent()->getParent()->getParent());
|
||||||
if (Allocation->isArrayAllocation())
|
if (isVarSize)
|
||||||
OS << "[ ]";
|
OS << "[ ]";
|
||||||
return OS.str();
|
return OS.str();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user