summaryrefslogtreecommitdiff
path: root/include/llvm/Target/Target.td
diff options
context:
space:
mode:
authorJakob Stoklund Olesen <stoklund@2pi.dk>2012-01-18 00:16:39 +0000
committerJakob Stoklund Olesen <stoklund@2pi.dk>2012-01-18 00:16:39 +0000
commit31867660cb81ea2b1d1a6ffa7d09c91acb754a8b (patch)
tree3ccbfded75387b943b2877f7f5975da12d98a84b /include/llvm/Target/Target.td
parent7434c9a053789c04d73bb58df41ad6fdf6a84e6a (diff)
downloadllvm-31867660cb81ea2b1d1a6ffa7d09c91acb754a8b.tar.gz
llvm-31867660cb81ea2b1d1a6ffa7d09c91acb754a8b.tar.bz2
llvm-31867660cb81ea2b1d1a6ffa7d09c91acb754a8b.tar.xz
Add a CoveredBySubRegs property to Register descriptions.
When set, this bit indicates that a register is completely defined by the value of its sub-registers. Use the CoveredBySubRegs property to infer which super-registers are call-preserved given a list of callee-saved registers. For example, the ARM registers D8-D15 are callee-saved. This now automatically implies that Q4-Q7 are call-preserved. Conversely, Win64 callees save XMM6-XMM15, but the corresponding YMM6-YMM15 registers are not call-preserved because they are not fully defined by their sub-registers. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148363 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/Target/Target.td')
-rw-r--r--include/llvm/Target/Target.td6
1 files changed, 6 insertions, 0 deletions
diff --git a/include/llvm/Target/Target.td b/include/llvm/Target/Target.td
index be08b9c9be..f9f30a8bb7 100644
--- a/include/llvm/Target/Target.td
+++ b/include/llvm/Target/Target.td
@@ -86,6 +86,12 @@ class Register<string n, list<string> altNames = []> {
// This is used by the x86-64 and ARM Thumb targets where some registers
// require larger instruction encodings.
int CostPerUse = 0;
+
+ // CoveredBySubRegs - When this bit is set, the value of this register is
+ // completely determined by the value of its sub-registers. For example, the
+ // x86 register AX is covered by its sub-registers AL and AH, but EAX is not
+ // covered by its sub-register AX.
+ bit CoveredBySubRegs = 0;
}
// RegisterWithSubRegs - This can be used to define instances of Register which