|
11 | 11 | #include "llvm/IR/Constant.h"
|
12 | 12 | #include "llvm/IR/IRBuilder.h"
|
13 | 13 | #include "llvm/IR/IntrinsicInst.h"
|
| 14 | +#include "llvm/IR/IntrinsicsAArch64.h" |
| 15 | +#include "llvm/IR/IntrinsicsAMDGPU.h" |
| 16 | +#include "llvm/IR/IntrinsicsARM.h" |
| 17 | +#include "llvm/IR/IntrinsicsBPF.h" |
| 18 | +#include "llvm/IR/IntrinsicsDirectX.h" |
| 19 | +#include "llvm/IR/IntrinsicsHexagon.h" |
| 20 | +#include "llvm/IR/IntrinsicsLoongArch.h" |
| 21 | +#include "llvm/IR/IntrinsicsMips.h" |
| 22 | +#include "llvm/IR/IntrinsicsNVPTX.h" |
| 23 | +#include "llvm/IR/IntrinsicsPowerPC.h" |
| 24 | +#include "llvm/IR/IntrinsicsRISCV.h" |
| 25 | +#include "llvm/IR/IntrinsicsS390.h" |
| 26 | +#include "llvm/IR/IntrinsicsX86.h" |
14 | 27 | #include "llvm/IR/Module.h"
|
15 | 28 | #include "gtest/gtest.h"
|
16 | 29 |
|
@@ -68,6 +81,51 @@ TEST(IntrinsicNameLookup, Basic) {
|
68 | 81 | EXPECT_EQ(4, I);
|
69 | 82 | }
|
70 | 83 |
|
| 84 | +// Tests to verify getIntrinsicForClangBuiltin. |
| 85 | +TEST(IntrinsicNameLookup, ClangBuiltinLookup) { |
| 86 | + using namespace Intrinsic; |
| 87 | + static constexpr std::tuple<StringRef, StringRef, ID> ClangTests[] = { |
| 88 | + {"__builtin_adjust_trampoline", "", adjust_trampoline}, |
| 89 | + {"__builtin_trap", "", trap}, |
| 90 | + {"__builtin_arm_chkfeat", "aarch64", aarch64_chkfeat}, |
| 91 | + {"__builtin_amdgcn_alignbyte", "amdgcn", amdgcn_alignbyte}, |
| 92 | + {"__builtin_amdgcn_workgroup_id_z", "amdgcn", amdgcn_workgroup_id_z}, |
| 93 | + {"__builtin_arm_cdp", "arm", arm_cdp}, |
| 94 | + {"__builtin_bpf_preserve_type_info", "bpf", bpf_preserve_type_info}, |
| 95 | + {"__builtin_hlsl_create_handle", "dx", dx_create_handle}, |
| 96 | + {"__builtin_HEXAGON_A2_tfr", "hexagon", hexagon_A2_tfr}, |
| 97 | + {"__builtin_lasx_xbz_w", "loongarch", loongarch_lasx_xbz_w}, |
| 98 | + {"__builtin_mips_bitrev", "mips", mips_bitrev}, |
| 99 | + {"__nvvm_add_rn_d", "nvvm", nvvm_add_rn_d}, |
| 100 | + {"__builtin_altivec_dss", "ppc", ppc_altivec_dss}, |
| 101 | + {"__builtin_riscv_sha512sum1r", "riscv", riscv_sha512sum1r}, |
| 102 | + {"__builtin_tend", "s390", s390_tend}, |
| 103 | + {"__builtin_ia32_pause", "x86", x86_sse2_pause}, |
| 104 | + |
| 105 | + {"__does_not_exist", "", not_intrinsic}, |
| 106 | + {"__does_not_exist", "arm", not_intrinsic}, |
| 107 | + {"__builtin_arm_cdp", "", not_intrinsic}, |
| 108 | + {"__builtin_arm_cdp", "x86", not_intrinsic}, |
| 109 | + }; |
| 110 | + |
| 111 | + for (const auto &[Builtin, Target, ID] : ClangTests) |
| 112 | + EXPECT_EQ(ID, getIntrinsicForClangBuiltin(Target, Builtin)); |
| 113 | +} |
| 114 | + |
| 115 | +// Tests to verify getIntrinsicForMSBuiltin. |
| 116 | +TEST(IntrinsicNameLookup, MSBuiltinLookup) { |
| 117 | + using namespace Intrinsic; |
| 118 | + static constexpr std::tuple<StringRef, StringRef, ID> MSTests[] = { |
| 119 | + {"__dmb", "aarch64", aarch64_dmb}, |
| 120 | + {"__dmb", "arm", arm_dmb}, |
| 121 | + {"__dmb", "", not_intrinsic}, |
| 122 | + {"__does_not_exist", "", not_intrinsic}, |
| 123 | + {"__does_not_exist", "arm", not_intrinsic}, |
| 124 | + }; |
| 125 | + for (const auto &[Builtin, Target, ID] : MSTests) |
| 126 | + EXPECT_EQ(ID, getIntrinsicForMSBuiltin(Target, Builtin)); |
| 127 | +} |
| 128 | + |
71 | 129 | TEST_F(IntrinsicsTest, InstrProfInheritance) {
|
72 | 130 | auto isInstrProfInstBase = [](const Instruction &I) {
|
73 | 131 | return isa<InstrProfInstBase>(I);
|
@@ -106,4 +164,5 @@ TEST_F(IntrinsicsTest, InstrProfInheritance) {
|
106 | 164 | EXPECT_TRUE(Checker(*Intr));
|
107 | 165 | }
|
108 | 166 | }
|
| 167 | + |
109 | 168 | } // end namespace
|
0 commit comments