You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
1.5 KiB
84 lines
1.5 KiB
4 months ago
|
// RUN: llvm-tblgen %s | FileCheck %s
|
||
|
// XFAIL: vg_leak
|
||
|
|
||
|
// CHECK: WorldHelloCC
|
||
|
// CHECK-NOT: WorldHelloCC
|
||
|
|
||
|
class C<string n> {
|
||
|
string name = n;
|
||
|
}
|
||
|
|
||
|
multiclass Names<string n, string m> {
|
||
|
def CC : C<n>;
|
||
|
def World#NAME#CC : C<m>;
|
||
|
}
|
||
|
|
||
|
defm Hello : Names<"hello", "world">;
|
||
|
|
||
|
// Ensure that the same anonymous name is used as the prefix for all defs in an
|
||
|
// anonymous multiclass.
|
||
|
|
||
|
class Outer<C i> {
|
||
|
C Inner = i;
|
||
|
}
|
||
|
|
||
|
multiclass MC<string name> {
|
||
|
def hi : C<name>;
|
||
|
def there : Outer<!cast<C>(!strconcat(NAME, "hi"))>;
|
||
|
}
|
||
|
|
||
|
defm : MC<"foo">;
|
||
|
|
||
|
multiclass MC2<string name> {
|
||
|
def there : Outer<C<name> >;
|
||
|
}
|
||
|
|
||
|
// Ensure that we've correctly captured the reference to name from the implicit
|
||
|
// anonymous C def in the template parameter list of Outer.
|
||
|
// CHECK-NOT: MC2::name
|
||
|
|
||
|
defm : MC2<"bar">;
|
||
|
|
||
|
multiclass MC3<string s> {
|
||
|
def ZFizz#s : C<s>;
|
||
|
}
|
||
|
|
||
|
defm : MC3<"Buzz">;
|
||
|
|
||
|
// CHECK: def ZFizzBuzz
|
||
|
// CHECK: string name = "Buzz";
|
||
|
// CHECK-NOT: MC3::s
|
||
|
|
||
|
multiclass MC4<string s> {
|
||
|
def NAME#s : C<s>;
|
||
|
}
|
||
|
|
||
|
defm ZTagazok : MC4<"AToi">;
|
||
|
|
||
|
// CHECK: def ZTagazokAToi
|
||
|
// CHECK: string name = "AToi";
|
||
|
// CHECK-NOT: MC4::s
|
||
|
|
||
|
multiclass MC5<C c> {
|
||
|
def NAME#c.name : C<c.name>;
|
||
|
}
|
||
|
|
||
|
def CTiger : C<"Tiger">;
|
||
|
defm Zebra : MC5<CTiger>;
|
||
|
|
||
|
// CHECK: def ZebraTiger
|
||
|
// CHECK: string name = "Tiger";
|
||
|
// CHECK-NOT: MC5::c
|
||
|
|
||
|
multiclass MC6<C c> {
|
||
|
def NAME#Tiger#c.name : C<c.name>;
|
||
|
}
|
||
|
|
||
|
def CAligator : C<"Aligator">;
|
||
|
defm Zebra : MC6<CAligator>;
|
||
|
|
||
|
// CHECK: def ZebraTigerAligator
|
||
|
// CHECK: string name = "Aligator";
|
||
|
// CHECK-NOT: MC6::c
|
||
|
|