Temporarily disabling memset forming optimization. Add an option.
authorEvan Cheng <evan.cheng@apple.com>
Mon, 24 Mar 2008 05:28:38 +0000 (05:28 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Mon, 24 Mar 2008 05:28:38 +0000 (05:28 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48720 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/GVN.cpp

index a3a33237a368c6b75890f91dfd07670d3b0e1d73..a9445dd853024f9fd8ac8a0c321dcb9a09a1d147 100644 (file)
@@ -32,6 +32,7 @@
 #include "llvm/Analysis/AliasAnalysis.h"
 #include "llvm/Analysis/MemoryDependenceAnalysis.h"
 #include "llvm/Support/CFG.h"
+#include "llvm/Support/CommandLine.h"
 #include "llvm/Support/Compiler.h"
 #include "llvm/Support/GetElementPtrTypeIterator.h"
 #include "llvm/Target/TargetData.h"
@@ -41,6 +42,12 @@ STATISTIC(NumGVNInstr, "Number of instructions deleted");
 STATISTIC(NumGVNLoad, "Number of loads deleted");
 STATISTIC(NumMemSetInfer, "Number of memsets inferred");
 
+namespace {
+  cl::opt<bool>
+  FormMemSet("form-memset-from-stores",
+             cl::desc("Transform straight-line stores to memsets"),
+             cl::init(false), cl::Hidden);
+}
 
 //===----------------------------------------------------------------------===//
 //                         ValueTable Class
@@ -1102,6 +1109,7 @@ static bool IsPointerAtOffset(Value *Ptr1, Value *Ptr2, uint64_t Offset,
 /// neighboring locations of memory.  If it sees enough consequtive ones
 /// (currently 4) it attempts to merge them together into a memcpy/memset.
 bool GVN::processStore(StoreInst *SI, SmallVectorImpl<Instruction*> &toErase) {
+  if (!FormMemSet) return false;
   if (SI->isVolatile()) return false;
   
   // There are two cases that are interesting for this code to handle: memcpy