Two changes:
authorChris Lattner <sabre@nondot.org>
Thu, 17 Mar 2005 19:56:18 +0000 (19:56 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 17 Mar 2005 19:56:18 +0000 (19:56 +0000)
  1. Chain to the parent implementation of M/R analysis if we can't find
     any information.  It has some heuristics that often do well.
  2. Do not clear all flags, this can make invalid nodes by turning nodes
     that used to be collapsed into non-collapsed nodes (fixing crashes)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20659 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/DataStructure/DataStructureAA.cpp

index 62eb6639905aa08537f36ca03448d703a954b36c..74fdb1f590f5987b96919167cc3eac9d03dcc8b1 100644 (file)
@@ -174,13 +174,13 @@ AliasAnalysis::AliasResult DSAA::alias(const Value *V1, unsigned V1Size,
 AliasAnalysis::ModRefResult
 DSAA::getModRefInfo(CallSite CS, Value *P, unsigned Size) {
   Function *F = CS.getCalledFunction();
-  if (!F) return pointsToConstantMemory(P) ? Ref : ModRef;
-  if (F->isExternal()) return ModRef;
+  if (!F || F->isExternal())
+    return AliasAnalysis::getModRefInfo(CS, P, Size);
 
   // Clone the function TD graph, clearing off Mod/Ref flags
   const Function *csParent = CS.getInstruction()->getParent()->getParent();
   DSGraph TDGraph(TD->getDSGraph(*csParent));
-  TDGraph.maskNodeTypes(0);
+  TDGraph.maskNodeTypes(~(DSNode::Modified|DSNode::Read));
   
   // Insert the callee's BU graph into the TD graph
   const DSGraph &BUGraph = BU->getDSGraph(*F);