Fix a bug in InstCombine where we would incorrectly attempt to construct a

bitcast between pointers of two different address spaces if they happened to have
the same pointer size.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@203862 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Owen Anderson
2014-03-13 22:51:43 +00:00
parent 43d5e074aa
commit d3fc1be4f6
2 changed files with 19 additions and 0 deletions

View File

@@ -335,6 +335,13 @@ static Instruction *InstCombineLoadCast(InstCombiner &IC, LoadInst &LI,
NewLoad->setAlignment(LI.getAlignment());
NewLoad->setAtomic(LI.getOrdering(), LI.getSynchScope());
// Now cast the result of the load.
PointerType *OldTy = dyn_cast<PointerType>(NewLoad->getType());
PointerType *NewTy = dyn_cast<PointerType>(LI.getType());
if (OldTy && NewTy &&
OldTy->getAddressSpace() != NewTy->getAddressSpace()) {
return new AddrSpaceCastInst(NewLoad, LI.getType());
}
return new BitCastInst(NewLoad, LI.getType());
}
}