1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 11:02:59 +02:00

Add support for tracking array allocations

llvm-svn: 2328
This commit is contained in:
Chris Lattner 2002-04-27 02:28:41 +00:00
parent 4e52f71340
commit 3f7a62a960
2 changed files with 13 additions and 2 deletions

View File

@ -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;
}

View File

@ -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();
}