diff options
author | Bob Wilson <bob.wilson@apple.com> | 2010-02-01 17:41:44 +0000 |
---|---|---|
committer | Bob Wilson <bob.wilson@apple.com> | 2010-02-01 17:41:44 +0000 |
commit | 3cb8509b680209c79632d7445709452f28213057 (patch) | |
tree | 20ea8e1fa3a6a4c8e77f528aadfe6524c2193005 /lib/Transforms/Utils | |
parent | d75ff3104c2298ecb4abb18fb4bfc3f20a9099f8 (diff) | |
download | external_llvm-3cb8509b680209c79632d7445709452f28213057.zip external_llvm-3cb8509b680209c79632d7445709452f28213057.tar.gz external_llvm-3cb8509b680209c79632d7445709452f28213057.tar.bz2 |
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
Diffstat (limited to 'lib/Transforms/Utils')
-rw-r--r-- | lib/Transforms/Utils/Local.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/lib/Transforms/Utils/Local.cpp b/lib/Transforms/Utils/Local.cpp index 62c0ae0..7e7973a 100644 --- a/lib/Transforms/Utils/Local.cpp +++ b/lib/Transforms/Utils/Local.cpp @@ -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()); |