xref: /llvm-project/llvm/benchmarks/GetIntrinsicForClangBuiltin.cpp (revision b55c52c047a167f42abbde9a33356cfb96b82c7f)
1 #include "benchmark/benchmark.h"
2 #include "llvm/IR/Intrinsics.h"
3 
4 using namespace llvm;
5 using namespace Intrinsic;
6 
7 // Benchmark intrinsic lookup from a variety of targets.
8 static void BM_GetIntrinsicForClangBuiltin(benchmark::State &state) {
9   static const char *Builtins[] = {
10       "__builtin_adjust_trampoline",
11       "__builtin_trap",
12       "__builtin_arm_ttest",
13       "__builtin_amdgcn_cubetc",
14       "__builtin_amdgcn_udot2",
15       "__builtin_arm_stc",
16       "__builtin_bpf_compare",
17       "__builtin_HEXAGON_A2_max",
18       "__builtin_lasx_xvabsd_b",
19       "__builtin_mips_dlsa",
20       "__nvvm_floor_f",
21       "__builtin_altivec_vslb",
22       "__builtin_r600_read_tgid_x",
23       "__builtin_riscv_aes64im",
24       "__builtin_s390_vcksm",
25       "__builtin_ve_vl_pvfmksge_Mvl",
26       "__builtin_ia32_axor64",
27       "__builtin_bitrev",
28   };
29   static const char *Targets[] = {"",     "aarch64", "amdgcn", "mips",
30                                   "nvvm", "r600",    "riscv"};
31 
32   for (auto _ : state) {
33     for (auto Builtin : Builtins)
34       for (auto Target : Targets)
35         getIntrinsicForClangBuiltin(Target, Builtin);
36   }
37 }
38 
39 static void
40 BM_GetIntrinsicForClangBuiltinHexagonFirst(benchmark::State &state) {
41   // Exercise the worst case by looking for the first builtin for a target
42   // that has a lot of builtins.
43   for (auto _ : state)
44     getIntrinsicForClangBuiltin("hexagon", "__builtin_HEXAGON_A2_abs");
45 }
46 
47 BENCHMARK(BM_GetIntrinsicForClangBuiltin);
48 BENCHMARK(BM_GetIntrinsicForClangBuiltinHexagonFirst);
49 
50 BENCHMARK_MAIN();
51