[llvm-commits] [llvm] r138619 - /llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp

Benjamin Kramer benny.kra at googlemail.com
Thu Aug 25 19:25:55 PDT 2011


Author: d0k
Date: Thu Aug 25 21:25:55 2011
New Revision: 138619

URL: http://llvm.org/viewvc/llvm-project?rev=138619&view=rev
Log:
Address review comments.

- Reword comments.
- Allow undefined behavior interfering with undefined behavior.
- Add address space checks.

Modified:
    llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp

Modified: llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp?rev=138619&r1=138618&r2=138619&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp (original)
+++ llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp Thu Aug 25 21:25:55 2011
@@ -2729,7 +2729,7 @@
   if (!C)
     return false;
 
-  if (!I->hasOneUse()) // FIXME: There is no reason to limit this to one use.
+  if (!I->hasOneUse()) // Only look at single-use instructions, for compile time
     return false;
 
   if (C->isNullValue()) {
@@ -2738,8 +2738,7 @@
     // Now make sure that there are no instructions in between that can alter
     // control flow (eg. calls)
     for (BasicBlock::iterator i = ++BasicBlock::iterator(I); &*i != Use; ++i)
-      if (i == I->getParent()->end() ||
-          !i->isSafeToSpeculativelyExecute())
+      if (i == I->getParent()->end() || i->mayHaveSideEffects())
         return false;
 
     // Look through GEPs. A load from a GEP derived from NULL is still undefined
@@ -2751,13 +2750,13 @@
     if (BitCastInst *BC = dyn_cast<BitCastInst>(Use))
       return passingValueIsAlwaysUndefined(V, BC);
 
-    // load from null is undefined
-    if (isa<LoadInst>(Use))
-      return true;
-
-    // store to null is undef
-    if (isa<StoreInst>(Use) && Use->getOperand(1) == I)
-      return true;
+    // Load from null is undefined.
+    if (LoadInst *LI = dyn_cast<LoadInst>(Use))
+      return LI->getPointerAddressSpace() == 0;
+
+    // Store to null is undefined.
+    if (StoreInst *SI = dyn_cast<StoreInst>(Use))
+      return SI->getPointerAddressSpace() == 0 && SI->getPointerOperand() == I;
   }
   return false;
 }





More information about the llvm-commits mailing list