// RUN: llvm-tblgen -gen-intrinsic-impl -I %p/../../include %s | FileCheck %s // Test ArgInfo property for pretty-printing intrinsic arguments. // This test verifies that TableGen generates the correct pretty-printing code // for intrinsics that use the ArgInfo property. include "llvm/IR/Intrinsics.td" // Simple intrinsic with two arguments that have ArgInfo. def int_dummy_foo_bar : DefaultAttrsIntrinsic< [llvm_i32_ty], [llvm_i32_ty, // data llvm_i32_ty, // mode llvm_i32_ty], // stride [IntrNoMem, ImmArg>, ArgInfo, [ArgName<"mode">, ImmArgPrinter<"printDummyMode">]>, ArgInfo, [ArgName<"stride">]>]>; // A custom floating point add with rounding and sat mode. def int_my_fadd_f32 : DefaultAttrsIntrinsic< [llvm_float_ty], [llvm_float_ty, // a llvm_float_ty, // b llvm_i32_ty, // rounding_mode llvm_i1_ty], // saturation_mode [IntrNoMem, ImmArg>, ImmArg>, ArgInfo, [ArgName<"rounding_mode">, ImmArgPrinter<"printRoundingMode">]>, ArgInfo, [ArgName<"saturation_mode">]>]>; // CHECK: #ifdef GET_INTRINSIC_PRETTY_PRINT_TABLE // CHECK-NEXT: #undef GET_INTRINSIC_PRETTY_PRINT_TABLE // CHECK: static constexpr uint8_t PPTable[] = { // CHECK: #endif // GET_INTRINSIC_PRETTY_PRINT_TABLE // CHECK: #ifdef GET_INTRINSIC_PRETTY_PRINT_ARGUMENTS // CHECK-NEXT: #undef GET_INTRINSIC_PRETTY_PRINT_ARGUMENTS // CHECK: void Intrinsic::printImmArg(ID IID, unsigned ArgIdx, raw_ostream &OS, const Constant *ImmArgVal) { // CHECK: case dummy_foo_bar: // CHECK-NEXT: switch (ArgIdx) { // CHECK-NEXT: case 1: // CHECK-NEXT: OS << "mode="; // CHECK-NEXT: printDummyMode(OS, ImmArgVal); // CHECK-NEXT: return; // CHECK-NEXT: case 2: // CHECK-NEXT: OS << "stride="; // CHECK-NEXT: return; // CHECK-NEXT: } // CHECK-NEXT: break; // CHECK: case my_fadd_f32: // CHECK-NEXT: switch (ArgIdx) { // CHECK-NEXT: case 2: // CHECK-NEXT: OS << "rounding_mode="; // CHECK-NEXT: printRoundingMode(OS, ImmArgVal); // CHECK-NEXT: return; // CHECK-NEXT: case 3: // CHECK-NEXT: OS << "saturation_mode="; // CHECK-NEXT: return; // CHECK-NEXT: } // CHECK-NEXT: break; // CHECK: #endif // GET_INTRINSIC_PRETTY_PRINT_ARGUMENTS