Fix pr6198 by moving the isSized() check to an outer conditional.

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
This commit is contained in:
Bob Wilson 2010-02-01 17:41:44 +00:00
parent d75ff3104c
commit 3cb8509b68

View 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());