xref: /aosp_15_r20/external/llvm/test/TableGen/Slice.td (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker// RUN: llvm-tblgen %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker// XFAIL: vg_leak
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Workerclass ValueType<int size, int value> {
5*9880d681SAndroid Build Coastguard Worker  int Size = size;
6*9880d681SAndroid Build Coastguard Worker  int Value = value;
7*9880d681SAndroid Build Coastguard Worker}
8*9880d681SAndroid Build Coastguard Worker
9*9880d681SAndroid Build Coastguard Workerdef f32  : ValueType<32, 1>;   //  2 x i64 vector value
10*9880d681SAndroid Build Coastguard Worker
11*9880d681SAndroid Build Coastguard Workerclass Intrinsic<string name> {
12*9880d681SAndroid Build Coastguard Worker  string Name = name;
13*9880d681SAndroid Build Coastguard Worker}
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Workerclass Inst<bits<8> opcode, dag oopnds, dag iopnds, string asmstr,
16*9880d681SAndroid Build Coastguard Worker           list<dag> pattern> {
17*9880d681SAndroid Build Coastguard Worker  bits<8> Opcode = opcode;
18*9880d681SAndroid Build Coastguard Worker  dag OutOperands = oopnds;
19*9880d681SAndroid Build Coastguard Worker  dag InOperands = iopnds;
20*9880d681SAndroid Build Coastguard Worker  string AssemblyString = asmstr;
21*9880d681SAndroid Build Coastguard Worker  list<dag> Pattern = pattern;
22*9880d681SAndroid Build Coastguard Worker}
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Workerdef ops;
25*9880d681SAndroid Build Coastguard Workerdef outs;
26*9880d681SAndroid Build Coastguard Workerdef ins;
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Workerdef set;
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Worker// Define registers
31*9880d681SAndroid Build Coastguard Workerclass Register<string n> {
32*9880d681SAndroid Build Coastguard Worker  string Name = n;
33*9880d681SAndroid Build Coastguard Worker}
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Workerclass RegisterClass<list<ValueType> regTypes, list<Register> regList> {
36*9880d681SAndroid Build Coastguard Worker  list<ValueType> RegTypes = regTypes;
37*9880d681SAndroid Build Coastguard Worker  list<Register> MemberList = regList;
38*9880d681SAndroid Build Coastguard Worker}
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Workerdef XMM0: Register<"xmm0">;
41*9880d681SAndroid Build Coastguard Workerdef XMM1: Register<"xmm1">;
42*9880d681SAndroid Build Coastguard Workerdef XMM2: Register<"xmm2">;
43*9880d681SAndroid Build Coastguard Workerdef XMM3: Register<"xmm3">;
44*9880d681SAndroid Build Coastguard Workerdef XMM4: Register<"xmm4">;
45*9880d681SAndroid Build Coastguard Workerdef XMM5: Register<"xmm5">;
46*9880d681SAndroid Build Coastguard Workerdef XMM6: Register<"xmm6">;
47*9880d681SAndroid Build Coastguard Workerdef XMM7: Register<"xmm7">;
48*9880d681SAndroid Build Coastguard Workerdef XMM8:  Register<"xmm8">;
49*9880d681SAndroid Build Coastguard Workerdef XMM9:  Register<"xmm9">;
50*9880d681SAndroid Build Coastguard Workerdef XMM10: Register<"xmm10">;
51*9880d681SAndroid Build Coastguard Workerdef XMM11: Register<"xmm11">;
52*9880d681SAndroid Build Coastguard Workerdef XMM12: Register<"xmm12">;
53*9880d681SAndroid Build Coastguard Workerdef XMM13: Register<"xmm13">;
54*9880d681SAndroid Build Coastguard Workerdef XMM14: Register<"xmm14">;
55*9880d681SAndroid Build Coastguard Workerdef XMM15: Register<"xmm15">;
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Workerdef FR32 : RegisterClass<[f32],
58*9880d681SAndroid Build Coastguard Worker                         [XMM0, XMM1, XMM2, XMM3, XMM4, XMM5, XMM6, XMM7,
59*9880d681SAndroid Build Coastguard Worker                          XMM8, XMM9, XMM10, XMM11,
60*9880d681SAndroid Build Coastguard Worker                          XMM12, XMM13, XMM14, XMM15]>;
61*9880d681SAndroid Build Coastguard Worker
62*9880d681SAndroid Build Coastguard Workerclass SDNode {}
63*9880d681SAndroid Build Coastguard Workerdef not : SDNode;
64*9880d681SAndroid Build Coastguard Worker
65*9880d681SAndroid Build Coastguard Workermulticlass scalar<bits<8> opcode, string asmstr = "", list<list<dag>> patterns = []> {
66*9880d681SAndroid Build Coastguard Worker  def SSrr : Inst<opcode, (outs FR32:$dst), (ins FR32:$src),
67*9880d681SAndroid Build Coastguard Worker                  !strconcat(asmstr, "\t$dst, $src"),
68*9880d681SAndroid Build Coastguard Worker                  !if(!empty(patterns),[]<dag>,patterns[0])>;
69*9880d681SAndroid Build Coastguard Worker  def SSrm : Inst<opcode, (outs FR32:$dst), (ins FR32:$src),
70*9880d681SAndroid Build Coastguard Worker                  !strconcat(asmstr, "\t$dst, $src"),
71*9880d681SAndroid Build Coastguard Worker                  !if(!empty(patterns),[]<dag>,!if(!empty(!tail(patterns)),patterns[0],patterns[1]))>;
72*9880d681SAndroid Build Coastguard Worker}
73*9880d681SAndroid Build Coastguard Worker
74*9880d681SAndroid Build Coastguard Workermulticlass vscalar<bits<8> opcode, string asmstr = "", list<list<dag>> patterns = []> {
75*9880d681SAndroid Build Coastguard Worker  def V#NAME#SSrr : Inst<opcode, (outs FR32:$dst), (ins FR32:$src),
76*9880d681SAndroid Build Coastguard Worker                  !strconcat(asmstr, "\t$dst, $src"),
77*9880d681SAndroid Build Coastguard Worker                  !if(!empty(patterns),[]<dag>,patterns[0])>;
78*9880d681SAndroid Build Coastguard Worker  def V#NAME#SSrm : Inst<opcode, (outs FR32:$dst), (ins FR32:$src),
79*9880d681SAndroid Build Coastguard Worker                  !strconcat(asmstr, "\t$dst, $src"),
80*9880d681SAndroid Build Coastguard Worker                  !if(!empty(patterns),[]<dag>,!if(!empty(!tail(patterns)),patterns[0],patterns[1]))>;
81*9880d681SAndroid Build Coastguard Worker}
82*9880d681SAndroid Build Coastguard Worker
83*9880d681SAndroid Build Coastguard Workermulticlass myscalar<bits<8> opcode, string asmstr = "", list<list<dag>> patterns = []> :
84*9880d681SAndroid Build Coastguard Worker  scalar<opcode, asmstr, patterns>,
85*9880d681SAndroid Build Coastguard Worker  vscalar<opcode, asmstr, patterns>;
86*9880d681SAndroid Build Coastguard Worker
87*9880d681SAndroid Build Coastguard Workerdefm NOT : myscalar<0x10, "not", [[], [(set FR32:$dst, (f32 (not FR32:$src)))]]>;
88*9880d681SAndroid Build Coastguard Worker
89*9880d681SAndroid Build Coastguard Worker// CHECK: Pattern = [(set FR32:$dst, (f32 (not FR32:$src)))];
90*9880d681SAndroid Build Coastguard Worker// CHECK: Pattern = [];
91*9880d681SAndroid Build Coastguard Worker// CHECK: Pattern = [(set FR32:$dst, (f32 (not FR32:$src)))];
92*9880d681SAndroid Build Coastguard Worker// CHECK: Pattern = [];
93