mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
Allow isDereferenceablePointer to look through some bitcasts
isDereferenceablePointer should not give up upon encountering any bitcast. If we're casting from a pointer to a larger type to a pointer to a small type, we can continue by examining the bitcast's operand. This missing capability was noted in a comment in the function. In order for this to work, isDereferenceablePointer now takes an optional DataLayout pointer (essentially all callers already had such a pointer available). Most code uses isDereferenceablePointer though isSafeToSpeculativelyExecute (which already took an optional DataLayout pointer), and to enable the LICM test case, LICM needs to actually provide its DL pointer to isSafeToSpeculativelyExecute (which it was not doing previously). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212686 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1130,7 +1130,7 @@ static bool isSafePHIToSpeculate(PHINode &PN,
|
||||
// If this pointer is always safe to load, or if we can prove that there
|
||||
// is already a load in the block, then we can move the load to the pred
|
||||
// block.
|
||||
if (InVal->isDereferenceablePointer() ||
|
||||
if (InVal->isDereferenceablePointer(DL) ||
|
||||
isSafeToLoadUnconditionally(InVal, TI, MaxAlign, DL))
|
||||
continue;
|
||||
|
||||
@@ -1198,8 +1198,8 @@ static bool isSafeSelectToSpeculate(SelectInst &SI,
|
||||
const DataLayout *DL = nullptr) {
|
||||
Value *TValue = SI.getTrueValue();
|
||||
Value *FValue = SI.getFalseValue();
|
||||
bool TDerefable = TValue->isDereferenceablePointer();
|
||||
bool FDerefable = FValue->isDereferenceablePointer();
|
||||
bool TDerefable = TValue->isDereferenceablePointer(DL);
|
||||
bool FDerefable = FValue->isDereferenceablePointer(DL);
|
||||
|
||||
for (User *U : SI.users()) {
|
||||
LoadInst *LI = dyn_cast<LoadInst>(U);
|
||||
|
Reference in New Issue
Block a user