mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-26 13:36:28 +00:00
Make this work better for constants that aren't necessarily in ANY graph, such as null pointers
llvm-svn: 8628
This commit is contained in:
parent
5af4f73620
commit
6a460d88d3
@ -33,6 +33,7 @@ namespace {
|
||||
const DSGraph *TDGraph;
|
||||
|
||||
DSNode *getNodeForValue(Value *V);
|
||||
bool isNodeForValueCollapsed(Value *V);
|
||||
public:
|
||||
/// Driver functions to compute the Load/Store Dep. Graph per function.
|
||||
bool runOnFunction(Function& F);
|
||||
@ -90,14 +91,24 @@ void DSGraphStats::countCallees(const Function& F) {
|
||||
|
||||
DSNode *DSGraphStats::getNodeForValue(Value *V) {
|
||||
const DSGraph *G = TDGraph;
|
||||
if (isa<GlobalValue>(V))
|
||||
if (isa<GlobalValue>(V) || isa<Constant>(V))
|
||||
G = TDGraph->getGlobalsGraph();
|
||||
|
||||
return G->getNodeForValue(V).getNode();
|
||||
const DSGraph::ScalarMapTy &ScalarMap = G->getScalarMap();
|
||||
DSGraph::ScalarMapTy::const_iterator I = ScalarMap.find(V);
|
||||
if (I != ScalarMap.end())
|
||||
return I->second.getNode();
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool DSGraphStats::isNodeForValueCollapsed(Value *V) {
|
||||
if (DSNode *N = getNodeForValue(V))
|
||||
return N->isNodeCompletelyFolded();
|
||||
return false;
|
||||
}
|
||||
|
||||
void DSGraphStats::visitLoad(LoadInst &LI) {
|
||||
if (getNodeForValue(LI.getOperand(0))->isNodeCompletelyFolded()) {
|
||||
if (isNodeForValueCollapsed(LI.getOperand(0))) {
|
||||
NumUntypedMemAccesses++;
|
||||
} else {
|
||||
NumTypedMemAccesses++;
|
||||
@ -105,7 +116,7 @@ void DSGraphStats::visitLoad(LoadInst &LI) {
|
||||
}
|
||||
|
||||
void DSGraphStats::visitStore(StoreInst &SI) {
|
||||
if (getNodeForValue(SI.getOperand(1))->isNodeCompletelyFolded()) {
|
||||
if (isNodeForValueCollapsed(SI.getOperand(1))) {
|
||||
NumUntypedMemAccesses++;
|
||||
} else {
|
||||
NumTypedMemAccesses++;
|
||||
|
Loading…
Reference in New Issue
Block a user