blob: eab1f5e032bc397fbb1ddb1b50ad618c5eba8177 [file] [edit]
// 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<ArgIndex<1>>,
ArgInfo<ArgIndex<1>, [ArgName<"mode">, ImmArgPrinter<"printDummyMode">]>,
ArgInfo<ArgIndex<2>, [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<ArgIndex<2>>,
ImmArg<ArgIndex<3>>,
ArgInfo<ArgIndex<2>, [ArgName<"rounding_mode">, ImmArgPrinter<"printRoundingMode">]>,
ArgInfo<ArgIndex<3>, [ArgName<"saturation_mode">]>]>;
// CHECK: #ifdef GET_INTRINSIC_PRETTY_PRINT_TABLE
// CHECK-NEXT: static constexpr uint8_t PPTable[] = {
// CHECK: #endif // GET_INTRINSIC_PRETTY_PRINT_TABLE
// CHECK: #ifdef 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