mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-12-20 03:17:48 +00:00
Revert "r232027 - Add infrastructure for support of multiple memory constraints"
This (r232027) has caused PR22883; so it seems those bits might be used by something else after all. Reverting until we can figure out what else to do. Original commit message: The operand flag word for ISD::INLINEASM nodes now contains a 15-bit memory constraint ID when the operand kind is Kind_Mem. This constraint ID is a numeric equivalent to the constraint code string and is converted with a target specific hook in TargetLowering. This patch maps all memory constraints to InlineAsm::Constraint_m so there is no functional change at this point. It just proves that using these previously unused bits in the encoding of the flag word doesn't break anything. The next patch will make each target preserve the current mapping of everything to Constraint_m for itself while changing the target independent implementation of the hook to return Constraint_Unknown appropriately. Each target will then be adapted in separate patches to use appropriate Constraint_* values. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@232093 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -189,19 +189,6 @@ public:
|
||||
|
||||
// These are helper methods for dealing with flags in the INLINEASM SDNode
|
||||
// in the backend.
|
||||
//
|
||||
// The encoding of the flag word is currently:
|
||||
// Bits 2-0 - A Kind_* value indicating the kind of the operand.
|
||||
// Bits 15-3 - The number of SDNode operands associated with this inline
|
||||
// assembly operand.
|
||||
// If bits 2-0 are Kind_Mem:
|
||||
// Bit 31 - 0
|
||||
// Bit 30-16 - A Constraint_* value indicating the original constraint
|
||||
// code.
|
||||
// Else if bit 31 is set:
|
||||
// Bit 30-16 - The operand number that this operand must match.
|
||||
// Else if bit 31 is clear:
|
||||
// Bit 30-16 - The register class ID to use for the operand.
|
||||
|
||||
enum : uint32_t {
|
||||
// Fixed operands on an INLINEASM SDNode.
|
||||
@@ -233,17 +220,6 @@ public:
|
||||
Kind_Imm = 5, // Immediate.
|
||||
Kind_Mem = 6, // Memory operand, "m".
|
||||
|
||||
// Memory constraint codes.
|
||||
// These could be tablegenerated but there's little need to do that since
|
||||
// there's plenty of space in the encoding to support the union of all
|
||||
// constraint codes for all targets.
|
||||
Constraint_Unknown = 0,
|
||||
Constraint_m,
|
||||
Constraint_o, // Unused at the moment since Constraint_m is always used.
|
||||
Constraint_v, // Unused at the moment since Constraint_m is always used.
|
||||
Constraints_Max = Constraint_v,
|
||||
Constraints_ShiftAmount = 16,
|
||||
|
||||
Flag_MatchingOperand = 0x80000000
|
||||
};
|
||||
|
||||
@@ -276,15 +252,6 @@ public:
|
||||
return InputFlag | (RC << 16);
|
||||
}
|
||||
|
||||
/// Augment an existing flag word returned by getFlagWord with the constraint
|
||||
/// code for a memory constraint.
|
||||
static unsigned getFlagWordForMem(unsigned InputFlag, unsigned Constraint) {
|
||||
assert(Constraint <= 0x7fff && "Too large a memory constraint ID");
|
||||
assert(Constraint <= Constraints_Max && "Unknown constraint ID");
|
||||
assert((InputFlag & ~0xffff) == 0 && "High bits already contain data");
|
||||
return InputFlag | (Constraint << Constraints_ShiftAmount);
|
||||
}
|
||||
|
||||
static unsigned getKind(unsigned Flags) {
|
||||
return Flags & 7;
|
||||
}
|
||||
@@ -299,11 +266,6 @@ public:
|
||||
return getKind(Flag) == Kind_Clobber;
|
||||
}
|
||||
|
||||
static unsigned getMemoryConstraintID(unsigned Flag) {
|
||||
assert(isMemKind(Flag));
|
||||
return (Flag >> Constraints_ShiftAmount) & 0x7fff;
|
||||
}
|
||||
|
||||
/// getNumOperandRegisters - Extract the number of registers field from the
|
||||
/// inline asm operand flag.
|
||||
static unsigned getNumOperandRegisters(unsigned Flag) {
|
||||
|
||||
Reference in New Issue
Block a user