diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Target/Target.td | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/lib/Target/Target.td b/lib/Target/Target.td index b1ef5c9357..094a4adf3b 100644 --- a/lib/Target/Target.td +++ b/lib/Target/Target.td @@ -41,9 +41,14 @@ class Register<string n> { // Aliases - A list of registers that this register overlaps with. A read or // modification of this register can potentially read or modify the aliased // registers. - // list<Register> Aliases = []; + // SubRegs - A list of registers that are parts of this register. Note these + // are "immediate" sub-registers and the registers within the list do not + // themselves overlap. e.g. For X86, EAX's SubRegs list contains only [AX], + // not [AX, AH, AL]. + list<Register> SubRegs = []; + // DwarfNumber - Number used internally by gcc/gdb to identify the register. // These values can be determined by locating the <target>.h file in the // directory llvmgcc/gcc/config/<target>/ and looking for REGISTER_NAMES. The @@ -52,6 +57,16 @@ class Register<string n> { int DwarfNumber = -1; } +// RegisterWithSubRegs - This can be used to define instances of Register which +// need to specify sub-registers. +// List "subregs" specifies which registers are sub-registers to this one. This +// is used to populate the SubRegs and AliasSet fields of TargetRegisterDesc. +// This allows the code generator to be careful not to put two values with +// overlapping live ranges into registers which alias. +class RegisterWithSubRegs<string n, list<Register> subregs> : Register<n> { + let SubRegs = subregs; +} + // RegisterGroup - This can be used to define instances of Register which // need to specify aliases. // List "aliases" specifies which registers are aliased to this one. This |