summaryrefslogtreecommitdiff
path: root/test/TableGen/defmclass.td
diff options
context:
space:
mode:
Diffstat (limited to 'test/TableGen/defmclass.td')
-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;