brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.5 KiB · fa9c528 Raw
51 lines · cpp
1#include "benchmark/benchmark.h"
2#include "llvm/IR/Intrinsics.h"
3
4using namespace llvm;
5using namespace Intrinsic;
6
7// Benchmark intrinsic lookup from a variety of targets.
8static 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
39static void
40BM_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
47BENCHMARK(BM_GetIntrinsicForClangBuiltin);
48BENCHMARK(BM_GetIntrinsicForClangBuiltinHexagonFirst);
49
50BENCHMARK_MAIN();
51