72 lines · plain
1// RUN: llvm-tblgen -gen-intrinsic-impl -I %p/../../include %s | FileCheck %s2 3// Test ArgInfo property for pretty-printing intrinsic arguments.4// This test verifies that TableGen generates the correct pretty-printing code5// for intrinsics that use the ArgInfo property.6 7include "llvm/IR/Intrinsics.td"8 9// Simple intrinsic with two arguments that have ArgInfo.10def int_dummy_foo_bar : DefaultAttrsIntrinsic<11 [llvm_i32_ty],12 [llvm_i32_ty, // data13 llvm_i32_ty, // mode14 llvm_i32_ty], // stride15 [IntrNoMem,16 ImmArg<ArgIndex<1>>,17 ArgInfo<ArgIndex<1>, [ArgName<"mode">, ImmArgPrinter<"printDummyMode">]>,18 ArgInfo<ArgIndex<2>, [ArgName<"stride">]>]>;19 20// A custom floating point add with rounding and sat mode.21def int_my_fadd_f32 : DefaultAttrsIntrinsic<22 [llvm_float_ty],23 [llvm_float_ty, // a24 llvm_float_ty, // b25 llvm_i32_ty, // rounding_mode26 llvm_i1_ty], // saturation_mode27 [IntrNoMem,28 ImmArg<ArgIndex<2>>,29 ImmArg<ArgIndex<3>>,30 ArgInfo<ArgIndex<2>, [ArgName<"rounding_mode">, ImmArgPrinter<"printRoundingMode">]>,31 ArgInfo<ArgIndex<3>, [ArgName<"saturation_mode">]>]>;32 33// CHECK: #ifdef GET_INTRINSIC_PRETTY_PRINT_TABLE34// CHECK-NEXT: static constexpr uint8_t PPTable[] = {35 36// CHECK: #endif // GET_INTRINSIC_PRETTY_PRINT_TABLE37 38// CHECK: #ifdef GET_INTRINSIC_PRETTY_PRINT_ARGUMENTS39// CHECK: void Intrinsic::printImmArg(ID IID, unsigned ArgIdx, raw_ostream &OS, const Constant *ImmArgVal) {40 41// CHECK: case dummy_foo_bar:42// CHECK-NEXT: switch (ArgIdx) {43 44// CHECK-NEXT: case 1:45// CHECK-NEXT: OS << "mode=";46// CHECK-NEXT: printDummyMode(OS, ImmArgVal);47// CHECK-NEXT: return;48 49// CHECK-NEXT: case 2:50// CHECK-NEXT: OS << "stride=";51// CHECK-NEXT: return;52 53// CHECK-NEXT: }54// CHECK-NEXT: break;55 56// CHECK: case my_fadd_f32:57// CHECK-NEXT: switch (ArgIdx) {58 59// CHECK-NEXT: case 2:60// CHECK-NEXT: OS << "rounding_mode=";61// CHECK-NEXT: printRoundingMode(OS, ImmArgVal);62// CHECK-NEXT: return;63 64// CHECK-NEXT: case 3:65// CHECK-NEXT: OS << "saturation_mode=";66// CHECK-NEXT: return;67 68// CHECK-NEXT: }69// CHECK-NEXT: break;70 71// CHECK: #endif // GET_INTRINSIC_PRETTY_PRINT_ARGUMENTS72