Disable loop idiom recognition of memset/memcpy if the function being compiled
authorChad Rosier <mcrosier@apple.com>
Fri, 15 Jul 2011 18:25:04 +0000 (18:25 +0000)
committerChad Rosier <mcrosier@apple.com>
Fri, 15 Jul 2011 18:25:04 +0000 (18:25 +0000)
is named after a common idiom (i.e., memset/memcpy).  Otherwise, we can run into
infinite recursion.  Ideally, the user should use the correct -fno-builtin flag,
but in case they don't we should play nicely.
rdar://9763412

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

lib/Transforms/Scalar/LoopIdiomRecognize.cpp

index a7bc0e0b43791dede1b56d4ed41b8bf67378135b..a0e41d9a977216dc3cdf101c4f9126018c5c2e96 100644 (file)
@@ -173,6 +173,11 @@ static void deleteIfDeadInstruction(Value *V, ScalarEvolution &SE) {
 bool LoopIdiomRecognize::runOnLoop(Loop *L, LPPassManager &LPM) {
   CurLoop = L;
 
+  // Disable loop idiom recognition if the function's name is a common idiom. 
+  StringRef Name = L->getHeader()->getParent()->getName();
+  if (Name == "memset" || Name == "memcpy")
+    return false;
+
   // The trip count of the loop must be analyzable.
   SE = &getAnalysis<ScalarEvolution>();
   if (!SE->hasLoopInvariantBackedgeTakenCount(L))