mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-10-25 10:27:04 +00:00
Added invariant field to the DAG.getLoad method and changed all calls.
When this field is true it means that the load is from constant (runt-time or compile-time) and so can be hoisted from loops or moved around other memory accesses git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144100 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -95,8 +95,10 @@ public:
|
||||
MOVolatile = 4,
|
||||
/// The memory access is non-temporal.
|
||||
MONonTemporal = 8,
|
||||
/// The memory access is invariant.
|
||||
MOInvariant = 16,
|
||||
// This is the number of bits we need to represent flags.
|
||||
MOMaxBits = 4
|
||||
MOMaxBits = 5
|
||||
};
|
||||
|
||||
/// MachineMemOperand - Construct an MachineMemOperand object with the
|
||||
@@ -141,6 +143,7 @@ public:
|
||||
bool isStore() const { return Flags & MOStore; }
|
||||
bool isVolatile() const { return Flags & MOVolatile; }
|
||||
bool isNonTemporal() const { return Flags & MONonTemporal; }
|
||||
bool isInvariant() const { return Flags & MOInvariant; }
|
||||
|
||||
/// refineAlignment - Update this MachineMemOperand to reflect the alignment
|
||||
/// of MMO, if it has a greater alignment. This must only be used when the
|
||||
|
||||
@@ -650,7 +650,7 @@ public:
|
||||
///
|
||||
SDValue getLoad(EVT VT, DebugLoc dl, SDValue Chain, SDValue Ptr,
|
||||
MachinePointerInfo PtrInfo, bool isVolatile,
|
||||
bool isNonTemporal, unsigned Alignment,
|
||||
bool isNonTemporal, bool isInvariant, unsigned Alignment,
|
||||
const MDNode *TBAAInfo = 0);
|
||||
SDValue getExtLoad(ISD::LoadExtType ExtType, DebugLoc dl, EVT VT,
|
||||
SDValue Chain, SDValue Ptr, MachinePointerInfo PtrInfo,
|
||||
@@ -663,8 +663,8 @@ public:
|
||||
EVT VT, DebugLoc dl,
|
||||
SDValue Chain, SDValue Ptr, SDValue Offset,
|
||||
MachinePointerInfo PtrInfo, EVT MemVT,
|
||||
bool isVolatile, bool isNonTemporal, unsigned Alignment,
|
||||
const MDNode *TBAAInfo = 0);
|
||||
bool isVolatile, bool isNonTemporal, bool isInvariant,
|
||||
unsigned Alignment, const MDNode *TBAAInfo = 0);
|
||||
SDValue getLoad(ISD::MemIndexedMode AM, ISD::LoadExtType ExtType,
|
||||
EVT VT, DebugLoc dl,
|
||||
SDValue Chain, SDValue Ptr, SDValue Offset,
|
||||
|
||||
@@ -917,12 +917,13 @@ public:
|
||||
// with MachineMemOperand information.
|
||||
bool isVolatile() const { return (SubclassData >> 5) & 1; }
|
||||
bool isNonTemporal() const { return (SubclassData >> 6) & 1; }
|
||||
bool isInvariant() const { return (SubclassData >> 7) & 1; }
|
||||
|
||||
AtomicOrdering getOrdering() const {
|
||||
return AtomicOrdering((SubclassData >> 7) & 15);
|
||||
return AtomicOrdering((SubclassData >> 8) & 15);
|
||||
}
|
||||
SynchronizationScope getSynchScope() const {
|
||||
return SynchronizationScope((SubclassData >> 11) & 1);
|
||||
return SynchronizationScope((SubclassData >> 12) & 1);
|
||||
}
|
||||
|
||||
/// Returns the SrcValue and offset that describes the location of the access
|
||||
@@ -993,8 +994,8 @@ class AtomicSDNode : public MemSDNode {
|
||||
"Ordering may not require more than 4 bits!");
|
||||
assert((SynchScope & 1) == SynchScope &&
|
||||
"SynchScope may not require more than 1 bit!");
|
||||
SubclassData |= Ordering << 7;
|
||||
SubclassData |= SynchScope << 11;
|
||||
SubclassData |= Ordering << 8;
|
||||
SubclassData |= SynchScope << 12;
|
||||
assert(getOrdering() == Ordering && "Ordering encoding error!");
|
||||
assert(getSynchScope() == SynchScope && "Synch-scope encoding error!");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user