mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-09 13:33:17 +00:00
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
This commit is contained in:
parent
38b5788544
commit
6e84bd7d59
@ -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();
|
||||
|
Loading…
x
Reference in New Issue
Block a user