brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · 8925d2b Raw
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