mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-19 08:24:12 +00:00
Add target flags to MachineMemOperands.
This seems to me an obvious place to allow target passes to annotate memory operations. There are plenty of bits, and I'm not aware of another good way for early target passes to propagate hints along to later passes. Target independent transforms can simply preserve them, the way they preserve the other flags. Like MachineMemOperands in general, if the target flags are lost we must still generate correct code. This has lots of uses, but I want this flexibility now to make it easier to work with the new MachineTraceMetrics analysis. MachineTraceMetrics can gather a lot of information about instructions based on the surrounding code. This information can be used to influence postRA machine passes that don't work on SSA form. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@180666 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d427132a34
commit
29f198c9bf
@ -99,8 +99,11 @@ public:
|
||||
MONonTemporal = 8,
|
||||
/// The memory access is invariant.
|
||||
MOInvariant = 16,
|
||||
// Target hints allow target passes to annotate memory operations.
|
||||
MOTargetStartBit = 5,
|
||||
MOTargetNumBits = 3,
|
||||
// This is the number of bits we need to represent flags.
|
||||
MOMaxBits = 5
|
||||
MOMaxBits = 8
|
||||
};
|
||||
|
||||
/// MachineMemOperand - Construct an MachineMemOperand object with the
|
||||
@ -123,6 +126,9 @@ public:
|
||||
/// getFlags - Return the raw flags of the source value, \see MemOperandFlags.
|
||||
unsigned int getFlags() const { return Flags & ((1 << MOMaxBits) - 1); }
|
||||
|
||||
/// Bitwise OR the current flags with the given flags.
|
||||
void setFlags(unsigned f) { Flags |= (f & ((1 << MOMaxBits) - 1)); }
|
||||
|
||||
/// getOffset - For normal values, this is a byte offset added to the base
|
||||
/// address. For PseudoSourceValue::FPRel values, this is the FrameIndex
|
||||
/// number.
|
||||
|
Loading…
x
Reference in New Issue
Block a user