defmclass.td 845 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // RUN: llvm-tblgen %s | FileCheck %s
  2. // XFAIL: vg_leak
  3. class XD { bits<4> Prefix = 11; }
  4. // CHECK: Prefix = { 1, 1, 0, 0 };
  5. class XS { bits<4> Prefix = 12; }
  6. class VEX { bit hasVEX_4VPrefix = 1; }
  7. def xd : XD;
  8. class BaseI {
  9. bits<4> Prefix = 0;
  10. bit hasVEX_4VPrefix = 0;
  11. }
  12. class I<bits<4> op> : BaseI {
  13. bits<4> opcode = op;
  14. int val = !if(!eq(Prefix, xd.Prefix), 7, 21);
  15. int check = !if(hasVEX_4VPrefix, 0, 10);
  16. }
  17. multiclass R {
  18. def rr : I<4>;
  19. }
  20. multiclass M {
  21. def rm : I<2>;
  22. }
  23. multiclass Y {
  24. defm SS : R, M, XD;
  25. // CHECK: Prefix = { 1, 1, 0, 0 };
  26. // CHECK: Prefix = { 1, 1, 0, 0 };
  27. defm SD : R, M, XS;
  28. }
  29. // CHECK: int check = 0;
  30. defm Instr : Y, VEX;
  31. // Anonymous defm.
  32. multiclass SomeAnonymous<int x> {
  33. def rm;
  34. def mr;
  35. }
  36. // These multiclasses shouldn't conflict.
  37. defm : SomeAnonymous<1>;
  38. defm : SomeAnonymous<2>;