52 lines · plain
1// RUN: llvm-tblgen %s | FileCheck %s2 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 { // PrintString10// CHECK-NEXT: string S = "(op op, op)";11// CHECK-NEXT: }12 13def case_02 : PrintString<!repr(32)>;14// CHECK-LABEL: def case_02 { // PrintString15// 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 { // PrintString26// CHECK-NEXT: string S = "3";27// CHECK-NEXT: }28// CHECK-LABEL: def case_03_b { // PrintString29// 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 { // PrintString34// 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 { // PrintString40// CHECK-NEXT: string S = "case_04 { // PrintString41// 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 { // PrintString49// CHECK-NEXT: string S = "case_04";50// CHECK-NEXT: }51 52