#include "benchmark/benchmark.h" #include "llvm/IR/Intrinsics.h" using namespace llvm; using namespace Intrinsic; // Benchmark intrinsic lookup from a variety of targets. static void BM_GetIntrinsicForClangBuiltin(benchmark::State &state) { static const char *Builtins[] = { "__builtin_adjust_trampoline", "__builtin_trap", "__builtin_arm_ttest", "__builtin_amdgcn_cubetc", "__builtin_amdgcn_udot2", "__builtin_arm_stc", "__builtin_bpf_compare", "__builtin_HEXAGON_A2_max", "__builtin_lasx_xvabsd_b", "__builtin_mips_dlsa", "__nvvm_floor_f", "__builtin_altivec_vslb", "__builtin_r600_read_tgid_x", "__builtin_riscv_aes64im", "__builtin_s390_vcksm", "__builtin_ve_vl_pvfmksge_Mvl", "__builtin_ia32_axor64", "__builtin_bitrev", }; static const char *Targets[] = {"", "aarch64", "amdgcn", "mips", "nvvm", "r600", "riscv"}; for (auto _ : state) { for (auto Builtin : Builtins) for (auto Target : Targets) getIntrinsicForClangBuiltin(Target, Builtin); } } static void BM_GetIntrinsicForClangBuiltinHexagonFirst(benchmark::State &state) { // Exercise the worst case by looking for the first builtin for a target // that has a lot of builtins. for (auto _ : state) getIntrinsicForClangBuiltin("hexagon", "__builtin_HEXAGON_A2_abs"); } BENCHMARK(BM_GetIntrinsicForClangBuiltin); BENCHMARK(BM_GetIntrinsicForClangBuiltinHexagonFirst); BENCHMARK_MAIN();