mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-14 16:33:28 +00:00
A global variable with external weak linkage can be null, while
an alias could alias such a global variable. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42130 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9dbf8ed140
commit
892c7e4a23
@ -8936,8 +8936,12 @@ static Instruction *InstCombineLoadCast(InstCombiner &IC, LoadInst &LI) {
|
||||
/// specified pointer, we do a quick local scan of the basic block containing
|
||||
/// ScanFrom, to determine if the address is already accessed.
|
||||
static bool isSafeToLoadUnconditionally(Value *V, Instruction *ScanFrom) {
|
||||
// If it is an alloca or global variable, it is always safe to load from.
|
||||
if (isa<AllocaInst>(V) || isa<GlobalVariable>(V)) return true;
|
||||
// If it is an alloca it is always safe to load from.
|
||||
if (isa<AllocaInst>(V)) return true;
|
||||
|
||||
// Don't try to evaluate aliases. External weak GV can be null.
|
||||
if (const GlobalValue *GV = dyn_cast<GlobalVariable>(V))
|
||||
return !isa<GlobalAlias>(GV) && !GV->hasExternalWeakLinkage();
|
||||
|
||||
// Otherwise, be a little bit agressive by scanning the local block where we
|
||||
// want to check to see if the pointer is already being loaded or stored
|
||||
|
Loading…
x
Reference in New Issue
Block a user