aboutsummaryrefslogtreecommitdiff
path: root/test/TableGen
diff options
context:
space:
mode:
authorBruno Cardoso Lopes <bruno.cardoso@gmail.com>2010-06-18 19:53:41 +0000
committerBruno Cardoso Lopes <bruno.cardoso@gmail.com>2010-06-18 19:53:41 +0000
commit6e0a99a7ab6d6fd0099946c4859466f2a9cdd1e1 (patch)
treec680deee72d90ac6b5873788c0a1b523b8df33ee /test/TableGen
parent78db186d2dbaf4745f7e4beab4029db40856b54b (diff)
Teach tablegen how to inherit from classes in 'defm' definitions.
The rule is simple: only inherit from a class list if they come in the end, after the last multiclass. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106305 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/TableGen')
-rw-r--r--test/TableGen/defmclass.td36
1 files changed, 36 insertions, 0 deletions
diff --git a/test/TableGen/defmclass.td b/test/TableGen/defmclass.td
new file mode 100644
index 0000000000..ef8e8f794b
--- /dev/null
+++ b/test/TableGen/defmclass.td
@@ -0,0 +1,36 @@
+// RUN: tblgen %s | FileCheck %s
+// XFAIL: vg_leak
+
+class XD { bits<4> Prefix = 11; }
+// CHECK: Prefix = { 1, 1, 0, 0 };
+class XS { bits<4> Prefix = 12; }
+class VEX { bit hasVEX_4VPrefix = 1; }
+
+def xd : XD;
+
+class BaseI {
+ bits<4> Prefix = 0;
+ bit hasVEX_4VPrefix = 0;
+}
+
+class I<bits<4> op> : BaseI {
+ bits<4> opcode = op;
+ int val = !if(!eq(Prefix, xd.Prefix), 7, 21);
+}
+
+multiclass R {
+ def rr : I<4>;
+}
+
+multiclass M {
+ def rm : I<2>;
+}
+
+multiclass Y {
+ defm SS : R, M, XD;
+// CHECK: Prefix = { 1, 1, 0, 0 };
+// CHECK: Prefix = { 1, 1, 0, 0 };
+ defm SD : R, M, XS;
+}
+
+defm Instr : Y, VEX;