xref: /llvm-project/llvm/test/TableGen/repr.td (revision cacfac416c959ab06dd4f7978f0f2a067b1cb283)
1// RUN: llvm-tblgen %s | FileCheck %s
2
3class PrintString<string s> {
4 string S = s;
5}
6
7def op;
8def case_01 : PrintString<!repr((op op, op))>;
9// CHECK-LABEL: def case_01 { // PrintString
10// CHECK-NEXT:    string S = "(op op, op)";
11// CHECK-NEXT:  }
12
13def case_02 : PrintString<!repr(32)>;
14// CHECK-LABEL: def case_02 { // PrintString
15// CHECK-NEXT:    string S = "32";
16// CHECK-NEXT:  }
17
18multiclass Multi<int i, bits<3> b> {
19  defvar IncI = !repr(!add(i,1));
20  def _IncI : PrintString<IncI>;
21  def _b : PrintString<!repr(b)>;
22}
23
24defm case_03 : Multi<2, 0b111>;
25// CHECK-LABEL: def case_03_IncI {      // PrintString
26// CHECK-NEXT:    string S = "3";
27// CHECK-NEXT:  }
28// CHECK-LABEL: def case_03_b { // PrintString
29// CHECK-NEXT:    string S = "{ 1, 1, 1 }";
30// CHECK-NEXT:  }
31
32def case_04 : PrintString<!repr(!foreach(i, [1,2,3], !mul(i,2)))>;
33// CHECK-LABEL: def case_04 { // PrintString
34// CHECK-NEXT:    string S = "[2, 4, 6]";
35// CHECK-NEXT:  }
36
37// Show the dumping of full records...
38def case_05 : PrintString<!repr(case_04)>;
39// CHECK-LABEL: def case_05 { // PrintString
40// CHECK-NEXT:    string S = "case_04 { // PrintString
41// CHECK-NEXT:    string S = "[2, 4, 6]";
42// CHECK-NEXT:  }
43// CHECK-NEXT:  ";
44// CHECK-NEXT:  }
45
46// ... and how !repr differs compared to !cast<string>.
47def case_06 : PrintString<!cast<string>(case_04)>;
48// CHECK-LABEL: def case_06 { // PrintString
49// CHECK-NEXT:    string S = "case_04";
50// CHECK-NEXT:  }
51
52