diff options
author | Chris Lattner <sabre@nondot.org> | 2005-02-25 01:27:48 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2005-02-25 01:27:48 +0000 |
commit | 6e84bd7d59e3534d4bd385253cc5a882d34e15a0 (patch) | |
tree | 3cb8ce54b4a46bc27b8d26324d492a4e8550ad6c /lib/Analysis/DataStructure/Local.cpp | |
parent | 38b57885441f0db3574d2890550f956cf4fc025b (diff) |
Handle null a bit more carefully.
Actually teach dsa about select instructions. This doesn't affect the
graph in any way other than not setting a spurious U marker on pointer
nodes that are selected.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20324 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/DataStructure/Local.cpp')
-rw-r--r-- | lib/Analysis/DataStructure/Local.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/lib/Analysis/DataStructure/Local.cpp b/lib/Analysis/DataStructure/Local.cpp index 642de03697..b2a905e0e5 100644 --- a/lib/Analysis/DataStructure/Local.cpp +++ b/lib/Analysis/DataStructure/Local.cpp @@ -104,6 +104,7 @@ namespace { void handleAlloc(AllocationInst &AI, bool isHeap); void visitPHINode(PHINode &PN); + void visitSelectInst(SelectInst &SI); void visitGetElementPtrInst(User &GEP); void visitReturnInst(ReturnInst &RI); @@ -316,6 +317,14 @@ void GraphBuilder::visitPHINode(PHINode &PN) { PNDest.mergeWith(getValueDest(*PN.getIncomingValue(i))); } +void GraphBuilder::visitSelectInst(SelectInst &SI) { + if (!isPointerType(SI.getType())) return; // Only pointer Selects + + DSNodeHandle &Dest = ScalarMap[&SI]; + Dest.mergeWith(getValueDest(*SI.getOperand(1))); + Dest.mergeWith(getValueDest(*SI.getOperand(2))); +} + void GraphBuilder::visitGetElementPtrInst(User &GEP) { DSNodeHandle Value = getValueDest(*GEP.getOperand(0)); if (Value.isNull()) @@ -430,7 +439,8 @@ void GraphBuilder::visitGetElementPtrInst(User &GEP) { void GraphBuilder::visitLoadInst(LoadInst &LI) { DSNodeHandle Ptr = getValueDest(*LI.getOperand(0)); - if (Ptr.getNode() == 0) return; + if (Ptr.isNull()) + Ptr = createNode(); // Make that the node is read from... Ptr.getNode()->setReadMarker(); |