From 3cafbf7e5fa13b303cc387a058a511ce517b5bd5 Mon Sep 17 00:00:00 2001 From: Evan Cheng Date: Fri, 20 Apr 2007 21:13:46 +0000 Subject: Add sub-registers sets. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36278 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/Target.td | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'lib') 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 { // 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 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 SubRegs = []; + // DwarfNumber - Number used internally by gcc/gdb to identify the register. // These values can be determined by locating the .h file in the // directory llvmgcc/gcc/config// and looking for REGISTER_NAMES. The @@ -52,6 +57,16 @@ class Register { 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 subregs> : Register { + 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 -- cgit v1.2.3