mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-06 02:29:51 +00:00
llvm.memcpy.* has two distinct associated address spaces; the source address space, and the destination address space. Fix up the interface on MemIntrinsic and MemTransferInst to make this clear, and fix InstructionDereferencesPointer in LazyValueInfo.cpp to use the interface properly.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132356 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
cada2d0966
commit
69388e5a4a
@ -139,7 +139,7 @@ namespace llvm {
|
||||
return !getVolatileCst()->isZero();
|
||||
}
|
||||
|
||||
unsigned getAddressSpace() const {
|
||||
unsigned getDestAddressSpace() const {
|
||||
return cast<PointerType>(getRawDest()->getType())->getAddressSpace();
|
||||
}
|
||||
|
||||
@ -227,6 +227,10 @@ namespace llvm {
|
||||
/// value is guaranteed to be a pointer.
|
||||
Value *getSource() const { return getRawSource()->stripPointerCasts(); }
|
||||
|
||||
unsigned getSourceAddressSpace() const {
|
||||
return cast<PointerType>(getRawSource()->getType())->getAddressSpace();
|
||||
}
|
||||
|
||||
void setSource(Value *Ptr) {
|
||||
assert(getRawSource()->getType() == Ptr->getType() &&
|
||||
"setSource called with pointer of wrong type!");
|
||||
|
@ -589,16 +589,18 @@ static bool InstructionDereferencesPointer(Instruction *I, Value *Ptr) {
|
||||
}
|
||||
if (MemIntrinsic *MI = dyn_cast<MemIntrinsic>(I)) {
|
||||
if (MI->isVolatile()) return false;
|
||||
if (MI->getAddressSpace() != 0) return false;
|
||||
|
||||
// FIXME: check whether it has a valuerange that excludes zero?
|
||||
ConstantInt *Len = dyn_cast<ConstantInt>(MI->getLength());
|
||||
if (!Len || Len->isZero()) return false;
|
||||
|
||||
if (MI->getRawDest() == Ptr || MI->getDest() == Ptr)
|
||||
return true;
|
||||
if (MI->getDestAddressSpace() == 0)
|
||||
if (MI->getRawDest() == Ptr || MI->getDest() == Ptr)
|
||||
return true;
|
||||
if (MemTransferInst *MTI = dyn_cast<MemTransferInst>(MI))
|
||||
return MTI->getRawSource() == Ptr || MTI->getSource() == Ptr;
|
||||
if (MTI->getSourceAddressSpace() == 0)
|
||||
if (MTI->getRawSource() == Ptr || MTI->getSource() == Ptr)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user