Skip to content

Commit 8cb11b0

Browse files
committed
Baseline Tablegen patch, with test, no tablegen changes
1 parent 5192cb7 commit 8cb11b0

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
// RUN: not llvm-tblgen -gen-register-info -register-info-debug -I %p/../../include %s -o /dev/null 2>&1 | FileCheck %s --check-prefix=CHECK
2+
include "llvm/Target/Target.td"
3+
4+
// CHECK: error: No SubRegIndex for S0_S1 in D0_D1_D2
5+
// CHECK-NEXT: def DTuples3 : RegisterTuples<[dsub0, dsub1, dsub2],
6+
7+
class MyReg<string n, list<Register> subregs = []>
8+
: Register<n> {
9+
let Namespace = "Test";
10+
let SubRegs = subregs;
11+
}
12+
13+
class MyClass<int size, list<ValueType> types, dag registers>
14+
: RegisterClass<"Test", types, size, registers> {
15+
let Size = size;
16+
}
17+
18+
def ssub : SubRegIndex< 32, 0>;
19+
def ssub_hi : SubRegIndex< 32, 32>;
20+
def dsub : SubRegIndex< 64, 0>;
21+
def dsub_hi : SubRegIndex< 64, 64>;
22+
def qsub : SubRegIndex<128, 0>;
23+
def qsub_hi : SubRegIndex<128, 128>;
24+
25+
def S0 : MyReg<"s0">;
26+
def S1 : MyReg<"s1">;
27+
def S2 : MyReg<"s2">;
28+
29+
let isArtificial = 1 in {
30+
def S0_HI : MyReg<"s0_hi">;
31+
def S1_HI : MyReg<"s1_hi">;
32+
def S2_HI : MyReg<"s2_hi">;
33+
34+
def D0_HI : MyReg<"D0_hi">;
35+
def D1_HI : MyReg<"D1_hi">;
36+
def D2_HI : MyReg<"D2_hi">;
37+
}
38+
39+
let SubRegIndices = [ssub, ssub_hi], CoveredBySubRegs = 1 in {
40+
def D0 : MyReg<"d0", [S0, S0_HI]>;
41+
def D1 : MyReg<"d1", [S1, S1_HI]>;
42+
def D2 : MyReg<"d2", [S2, S2_HI]>;
43+
}
44+
45+
let SubRegIndices = [dsub, dsub_hi], CoveredBySubRegs = 1 in {
46+
def Q0 : MyReg<"q0", [D0, D0_HI]>;
47+
def Q1 : MyReg<"q1", [D1, D1_HI]>;
48+
def Q2 : MyReg<"q2", [D2, D2_HI]>;
49+
}
50+
51+
def SRegs : MyClass<32, [i32], (sequence "S%u", 0, 2)>;
52+
def DRegs : MyClass<64, [i64], (sequence "D%u", 0, 2)>;
53+
def QRegs : MyClass<128, [i128], (sequence "Q%u", 0, 2)>;
54+
55+
def dsub0 : SubRegIndex<64>;
56+
def dsub1 : SubRegIndex<64>;
57+
def dsub2 : SubRegIndex<64>;
58+
59+
def ssub0 : SubRegIndex<32>;
60+
def ssub1 : ComposedSubRegIndex<dsub1, ssub>;
61+
def ssub2 : ComposedSubRegIndex<dsub2, ssub>;
62+
63+
def STuples2 : RegisterTuples<[ssub0, ssub1],
64+
[(shl SRegs, 0), (shl SRegs, 1)]>;
65+
def STuplesRC2 : MyClass<64, [untyped], (add STuples2)>;
66+
67+
def DTuples2 : RegisterTuples<[dsub0, dsub1],
68+
[(shl DRegs, 0), (shl DRegs, 1)]>;
69+
def DTuplesRC2 : MyClass<128, [untyped], (add DTuples2)>;
70+
71+
def STuples3 : RegisterTuples<[ssub0, ssub1, ssub2],
72+
[(shl SRegs, 0), (shl SRegs, 1), (shl SRegs, 2)]>;
73+
def STuplesRC3 : MyClass<96, [untyped], (add STuples3)>;
74+
75+
def DTuples3 : RegisterTuples<[dsub0, dsub1, dsub2],
76+
[(shl DRegs, 0), (shl DRegs, 1), (shl DRegs, 2)]>;
77+
def DTuplesRC3 : MyClass<192, [untyped], (add DTuples3)>;
78+
79+
def TestTarget : Target;

0 commit comments

Comments
 (0)