diff options
author | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2010-06-18 19:53:41 +0000 |
---|---|---|
committer | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2010-06-18 19:53:41 +0000 |
commit | 6e0a99a7ab6d6fd0099946c4859466f2a9cdd1e1 (patch) | |
tree | c680deee72d90ac6b5873788c0a1b523b8df33ee /test/TableGen | |
parent | 78db186d2dbaf4745f7e4beab4029db40856b54b (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.td | 36 |
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; |