[llvm-commits] CVS: llvm/lib/Analysis/DataStructure/Local.cpp

Chris Lattner lattner at cs.uiuc.edu
Fri Feb 13 10:11:05 PST 2004


Changes in directory llvm/lib/Analysis/DataStructure:

Local.cpp updated: 1.78 -> 1.79

---
Log message:

Restructure code to handle memcpy/memmove


---
Diffs of the changes:  (+33 -28)

Index: llvm/lib/Analysis/DataStructure/Local.cpp
diff -u llvm/lib/Analysis/DataStructure/Local.cpp:1.78 llvm/lib/Analysis/DataStructure/Local.cpp:1.79
--- llvm/lib/Analysis/DataStructure/Local.cpp:1.78	Sat Feb  7 19:51:48 2004
+++ llvm/lib/Analysis/DataStructure/Local.cpp	Fri Feb 13 10:09:54 2004
@@ -17,6 +17,7 @@
 #include "llvm/Constants.h"
 #include "llvm/DerivedTypes.h"
 #include "llvm/Instructions.h"
+#include "llvm/Intrinsics.h"
 #include "llvm/Support/GetElementPtrTypeIterator.h"
 #include "llvm/Support/InstVisitor.h"
 #include "llvm/Target/TargetData.h"
@@ -456,39 +457,43 @@
   // Special case handling of certain libc allocation functions here.
   if (Function *F = CS.getCalledFunction())
     if (F->isExternal())
-      if (F->getName() == "calloc") {
-        setDestTo(*CS.getInstruction(),
-                  createNode()->setHeapNodeMarker()->setModifiedMarker());
-        return;
-      } else if (F->getName() == "realloc") {
-        DSNodeHandle RetNH = getValueDest(*CS.getInstruction());
-        RetNH.mergeWith(getValueDest(**CS.arg_begin()));
-        if (DSNode *N = RetNH.getNode())
-          N->setHeapNodeMarker()->setModifiedMarker()->setReadMarker();
-        return;
-      } else if (F->getName() == "memset") {
-        // Merge the first argument with the return value, and mark the memory
+      switch (F->getIntrinsicID()) {
+      case Intrinsic::memmove:
+      case Intrinsic::memcpy: {
+        // Merge the first & second arguments, and mark the memory read and
         // modified.
-        DSNodeHandle RetNH = getValueDest(*CS.getInstruction());
-        RetNH.mergeWith(getValueDest(**CS.arg_begin()));
-        if (DSNode *N = RetNH.getNode())
-          N->setModifiedMarker();
-        return;
-      } else if (F->getName() == "memmove") {
-        // Merge the first & second arguments with the result, and mark the
-        // memory read and modified.
-        DSNodeHandle RetNH = getValueDest(*CS.getInstruction());
-        RetNH.mergeWith(getValueDest(**CS.arg_begin()));
+        DSNodeHandle RetNH = getValueDest(**CS.arg_begin());
         RetNH.mergeWith(getValueDest(**(CS.arg_begin()+1)));
         if (DSNode *N = RetNH.getNode())
           N->setModifiedMarker()->setReadMarker();
         return;
-      } else if (F->getName() == "bzero") {
-        // Mark the memory modified.
-        DSNodeHandle H = getValueDest(**CS.arg_begin());
-        if (DSNode *N = H.getNode())
-          N->setModifiedMarker();
-        return;
+      }
+      default:
+        if (F->getName() == "calloc") {
+          setDestTo(*CS.getInstruction(),
+                    createNode()->setHeapNodeMarker()->setModifiedMarker());
+          return;
+        } else if (F->getName() == "realloc") {
+          DSNodeHandle RetNH = getValueDest(*CS.getInstruction());
+          RetNH.mergeWith(getValueDest(**CS.arg_begin()));
+          if (DSNode *N = RetNH.getNode())
+            N->setHeapNodeMarker()->setModifiedMarker()->setReadMarker();
+          return;
+        } else if (F->getName() == "memset") {
+          // Merge the first argument with the return value, and mark the memory
+          // modified.
+          DSNodeHandle RetNH = getValueDest(*CS.getInstruction());
+          RetNH.mergeWith(getValueDest(**CS.arg_begin()));
+          if (DSNode *N = RetNH.getNode())
+            N->setModifiedMarker();
+          return;
+        } else if (F->getName() == "bzero") {
+          // Mark the memory modified.
+          DSNodeHandle H = getValueDest(**CS.arg_begin());
+          if (DSNode *N = H.getNode())
+            N->setModifiedMarker();
+          return;
+        }
       }
 
 





More information about the llvm-commits mailing list