summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2007-04-20 21:13:46 +0000
committerEvan Cheng <evan.cheng@apple.com>2007-04-20 21:13:46 +0000
commit3cafbf7e5fa13b303cc387a058a511ce517b5bd5 (patch)
treed4025c3de62d60e8ea421a1c48292bfb7faaa45c /lib
parenta92d62c15fa2bf84453489716323b0159912c55d (diff)
downloadllvm-3cafbf7e5fa13b303cc387a058a511ce517b5bd5.tar.gz
llvm-3cafbf7e5fa13b303cc387a058a511ce517b5bd5.tar.bz2
llvm-3cafbf7e5fa13b303cc387a058a511ce517b5bd5.tar.xz
Add sub-registers sets.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36278 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/Target/Target.td17
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