Implement the "unknown flag" which mainly consists of aligning printing code

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4490 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2002-11-02 00:36:03 +00:00
parent 7a0b5bb7ab
commit 5af344d79d
4 changed files with 33 additions and 25 deletions

View File

@ -61,13 +61,14 @@ class DSNode {
void operator=(const DSNode &); // DO NOT IMPLEMENT
public:
enum NodeTy {
ShadowNode = 0, // Nothing is known about this node...
AllocaNode = 1 << 0, // This node was allocated with alloca
NewNode = 1 << 1, // This node was allocated with malloc
GlobalNode = 1 << 2, // This node was allocated by a global var decl
Incomplete = 1 << 3, // This node may not be complete
Modified = 1 << 4, // This node is modified in this context
Read = 1 << 5, // This node is read in this context
ShadowNode = 0, // Nothing is known about this node...
AllocaNode = 1 << 0, // This node was allocated with alloca
NewNode = 1 << 1, // This node was allocated with malloc
GlobalNode = 1 << 2, // This node was allocated by a global var decl
UnknownNode = 1 << 3, // This node points to unknown allocated memory
Incomplete = 1 << 4, // This node may not be complete
Modified = 1 << 5, // This node is modified in this context
Read = 1 << 6, // This node is read in this context
};
/// NodeType - A union of the above bits. "Shadow" nodes do not add any flags

View File

@ -61,13 +61,14 @@ class DSNode {
void operator=(const DSNode &); // DO NOT IMPLEMENT
public:
enum NodeTy {
ShadowNode = 0, // Nothing is known about this node...
AllocaNode = 1 << 0, // This node was allocated with alloca
NewNode = 1 << 1, // This node was allocated with malloc
GlobalNode = 1 << 2, // This node was allocated by a global var decl
Incomplete = 1 << 3, // This node may not be complete
Modified = 1 << 4, // This node is modified in this context
Read = 1 << 5, // This node is read in this context
ShadowNode = 0, // Nothing is known about this node...
AllocaNode = 1 << 0, // This node was allocated with alloca
NewNode = 1 << 1, // This node was allocated with malloc
GlobalNode = 1 << 2, // This node was allocated by a global var decl
UnknownNode = 1 << 3, // This node points to unknown allocated memory
Incomplete = 1 << 4, // This node may not be complete
Modified = 1 << 5, // This node is modified in this context
Read = 1 << 6, // This node is read in this context
};
/// NodeType - A union of the above bits. "Shadow" nodes do not add any flags

View File

@ -369,12 +369,17 @@ void GraphBuilder::visitCallInst(CallInst &CI) {
/// Handle casts...
void GraphBuilder::visitCastInst(CastInst &CI) {
if (isPointerType(CI.getType())) {
if (isPointerType(CI.getOperand(0)->getType()))
if (isPointerType(CI.getType()))
if (isPointerType(CI.getOperand(0)->getType())) {
// Cast one pointer to the other, just act like a copy instruction
setDestTo(CI, getValueDest(*CI.getOperand(0)));
else
; // FIXME: "Other" node
}
} else {
// Cast something (floating point, small integer) to a pointer. We need
// to track the fact that the node points to SOMETHING, just something we
// don't know about. Make an "Unknown" node.
//
setDestTo(CI, createNode(DSNode::UnknownNode));
}
}

View File

@ -36,12 +36,13 @@ static string getCaption(const DSNode *N, const DSGraph *G) {
OS << "\n";
}
if (N->NodeType & DSNode::AllocaNode) OS << "A";
if (N->NodeType & DSNode::NewNode ) OS << "N";
if (N->NodeType & DSNode::GlobalNode) OS << "G";
if (N->NodeType & DSNode::Incomplete) OS << "I";
if (N->NodeType & DSNode::Modified ) OS << "M";
if (N->NodeType & DSNode::Read ) OS << "R";
if (N->NodeType & DSNode::AllocaNode ) OS << "A";
if (N->NodeType & DSNode::NewNode ) OS << "N";
if (N->NodeType & DSNode::GlobalNode ) OS << "G";
if (N->NodeType & DSNode::UnknownNode) OS << "U";
if (N->NodeType & DSNode::Incomplete ) OS << "I";
if (N->NodeType & DSNode::Modified ) OS << "M";
if (N->NodeType & DSNode::Read ) OS << "R";
for (unsigned i = 0, e = N->getGlobals().size(); i != e; ++i) {
WriteAsOperand(OS, N->getGlobals()[i], false, true, M);