diff options
author | Andrew Lenharth <andrewl@lenharth.org> | 2006-04-18 19:54:11 +0000 |
---|---|---|
committer | Andrew Lenharth <andrewl@lenharth.org> | 2006-04-18 19:54:11 +0000 |
commit | 2dbf23afb409fea7b09081ac115fe495259a843d (patch) | |
tree | 05380fa15324756c6864ebe619397ac60200dfed /lib/Analysis/DataStructure | |
parent | 80f362a48f27958c1ce9145638884283d9e9bbe2 (diff) |
llvm.memc* improvements. helps PA a lot in some specmarks
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27811 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/DataStructure')
-rw-r--r-- | lib/Analysis/DataStructure/Local.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/lib/Analysis/DataStructure/Local.cpp b/lib/Analysis/DataStructure/Local.cpp index f191bb3159..9afc9661a6 100644 --- a/lib/Analysis/DataStructure/Local.cpp +++ b/lib/Analysis/DataStructure/Local.cpp @@ -553,14 +553,21 @@ void GraphBuilder::visitCallSite(CallSite CS) { // targets pointers alias, but rather merge the out edges of the graphs // for the pointers according to the type merging of the graphs. //Simply merging the two graphs is a crude approximation to this. + //Instead, copy the src pointer graph, then merge the copy with the + //dest pointer, thus avoiding contaminating the src with info from the dest //I might be wrong though. // Merge the first & second arguments, and mark the memory read and - // modified. - DSNodeHandle RetNH = getValueDest(**CS.arg_begin()); - RetNH.mergeWith(getValueDest(**(CS.arg_begin()+1))); + // modified. Preserve second graph + DSNodeHandle RetNH = getValueDest(**CS.arg_begin()); + DSNodeHandle SrcNH = getValueDest(**(CS.arg_begin()+1)); + DSNodeHandle Copy( new DSNode(*SrcNH.getNode(), SrcNH.getNode()->getParentGraph()), + SrcNH.getOffset()); + RetNH.mergeWith(Copy); if (DSNode *N = RetNH.getNode()) - N->setModifiedMarker()->setReadMarker(); + N->setModifiedMarker(); + if (DSNode *N = SrcNH.getNode()) + N->setReadMarker(); return; } case Intrinsic::memset_i32: |