blob: e3a77968f5f7fefcf48237687dba907390da4c57 [file] [log] [blame]
Bill Wendlingb4be7f62013-08-22 20:46:05 +00001// RUN: llvm-tblgen %s | FileCheck %s
NAKAMURA Takumia22657f2013-11-10 14:26:08 +00002// XFAIL: vg_leak
Bill Wendlingb4be7f62013-08-22 20:46:05 +00003
4// CHECK: WorldHelloCC
5// CHECK-NOT: WorldHelloCC
David Greene065f2592009-05-05 16:28:25 +00006
7class C<string n> {
8 string name = n;
9}
10
11multiclass Names<string n, string m> {
12 def CC : C<n>;
13 def World#NAME#CC : C<m>;
14}
15
16defm Hello : Names<"hello", "world">;
Hal Finkel2370e552014-01-02 19:35:33 +000017
18// Ensure that the same anonymous name is used as the prefix for all defs in an
19// anonymous multiclass.
20
21class Outer<C i> {
22 C Inner = i;
23}
24
25multiclass MC<string name> {
26 def hi : C<name>;
27 def there : Outer<!cast<C>(!strconcat(NAME, "hi"))>;
28}
29
30defm : MC<"foo">;
31
Hal Finkel0a3368c2014-01-02 20:47:09 +000032multiclass MC2<string name> {
33 def there : Outer<C<name> >;
34}
35
36// Ensure that we've correctly captured the reference to name from the implicit
37// anonymous C def in the template parameter list of Outer.
38// CHECK-NOT: MC2::name
39
40defm : MC2<"bar">;
41
Hal Finkel80bb2d92015-05-21 04:32:56 +000042multiclass MC3<string s> {
43 def ZFizz#s : C<s>;
44}
45
Nicolai Haehnle26db53e2018-06-04 14:26:05 +000046defm "" : MC3<"Buzz">;
Hal Finkel80bb2d92015-05-21 04:32:56 +000047
48// CHECK: def ZFizzBuzz
49// CHECK: string name = "Buzz";
50// CHECK-NOT: MC3::s
51
52multiclass MC4<string s> {
53 def NAME#s : C<s>;
54}
55
56defm ZTagazok : MC4<"AToi">;
57
58// CHECK: def ZTagazokAToi
59// CHECK: string name = "AToi";
60// CHECK-NOT: MC4::s
61
62multiclass MC5<C c> {
63 def NAME#c.name : C<c.name>;
64}
65
66def CTiger : C<"Tiger">;
67defm Zebra : MC5<CTiger>;
68
69// CHECK: def ZebraTiger
70// CHECK: string name = "Tiger";
71// CHECK-NOT: MC5::c
72
73multiclass MC6<C c> {
74 def NAME#Tiger#c.name : C<c.name>;
75}
76
77def CAligator : C<"Aligator">;
78defm Zebra : MC6<CAligator>;
79
80// CHECK: def ZebraTigerAligator
81// CHECK: string name = "Aligator";
82// CHECK-NOT: MC6::c
83