diff options
Diffstat (limited to 'lib/CodeGen/MachineInstr.cpp')
| -rw-r--r-- | lib/CodeGen/MachineInstr.cpp | 18 | 
1 files changed, 18 insertions, 0 deletions
diff --git a/lib/CodeGen/MachineInstr.cpp b/lib/CodeGen/MachineInstr.cpp index 2a6cb07dbd2d..81c6dace92e0 100644 --- a/lib/CodeGen/MachineInstr.cpp +++ b/lib/CodeGen/MachineInstr.cpp @@ -21,6 +21,7 @@  #include "llvm/ADT/SmallString.h"  #include "llvm/ADT/SmallVector.h"  #include "llvm/Analysis/AliasAnalysis.h" +#include "llvm/Analysis/Loads.h"  #include "llvm/Analysis/MemoryLocation.h"  #include "llvm/CodeGen/GlobalISel/RegisterBank.h"  #include "llvm/CodeGen/MachineBasicBlock.h" @@ -558,6 +559,23 @@ unsigned MachinePointerInfo::getAddrSpace() const {    return cast<PointerType>(V.get<const Value*>()->getType())->getAddressSpace();  } +/// isDereferenceable - Return true if V is always dereferenceable for  +/// Offset + Size byte. +bool MachinePointerInfo::isDereferenceable(unsigned Size, LLVMContext &C, +                                           const DataLayout &DL) const { +  if (!V.is<const Value*>()) +    return false; + +  const Value *BasePtr = V.get<const Value*>(); +  if (BasePtr == nullptr) +    return false; + +  return isDereferenceableAndAlignedPointer(BasePtr, 1, +                                            APInt(DL.getPointerSize(), +                                                  Offset + Size), +                                            DL); +} +  /// getConstantPool - Return a MachinePointerInfo record that refers to the  /// constant pool.  MachinePointerInfo MachinePointerInfo::getConstantPool(MachineFunction &MF) {  | 
