mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 05:01:59 +01:00
[MemorySSA] Split PtrIntPair as this fails on win/arm.
Summary: Split PtrIntPair into Instruction and OptionalAlias<Result>. The latter needs 3 bits, which appear unavailable on certain archs. Subscribers: sanjoy, jlebar, Prazek, llvm-commits, kristof.beyls Differential Revision: https://reviews.llvm.org/D44268 llvm-svn: 327046
This commit is contained in:
parent
d437327e14
commit
19e6cd3171
@ -249,7 +249,7 @@ public:
|
||||
DECLARE_TRANSPARENT_OPERAND_ACCESSORS(MemoryAccess);
|
||||
|
||||
/// \brief Get the instruction that this MemoryUse represents.
|
||||
Instruction *getMemoryInst() const { return MemoryAliasPair.getPointer(); }
|
||||
Instruction *getMemoryInst() const { return MemoryInstruction; }
|
||||
|
||||
/// \brief Get the access that produces the memory state used by this Use.
|
||||
MemoryAccess *getDefiningAccess() const { return getOperand(0); }
|
||||
@ -267,7 +267,7 @@ public:
|
||||
// Retrieve AliasResult type of the optimized access. Ideally this would be
|
||||
// returned by the caching walker and may go away in the future.
|
||||
Optional<AliasResult> getOptimizedAccessType() const {
|
||||
return threeBitIntToOptionalAliasResult(MemoryAliasPair.getInt());
|
||||
return OptimizedAccessAlias;
|
||||
}
|
||||
|
||||
/// \brief Reset the ID of what this MemoryUse was optimized to, causing it to
|
||||
@ -281,8 +281,8 @@ protected:
|
||||
|
||||
MemoryUseOrDef(LLVMContext &C, MemoryAccess *DMA, unsigned Vty,
|
||||
DeleteValueTy DeleteValue, Instruction *MI, BasicBlock *BB)
|
||||
: MemoryAccess(C, Vty, DeleteValue, BB, 1),
|
||||
MemoryAliasPair(MI, optionalAliasResultToThreeBitInt(MayAlias)) {
|
||||
: MemoryAccess(C, Vty, DeleteValue, BB, 1), MemoryInstruction(MI),
|
||||
OptimizedAccessAlias(MayAlias) {
|
||||
setDefiningAccess(DMA);
|
||||
}
|
||||
|
||||
@ -290,7 +290,7 @@ protected:
|
||||
~MemoryUseOrDef() = default;
|
||||
|
||||
void setOptimizedAccessType(Optional<AliasResult> AR) {
|
||||
MemoryAliasPair.setInt(optionalAliasResultToThreeBitInt(AR));
|
||||
OptimizedAccessAlias = AR;
|
||||
}
|
||||
|
||||
void setDefiningAccess(MemoryAccess *DMA, bool Optimized = false,
|
||||
@ -304,22 +304,8 @@ protected:
|
||||
}
|
||||
|
||||
private:
|
||||
// Pair of memory instruction and Optional<AliasResult> with optimized access.
|
||||
PointerIntPair<Instruction *, 3, int> MemoryAliasPair;
|
||||
|
||||
static int optionalAliasResultToThreeBitInt(Optional<AliasResult> OAR) {
|
||||
if (OAR == None)
|
||||
return 4;
|
||||
return (int)OAR.getValue();
|
||||
}
|
||||
|
||||
static Optional<AliasResult> threeBitIntToOptionalAliasResult(int I) {
|
||||
assert((I <= 4 && I >= 0) &&
|
||||
"Invalid value for converting to an Optional<AliasResult>");
|
||||
if (I == 4)
|
||||
return None;
|
||||
return (AliasResult)I;
|
||||
}
|
||||
Instruction *MemoryInstruction;
|
||||
Optional<AliasResult> OptimizedAccessAlias;
|
||||
};
|
||||
|
||||
template <>
|
||||
|
Loading…
x
Reference in New Issue
Block a user