64 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "llvm/IR/RuntimeLibcalls.h"10#include "llvm/ADT/STLExtras.h"11#include "gtest/gtest.h"12using namespace llvm;13 14namespace {15 16TEST(RuntimeLibcallsTest, LibcallImplByName) {17 EXPECT_TRUE(RTLIB::RuntimeLibcallsInfo::lookupLibcallImplName("").empty());18 EXPECT_TRUE(19 RTLIB::RuntimeLibcallsInfo::lookupLibcallImplName("unknown").empty());20 EXPECT_TRUE(21 RTLIB::RuntimeLibcallsInfo::lookupLibcallImplName("Unsupported").empty());22 EXPECT_TRUE(23 RTLIB::RuntimeLibcallsInfo::lookupLibcallImplName("unsupported").empty());24 25 for (RTLIB::LibcallImpl LC : RTLIB::libcall_impls()) {26 StringRef Name = RTLIB::RuntimeLibcallsInfo::getLibcallImplName(LC);27 EXPECT_TRUE(is_contained(28 RTLIB::RuntimeLibcallsInfo::lookupLibcallImplName(Name), LC));29 }30 31 // Test first libcall name32 EXPECT_EQ(33 RTLIB::impl_arm64ec__Unwind_Resume,34 *RTLIB::RuntimeLibcallsInfo::lookupLibcallImplName("#_Unwind_Resume")35 .begin());36 // Test longest libcall names37 EXPECT_EQ(RTLIB::impl___hexagon_memcpy_likely_aligned_min32bytes_mult8bytes,38 *RTLIB::RuntimeLibcallsInfo::lookupLibcallImplName(39 "__hexagon_memcpy_likely_aligned_min32bytes_mult8bytes")40 .begin());41 42 {43 auto SquirtleSquad =44 RTLIB::RuntimeLibcallsInfo::lookupLibcallImplName("sqrtl");45 ASSERT_EQ(size(SquirtleSquad), 3);46 auto I = SquirtleSquad.begin();47 EXPECT_EQ(*I++, RTLIB::impl_sqrtl_f128);48 EXPECT_EQ(*I++, RTLIB::impl_sqrtl_f80);49 EXPECT_EQ(*I++, RTLIB::impl_sqrtl_ppcf128);50 }51 52 // Last libcall53 {54 auto Truncs = RTLIB::RuntimeLibcallsInfo::lookupLibcallImplName("truncl");55 ASSERT_EQ(size(Truncs), 3);56 auto I = Truncs.begin();57 EXPECT_EQ(*I++, RTLIB::impl_truncl_f128);58 EXPECT_EQ(*I++, RTLIB::impl_truncl_f80);59 EXPECT_EQ(*I++, RTLIB::impl_truncl_ppcf128);60 }61}62 63} // namespace64