Fix pr6198 by moving the isSized() check to an outer conditional.
authorBob Wilson <bob.wilson@apple.com>
Mon, 1 Feb 2010 17:41:44 +0000 (17:41 +0000)
committerBob Wilson <bob.wilson@apple.com>
Mon, 1 Feb 2010 17:41:44 +0000 (17:41 +0000)
The testcase from pr6198 does not crash for me -- I don't know what's up with
that -- so I'm not adding it to the tests.

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

lib/Transforms/Utils/Local.cpp

index 62c0ae0d844717b2084e4d21df79e90af9b1350e..7e7973ae0b737b3cc76533cdc2103e039c00186e 100644 (file)
@@ -95,13 +95,15 @@ bool llvm::isSafeToLoadUnconditionally(Value *V, Instruction *ScanFrom,
       BaseAlign = GV->getAlignment();
     }
   }
-  if (TD && BaseType && BaseAlign == 0)
-    BaseAlign = TD->getPrefTypeAlignment(BaseType);
 
-  if (BaseType && Align <= BaseAlign) {
-    if (!TD)
-      return true; // Loading directly from an alloca or global is OK.
-    if (BaseType->isSized()) {
+  if (BaseType && BaseType->isSized()) {
+    if (TD && BaseAlign == 0)
+      BaseAlign = TD->getPrefTypeAlignment(BaseType);
+
+    if (Align <= BaseAlign) {
+      if (!TD)
+        return true; // Loading directly from an alloca or global is OK.
+
       // Check if the load is within the bounds of the underlying object.
       const PointerType *AddrTy = cast<PointerType>(V->getType());
       uint64_t LoadSize = TD->getTypeStoreSize(AddrTy->getElementType());