MultiClassDefName.td 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. // RUN: llvm-tblgen %s | FileCheck %s
  2. // XFAIL: vg_leak
  3. // CHECK: WorldHelloCC
  4. // CHECK-NOT: WorldHelloCC
  5. class C<string n> {
  6. string name = n;
  7. }
  8. multiclass Names<string n, string m> {
  9. def CC : C<n>;
  10. def World#NAME#CC : C<m>;
  11. }
  12. defm Hello : Names<"hello", "world">;
  13. // Ensure that the same anonymous name is used as the prefix for all defs in an
  14. // anonymous multiclass.
  15. class Outer<C i> {
  16. C Inner = i;
  17. }
  18. multiclass MC<string name> {
  19. def hi : C<name>;
  20. def there : Outer<!cast<C>(!strconcat(NAME, "hi"))>;
  21. }
  22. defm : MC<"foo">;
  23. multiclass MC2<string name> {
  24. def there : Outer<C<name> >;
  25. }
  26. // Ensure that we've correctly captured the reference to name from the implicit
  27. // anonymous C def in the template parameter list of Outer.
  28. // CHECK-NOT: MC2::name
  29. defm : MC2<"bar">;
  30. multiclass MC3<string s> {
  31. def ZFizz#s : C<s>;
  32. }
  33. defm : MC3<"Buzz">;
  34. // CHECK: def ZFizzBuzz
  35. // CHECK: string name = "Buzz";
  36. // CHECK-NOT: MC3::s
  37. multiclass MC4<string s> {
  38. def NAME#s : C<s>;
  39. }
  40. defm ZTagazok : MC4<"AToi">;
  41. // CHECK: def ZTagazokAToi
  42. // CHECK: string name = "AToi";
  43. // CHECK-NOT: MC4::s
  44. multiclass MC5<C c> {
  45. def NAME#c.name : C<c.name>;
  46. }
  47. def CTiger : C<"Tiger">;
  48. defm Zebra : MC5<CTiger>;
  49. // CHECK: def ZebraTiger
  50. // CHECK: string name = "Tiger";
  51. // CHECK-NOT: MC5::c
  52. multiclass MC6<C c> {
  53. def NAME#Tiger#c.name : C<c.name>;
  54. }
  55. def CAligator : C<"Aligator">;
  56. defm Zebra : MC6<CAligator>;
  57. // CHECK: def ZebraTigerAligator
  58. // CHECK: string name = "Aligator";
  59. // CHECK-NOT: MC6::c