mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-11 16:37:42 +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:
parent
2aa51be083
commit
ee7eafa054
lib/Analysis/DataStructure
@ -53,6 +53,7 @@ static void DestroyFirstNodeOfPair(DSNode *N1, DSNode *N2) {
|
||||
assert(RanOnce && "Node on user set but cannot find the use!");
|
||||
}
|
||||
|
||||
N1->mergeInto(N2);
|
||||
N1->removeAllIncomingEdges();
|
||||
delete N1;
|
||||
}
|
||||
|
@ -21,6 +21,12 @@ bool AllocDSNode::isEquivalentTo(DSNode *Node) const {
|
||||
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 {
|
||||
if (GlobalDSNode *G = dyn_cast<GlobalDSNode>(Node)) {
|
||||
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]));
|
||||
}
|
||||
|
||||
AllocDSNode::AllocDSNode(AllocationInst *V)
|
||||
AllocDSNode::AllocDSNode(AllocationInst *V, bool isvarsize)
|
||||
: 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 {
|
||||
@ -232,7 +242,7 @@ string AllocDSNode::getCaption() const {
|
||||
|
||||
WriteTypeSymbolic(OS, getType(),
|
||||
Allocation->getParent()->getParent()->getParent());
|
||||
if (Allocation->isArrayAllocation())
|
||||
if (isVarSize)
|
||||
OS << "[ ]";
|
||||
return OS.str();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user