mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-11 05:35:11 +00:00
80bb2d981d
We had not been trying hard enough to resolve def names inside multiclasses that had complex concatenations, etc. Now we'll try harder. Patch by Amaury Sechet! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@237877 91177308-0d34-0410-b5e6-96231b3b80d8
84 lines
1.5 KiB
TableGen
84 lines
1.5 KiB
TableGen
// 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
|
|
|