#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(); |