brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.4 KiB · 2a1cc72 Raw
317 lines · plain
1// RUN: llvm-tblgen -gen-runtime-libcalls -I %p/../../include %s | FileCheck %s2 3include "llvm/IR/RuntimeLibcallsImpl.td"4 5 6def SHL_I32 : RuntimeLibcall;7def SRL_I64 : RuntimeLibcall;8 9def SQRT_F128 : RuntimeLibcall;10def SQRT_F80 : RuntimeLibcall;11def BZERO : RuntimeLibcall;12def MEMCPY : RuntimeLibcall;13def MEMSET : RuntimeLibcall;14def CALLOC : RuntimeLibcall;15 16// Test default names.17let IsDefault = true in {18  def __ashlsi3 : RuntimeLibcallImpl<SHL_I32>;19  def __lshrdi3 : RuntimeLibcallImpl<SRL_I64>;20 21  def sqrtl_f128 : RuntimeLibcallImpl<SQRT_F128, "sqrtl">;22  def sqrtl_f80 : RuntimeLibcallImpl<SQRT_F80, "sqrtl">;23}24 25// Ignore non-default in initDefaultLibCallNames.26def bzero : RuntimeLibcallImpl<BZERO>;27 28def ___memset : RuntimeLibcallImpl<MEMSET, "___memset">;29def ___memcpy : RuntimeLibcallImpl<MEMCPY, "___memcpy">;30 31def calloc  : RuntimeLibcallImpl<CALLOC, "calloc">;32 33def CompilerRTLibcalls : LibcallImpls<(add __ashlsi3, __lshrdi3)>;34def LibmLibcalls : LibcallImpls<(add sqrtl_f80)>;35 36def isSimpleArch : RuntimeLibcallPredicate<[{TT.getArch() == Triple::simple}]>;37def isFooArch : RuntimeLibcallPredicate<[{TT.getArch() == Triple::foo}]>;38 39 40def isZOS : RuntimeLibcallPredicate<[{TT.getOS() == Triple::zos}]>;41def isPPC : RuntimeLibcallPredicate<[{TT.getArch().isPPC()}]>;42def isPPC64 : RuntimeLibcallPredicate<[{TT.getArch().isPPC64()}]>;43 44 45def isFoo : RuntimeLibcallPredicate<[{isFOO()}]>;46def isBarOS : RuntimeLibcallPredicate<[{TT.getOS() == Triple::bar}]>;47def isBuzzArch : RuntimeLibcallPredicate<[{TT.getArch() == Triple::buzz}]>;48def isBlahArch : RuntimeLibcallPredicate<[{TT.getArch() == Triple::blah}]>;49 50def hasCompilerRT : RuntimeLibcallPredicate<[{TT.hasCompilerRT()}]>;51 52 53def SimpleLibrary : SystemRuntimeLibrary<isSimpleArch,54  (add LibmLibcalls, calloc, CompilerRTLibcalls)>;55 56 57def LibraryWithConditionalFunc : LibcallImpls<(add sqrtl_f128, bzero, AvailableIf<___memset, isBarOS>)>;58 59def FooLibrary : SystemRuntimeLibrary<isFooArch, (add LibraryWithConditionalFunc)>;60 61def BuzzLibrary : SystemRuntimeLibrary<isBuzzArch, (add sqrtl_f80, CompilerRTLibcalls)>;62 63 64 65def LibraryWithConditionalSet : LibcallImpls<(add sqrtl_f128, bzero,66  LibcallImpls<(add CompilerRTLibcalls), hasCompilerRT>)>;67 68 69 70def BlahLibrary : SystemRuntimeLibrary<isBlahArch, (add calloc, LibraryWithConditionalSet, AvailableIf<___memset, isBarOS>)>;71 72 73 74// All entries should be emitted in Libcall enum.75// CHECK: #ifdef GET_RUNTIME_LIBCALL_ENUM76// CHECK-NEXT: #undef GET_RUNTIME_LIBCALL_ENUM77// CHECK-EMPTY:78// CHECK-NEXT: namespace llvm {79// CHECK-NEXT: namespace RTLIB {80// CHECK-NEXT: enum Libcall : unsigned short {81// CHECK-NEXT: BZERO = 0,82// CHECK-NEXT: CALLOC = 1,83// CHECK-NEXT: MEMCPY = 2,84// CHECK-NEXT: MEMSET = 3,85// CHECK-NEXT: SHL_I32 = 4,86// CHECK-NEXT: SQRT_F80 = 5,87// CHECK-NEXT: SQRT_F128 = 6,88// CHECK-NEXT: SRL_I64 = 7,89// CHECK-NEXT: UNKNOWN_LIBCALL = 890// CHECK-NEXT: };91// CHECK-EMPTY:92// CHECK-NEXT:enum LibcallImpl : unsigned short {93// CHECK-NEXT:  Unsupported = 0,94// CHECK-NEXT:  impl____memcpy = 1, // ___memcpy95// CHECK-NEXT:  impl____memset = 2, // ___memset96// CHECK-NEXT:  impl___ashlsi3 = 3, // __ashlsi397// CHECK-NEXT:  impl___lshrdi3 = 4, // __lshrdi398// CHECK-NEXT:  bzero = 5, // bzero99// CHECK-NEXT:  calloc = 6, // calloc100// CHECK-NEXT:  sqrtl_f128 = 7, // sqrtl101// CHECK-NEXT:  sqrtl_f80 = 8, // sqrtl102// CHECK-NEXT: };103// CHECK-NEXT: constexpr size_t NumLibcallImpls = 9;104// CHECK-NEXT: } // End namespace RTLIB105// CHECK-NEXT: } // End namespace llvm106// CHECK-EMPTY:107// CHECK-NEXT: #endif // GET_RUNTIME_LIBCALL_ENUM108 109// CHECK: #ifdef GET_INIT_RUNTIME_LIBCALL_NAMES110// CHECK-NEXT: #undef GET_INIT_RUNTIME_LIBCALL_NAMES111// CHECK-EMPTY:112// CHECK-EMPTY:113// CHECK-NEXT: #ifdef __GNUC__114// CHECK-NEXT: #pragma GCC diagnostic push115// CHECK-NEXT: #pragma GCC diagnostic ignored "-Woverlength-strings"116// CHECK-NEXT: #endif117// CHECK-NEXT:  constexpr char RTLIB::RuntimeLibcallsInfo::RuntimeLibcallImplNameTableStorage[] =118// CHECK-NEXT:   "\0"119// CHECK-NEXT:   "___memcpy\0"120// CHECK-NEXT:   "___memset\0"121// CHECK-NEXT:   "__ashlsi3\0"122// CHECK-NEXT:   "__lshrdi3\0"123// CHECK-NEXT:   "bzero\0"124// CHECK-NEXT:   "calloc\0"125// CHECK-NEXT:   "sqrtl\0"126// CHECK-NEXT:   ;127// CHECK-NEXT: #ifdef __GNUC__128// CHECK-NEXT: #pragma GCC diagnostic pop129// CHECK-NEXT: #endif130// CHECK-EMPTY:131// CHECK-NEXT: const llvm::StringTable132// CHECK-NEXT: RTLIB::RuntimeLibcallsInfo::RuntimeLibcallImplNameTable = RuntimeLibcallImplNameTableStorage;133// CHECK-EMPTY:134// CHECK-NEXT: const uint16_t RTLIB::RuntimeLibcallsInfo::RuntimeLibcallNameOffsetTable[] = {135// CHECK-NEXT:   0, //136// CHECK-NEXT:   1, // ___memcpy137// CHECK-NEXT:   11, // ___memset138// CHECK-NEXT:   21, // __ashlsi3139// CHECK-NEXT:   31, // __lshrdi3140// CHECK-NEXT:   41, // bzero141// CHECK-NEXT:   47, // calloc142// CHECK-NEXT:   54, // sqrtl143// CHECK-NEXT:   54, // sqrtl144// CHECK-NEXT: };145// CHECK-EMPTY:146// CHECK-NEXT: const uint8_t RTLIB::RuntimeLibcallsInfo::RuntimeLibcallNameSizeTable[] = {147// CHECK-NEXT:   0,148// CHECK-NEXT:   9,149// CHECK-NEXT:   9,150// CHECK-NEXT:   9,151// CHECK-NEXT:   9,152// CHECK-NEXT:   5,153// CHECK-NEXT:   6,154// CHECK-NEXT:   5,155// CHECK-NEXT:   5,156// CHECK-NEXT: };157// CHECK-EMPTY:158// CHECK-NEXT: const RTLIB::Libcall llvm::RTLIB::RuntimeLibcallsInfo::ImplToLibcall[RTLIB::NumLibcallImpls] = {159// CHECK-NEXT: RTLIB::UNKNOWN_LIBCALL, // RTLIB::Unsupported160// CHECK-NEXT: RTLIB::MEMCPY, // RTLIB::impl____memcpy161// CHECK-NEXT: RTLIB::MEMSET, // RTLIB::impl____memset162// CHECK-NEXT: RTLIB::SHL_I32, // RTLIB::impl___ashlsi3163// CHECK-NEXT: RTLIB::SRL_I64, // RTLIB::impl___lshrdi3164// CHECK-NEXT: RTLIB::BZERO, // RTLIB::impl_bzero165// CHECK-NEXT: RTLIB::CALLOC, // RTLIB::impl_calloc166// CHECK-NEXT: RTLIB::SQRT_F128, // RTLIB::impl_sqrtl_f128167// CHECK-NEXT: RTLIB::SQRT_F80, // RTLIB::impl_sqrtl_f80168// CHECK-NEXT: };169 170// CHECK: #ifdef GET_LOOKUP_LIBCALL_IMPL_NAME_BODY171// CHECK-NEXT: #undef GET_LOOKUP_LIBCALL_IMPL_NAME_BODY172// CHECK-EMPTY:173// CHECK-NEXT: size_t Size = Name.size();174// CHECK-NEXT: if (Size == 0 || Size > 9)175// CHECK-NEXT:   return enum_seq(RTLIB::Unsupported, RTLIB::Unsupported);176// CHECK-NEXT: return lookupLibcallImplNameImpl(Name);177// CHECK-EMPTY:178// CHECK-NEXT: #endif // GET_LOOKUP_LIBCALL_IMPL_NAME_BODY179 180// CHECK: #ifdef DEFINE_GET_LOOKUP_LIBCALL_IMPL_NAME181// CHECK-NEXT: #undef DEFINE_GET_LOOKUP_LIBCALL_IMPL_NAME182// CHECK-EMPTY:183// CHECK-NEXT: static inline uint64_t hash(StringRef Str) {184// CHECK-NEXT: return static_cast<uint32_t>(xxh3_64bits(Str));185// CHECK-NEXT: }186 187// CHECK: iota_range<RTLIB::LibcallImpl> RTLIB::RuntimeLibcallsInfo::lookupLibcallImplNameImpl(StringRef Name) {188// CHECK: static constexpr uint16_t HashTableNameToEnum[16] = {189// CHECK: 2,190// CHECK: 0,191// CHECK: 6,192// CHECK: 0,193// CHECK: };194 195// CHECK: unsigned Idx = (hash(Name) % 8) * 2;196// CHECK: for (int I = 0; I != 2; ++I) {197// CHECK: return libcallImplNameHit(Entry, StrOffset);198 199// CHECK: return enum_seq(RTLIB::Unsupported, RTLIB::Unsupported);200// CHECK-NEXT: }201 202// CHECK: void llvm::RTLIB::RuntimeLibcallsInfo::setTargetRuntimeLibcallSets(const llvm::Triple &TT, ExceptionHandling ExceptionModel, FloatABI::ABIType FloatABI, EABI EABIVersion, StringRef ABIName) {203// CHECK-EMPTY:204// CHECK-NEXT: if (TT.getArch() == Triple::blah) {205// CHECK-NEXT:     static constexpr LibcallImplBitset SystemAvailableImpls({206// CHECK-NEXT:       0x000000000000e0207// CHECK-NEXT:     });208// CHECK-NEXT:     AvailableLibcallImpls = SystemAvailableImpls;209// CHECK-EMPTY:210// CHECK-NEXT:    static const RTLIB::LibcallImpl LibraryCalls[] = {211// CHECK-NEXT:        RTLIB::impl_bzero, // bzero212// CHECK-NEXT:        RTLIB::impl_calloc, // calloc213// CHECK-NEXT:        RTLIB::impl_sqrtl_f128, // sqrtl214// CHECK-NEXT:    };215// CHECK-EMPTY:216// CHECK-NEXT:    for (const RTLIB::LibcallImpl Impl : LibraryCalls) {217// CHECK-NEXT:      setAvailable(Impl);218// CHECK-NEXT:    }219// CHECK-EMPTY:220// CHECK-NEXT:    if (TT.hasCompilerRT()) {221// CHECK-NEXT:      static const RTLIB::LibcallImpl LibraryCalls_hasCompilerRT[] = {222// CHECK-NEXT:          RTLIB::impl___ashlsi3, // __ashlsi3223// CHECK-NEXT:          RTLIB::impl___lshrdi3, // __lshrdi3224// CHECK-NEXT:      };225// CHECK-EMPTY:226// CHECK-NEXT:      for (const RTLIB::LibcallImpl Impl : LibraryCalls_hasCompilerRT) {227// CHECK-NEXT:        setAvailable(Impl);228// CHECK-NEXT:      }229// CHECK-EMPTY:230// CHECK-NEXT:    }231// CHECK-EMPTY:232// CHECK-NEXT:    if (TT.getOS() == Triple::bar) {233// CHECK-NEXT:      static const RTLIB::LibcallImpl LibraryCalls_isBarOS[] = {234// CHECK-NEXT:          RTLIB::impl____memset, // ___memset235// CHECK-NEXT:      };236// CHECK-EMPTY:237// CHECK-NEXT:      for (const RTLIB::LibcallImpl Impl : LibraryCalls_isBarOS) {238// CHECK-NEXT:        setAvailable(Impl);239// CHECK-NEXT:      }240// CHECK-EMPTY:241// CHECK-NEXT:    }242// CHECK-EMPTY:243// CHECK-NEXT:   return;244// CHECK-NEXT: }245// CHECK-EMPTY:246// CHECK-NEXT: if (TT.getArch() == Triple::buzz) {247// CHECK-NEXT:    static constexpr LibcallImplBitset SystemAvailableImpls({248// CHECK-NEXT:      0x00000000000118249// CHECK-NEXT:    });250// CHECK-NEXT:    AvailableLibcallImpls = SystemAvailableImpls;251// CHECK-EMPTY:252// CHECK-NEXT:    static const RTLIB::LibcallImpl LibraryCalls[] = {253// CHECK-NEXT:        RTLIB::impl___ashlsi3, // __ashlsi3254// CHECK-NEXT:        RTLIB::impl_sqrtl_f80, // sqrtl255// CHECK-NEXT:        RTLIB::impl___lshrdi3, // __lshrdi3256// CHECK-NEXT:    };257// CHECK-EMPTY:258// CHECK-NEXT:    for (const RTLIB::LibcallImpl Impl : LibraryCalls) {259// CHECK-NEXT:      setAvailable(Impl);260// CHECK-NEXT:    }261// CHECK-EMPTY:262// CHECK-NEXT:   return;263// CHECK-NEXT: }264// CHECK-EMPTY:265// CHECK-NEXT: if (TT.getArch() == Triple::foo) {266// CHECK-NEXT:    static constexpr LibcallImplBitset SystemAvailableImpls({267// CHECK-NEXT:      0x000000000000a0268// CHECK-NEXT:    });269// CHECK-NEXT:    AvailableLibcallImpls = SystemAvailableImpls;270// CHECK-EMPTY:271// CHECK-NEXT:    static const RTLIB::LibcallImpl LibraryCalls[] = {272// CHECK-NEXT:        RTLIB::impl_bzero, // bzero273// CHECK-NEXT:        RTLIB::impl_sqrtl_f128, // sqrtl274// CHECK-NEXT:    };275// CHECK-EMPTY:276// CHECK-NEXT:    for (const RTLIB::LibcallImpl Impl : LibraryCalls) {277// CHECK-NEXT:      setAvailable(Impl);278// CHECK-NEXT:    }279// CHECK-EMPTY:280// CHECK-NEXT:    if (TT.getOS() == Triple::bar) {281// CHECK-NEXT:      static const RTLIB::LibcallImpl LibraryCalls_isBarOS[] = {282// CHECK-NEXT:          RTLIB::impl____memset, // ___memset283// CHECK-NEXT:      };284// CHECK-EMPTY:285// CHECK-NEXT:      for (const RTLIB::LibcallImpl Impl : LibraryCalls_isBarOS) {286// CHECK-NEXT:        setAvailable(Impl);287// CHECK-NEXT:      }288// CHECK-EMPTY:289// CHECK-NEXT:    }290// CHECK-EMPTY:291// CHECK-NEXT:    return;292// CHECK-NEXT:  }293// CHECK-EMPTY:294// CHECK-NEXT: if (TT.getArch() == Triple::simple) {295// CHECK-NEXT:    static constexpr LibcallImplBitset SystemAvailableImpls({296// CHECK-NEXT:      0x00000000000158297// CHECK-NEXT:    });298// CHECK-NEXT:    AvailableLibcallImpls = SystemAvailableImpls;299// CHECK-EMPTY:300// CHECK-NEXT:    static const RTLIB::LibcallImpl LibraryCalls[] = {301// CHECK-NEXT:        RTLIB::impl_calloc, // calloc302// CHECK-NEXT:        RTLIB::impl___ashlsi3, // __ashlsi3303// CHECK-NEXT:        RTLIB::impl_sqrtl_f80, // sqrtl304// CHECK-NEXT:        RTLIB::impl___lshrdi3, // __lshrdi3305// CHECK-NEXT:    };306// CHECK-EMPTY:307// CHECK-NEXT:    for (const RTLIB::LibcallImpl Impl : LibraryCalls) {308// CHECK-NEXT:      setAvailable(Impl);309// CHECK-NEXT:    }310// CHECK-EMPTY:311// CHECK-NEXT:   return;312// CHECK-NEXT: }313// CHECK-NEXT:  LLVM_DEBUG(dbgs() << "no system runtime library applied to target \'" << TT.str() << "\'\n");314// CHECK-NEXT: }315// CHECK-EMPTY:316// CHECK: #endif317