From 670993162a3ae969cdba37b9589c579bdb839ac5 Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Mon, 19 Oct 2015 04:51:35 +0000 Subject: [PATCH] Make getTargetBuiltins return an ArrayRef instead of having two out parameters of a pointer and length. NFC git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@250681 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Basic/Builtins.h | 15 ++--- include/clang/Basic/TargetInfo.h | 3 +- lib/Basic/Builtins.cpp | 23 +++---- lib/Basic/Targets.cpp | 107 +++++++++++++------------------ 4 files changed, 60 insertions(+), 88 deletions(-) diff --git a/include/clang/Basic/Builtins.h b/include/clang/Basic/Builtins.h index 27dc615400..13849fd5f2 100644 --- a/include/clang/Basic/Builtins.h +++ b/include/clang/Basic/Builtins.h @@ -16,6 +16,7 @@ #ifndef LLVM_CLANG_BASIC_BUILTINS_H #define LLVM_CLANG_BASIC_BUILTINS_H +#include "llvm/ADT/ArrayRef.h" #include // VC++ defines 'alloca' as an object-like macro, which interferes with our @@ -58,16 +59,14 @@ struct Info { /// target-specific builtins, allowing easy queries by clients. /// /// Builtins from an optional auxiliary target are stored in -/// AuxTSRecords. Their IDs are shifted up by NumTSRecords and need to +/// AuxTSRecords. Their IDs are shifted up by TSRecords.size() and need to /// be translated back with getAuxBuiltinID() before use. class Context { - const Info *TSRecords; - const Info *AuxTSRecords; - unsigned NumTSRecords; - unsigned NumAuxTSRecords; + llvm::ArrayRef TSRecords; + llvm::ArrayRef AuxTSRecords; public: - Context(); + Context() {} /// \brief Perform target-specific initialization /// \param AuxTarget Target info to incorporate builtins from. May be nullptr. @@ -186,12 +185,12 @@ public: /// \brief Return true if builtin ID belongs to AuxTarget. bool isAuxBuiltinID(unsigned ID) const { - return ID >= (Builtin::FirstTSBuiltin + NumTSRecords); + return ID >= (Builtin::FirstTSBuiltin + TSRecords.size()); } /// Return real buitin ID (i.e. ID it would have furing compilation /// for AuxTarget). - unsigned getAuxBuiltinID(unsigned ID) const { return ID - NumTSRecords; } + unsigned getAuxBuiltinID(unsigned ID) const { return ID - TSRecords.size(); } private: const Info &getRecord(unsigned ID) const; diff --git a/include/clang/Basic/TargetInfo.h b/include/clang/Basic/TargetInfo.h index e5d0ae18b2..054d55023c 100644 --- a/include/clang/Basic/TargetInfo.h +++ b/include/clang/Basic/TargetInfo.h @@ -516,8 +516,7 @@ public: /// Return information about target-specific builtins for /// the current primary target, and info about which builtins are non-portable /// across the current set of primary and secondary targets. - virtual void getTargetBuiltins(const Builtin::Info *&Records, - unsigned &NumRecords) const = 0; + virtual ArrayRef getTargetBuiltins() const = 0; /// The __builtin_clz* and __builtin_ctz* built-in /// functions are specified to have undefined results for zero inputs, but diff --git a/lib/Basic/Builtins.cpp b/lib/Basic/Builtins.cpp index cb8a0b37bb..69b10c13ed 100644 --- a/lib/Basic/Builtins.cpp +++ b/lib/Basic/Builtins.cpp @@ -32,27 +32,20 @@ static const Builtin::Info BuiltinInfo[] = { const Builtin::Info &Builtin::Context::getRecord(unsigned ID) const { if (ID < Builtin::FirstTSBuiltin) return BuiltinInfo[ID]; - assert(ID - Builtin::FirstTSBuiltin < (NumTSRecords + NumAuxTSRecords) && + assert(((ID - Builtin::FirstTSBuiltin) < + (TSRecords.size() + AuxTSRecords.size())) && "Invalid builtin ID!"); if (isAuxBuiltinID(ID)) return AuxTSRecords[getAuxBuiltinID(ID) - Builtin::FirstTSBuiltin]; return TSRecords[ID - Builtin::FirstTSBuiltin]; } -Builtin::Context::Context() { - // Get the target specific builtins from the target. - TSRecords = nullptr; - AuxTSRecords = nullptr; - NumTSRecords = 0; - NumAuxTSRecords = 0; -} - void Builtin::Context::InitializeTarget(const TargetInfo &Target, const TargetInfo *AuxTarget) { - assert(NumTSRecords == 0 && "Already initialized target?"); - Target.getTargetBuiltins(TSRecords, NumTSRecords); + assert(TSRecords.empty() && "Already initialized target?"); + TSRecords = Target.getTargetBuiltins(); if (AuxTarget) - AuxTarget->getTargetBuiltins(AuxTSRecords, NumAuxTSRecords); + AuxTSRecords = AuxTarget->getTargetBuiltins(); } bool Builtin::Context::builtinIsSupported(const Builtin::Info &BuiltinInfo, @@ -82,14 +75,14 @@ void Builtin::Context::initializeBuiltins(IdentifierTable &Table, } // Step #2: Register target-specific builtins. - for (unsigned i = 0, e = NumTSRecords; i != e; ++i) + for (unsigned i = 0, e = TSRecords.size(); i != e; ++i) if (builtinIsSupported(TSRecords[i], LangOpts)) Table.get(TSRecords[i].Name).setBuiltinID(i + Builtin::FirstTSBuiltin); // Step #3: Register target-specific builtins for AuxTarget. - for (unsigned i = 0, e = NumAuxTSRecords; i != e; ++i) + for (unsigned i = 0, e = AuxTSRecords.size(); i != e; ++i) Table.get(AuxTSRecords[i].Name) - .setBuiltinID(i + Builtin::FirstTSBuiltin + NumTSRecords); + .setBuiltinID(i + Builtin::FirstTSBuiltin + TSRecords.size()); } void Builtin::Context::forgetBuiltin(unsigned ID, IdentifierTable &Table) { diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index 65ae7be110..7efc6755da 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -876,10 +876,9 @@ public: StringRef getABI() const override { return ABI; } - void getTargetBuiltins(const Builtin::Info *&Records, - unsigned &NumRecords) const override { - Records = BuiltinInfo; - NumRecords = clang::PPC::LastTSBuiltin-Builtin::FirstTSBuiltin; + ArrayRef getTargetBuiltins() const override { + return llvm::makeArrayRef(BuiltinInfo, + clang::PPC::LastTSBuiltin-Builtin::FirstTSBuiltin); } bool isCLZForZeroUndef() const override { return false; } @@ -1637,10 +1636,9 @@ public: Builder.defineMacro("__CUDA_ARCH__", CUDAArchCode); } } - void getTargetBuiltins(const Builtin::Info *&Records, - unsigned &NumRecords) const override { - Records = BuiltinInfo; - NumRecords = clang::NVPTX::LastTSBuiltin - Builtin::FirstTSBuiltin; + ArrayRef getTargetBuiltins() const override { + return llvm::makeArrayRef(BuiltinInfo, + clang::NVPTX::LastTSBuiltin - Builtin::FirstTSBuiltin); } bool hasFeature(StringRef Feature) const override { return Feature == "ptx" || Feature == "nvptx"; @@ -1824,10 +1822,9 @@ public: return true; } - void getTargetBuiltins(const Builtin::Info *&Records, - unsigned &NumRecords) const override { - Records = BuiltinInfo; - NumRecords = clang::AMDGPU::LastTSBuiltin - Builtin::FirstTSBuiltin; + ArrayRef getTargetBuiltins() const override { + return llvm::makeArrayRef(BuiltinInfo, + clang::AMDGPU::LastTSBuiltin - Builtin::FirstTSBuiltin); } void getTargetDefines(const LangOptions &Opts, @@ -2336,10 +2333,9 @@ public: // X87 evaluates with 80 bits "long double" precision. return SSELevel == NoSSE ? 2 : 0; } - void getTargetBuiltins(const Builtin::Info *&Records, - unsigned &NumRecords) const override { - Records = BuiltinInfo; - NumRecords = clang::X86::LastTSBuiltin-Builtin::FirstTSBuiltin; + ArrayRef getTargetBuiltins() const override { + return llvm::makeArrayRef(BuiltinInfo, + clang::X86::LastTSBuiltin-Builtin::FirstTSBuiltin); } ArrayRef getGCCRegNames() const override { return llvm::makeArrayRef(GCCRegNames); @@ -4789,10 +4785,9 @@ public: Builder.defineMacro("__ARM_FP_FAST", "1"); } - void getTargetBuiltins(const Builtin::Info *&Records, - unsigned &NumRecords) const override { - Records = BuiltinInfo; - NumRecords = clang::ARM::LastTSBuiltin-Builtin::FirstTSBuiltin; + ArrayRef getTargetBuiltins() const override { + return llvm::makeArrayRef(BuiltinInfo, + clang::ARM::LastTSBuiltin-Builtin::FirstTSBuiltin); } bool isCLZForZeroUndef() const override { return false; } BuiltinVaListKind getBuiltinVaListKind() const override { @@ -5285,10 +5280,9 @@ public: Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8"); } - void getTargetBuiltins(const Builtin::Info *&Records, - unsigned &NumRecords) const override { - Records = BuiltinInfo; - NumRecords = clang::AArch64::LastTSBuiltin - Builtin::FirstTSBuiltin; + ArrayRef getTargetBuiltins() const override { + return llvm::makeArrayRef(BuiltinInfo, + clang::AArch64::LastTSBuiltin - Builtin::FirstTSBuiltin); } bool hasFeature(StringRef Feature) const override { @@ -5552,10 +5546,9 @@ public: NoAsmVariants = true; } - void getTargetBuiltins(const Builtin::Info *&Records, - unsigned &NumRecords) const override { - Records = BuiltinInfo; - NumRecords = clang::Hexagon::LastTSBuiltin-Builtin::FirstTSBuiltin; + ArrayRef getTargetBuiltins() const override { + return llvm::makeArrayRef(BuiltinInfo, + clang::Hexagon::LastTSBuiltin-Builtin::FirstTSBuiltin); } bool validateAsmConstraint(const char *&Name, @@ -5716,9 +5709,9 @@ public: .Default(false); } - void getTargetBuiltins(const Builtin::Info *&Records, - unsigned &NumRecords) const override { + ArrayRef getTargetBuiltins() const override { // FIXME: Implement! + return None; } BuiltinVaListKind getBuiltinVaListKind() const override { return TargetInfo::VoidPtrBuiltinVaList; @@ -5923,10 +5916,9 @@ public: if (Opts.ZVector) Builder.defineMacro("__VEC__", "10301"); } - void getTargetBuiltins(const Builtin::Info *&Records, - unsigned &NumRecords) const override { - Records = BuiltinInfo; - NumRecords = clang::SystemZ::LastTSBuiltin-Builtin::FirstTSBuiltin; + ArrayRef getTargetBuiltins() const override { + return llvm::makeArrayRef(BuiltinInfo, + clang::SystemZ::LastTSBuiltin-Builtin::FirstTSBuiltin); } ArrayRef getGCCRegNames() const override; @@ -6078,11 +6070,9 @@ public: Builder.defineMacro("__MSP430__"); // FIXME: defines for different 'flavours' of MCU } - void getTargetBuiltins(const Builtin::Info *&Records, - unsigned &NumRecords) const override { + ArrayRef getTargetBuiltins() const override { // FIXME: Implement. - Records = nullptr; - NumRecords = 0; + return None; } bool hasFeature(StringRef Feature) const override { return Feature == "msp430"; @@ -6179,8 +6169,7 @@ public: } bool hasFeature(StringRef Feature) const override { return Feature == "tce"; } - void getTargetBuiltins(const Builtin::Info *&Records, - unsigned &NumRecords) const override {} + ArrayRef getTargetBuiltins() const override { return None; } const char *getClobbers() const override { return ""; } BuiltinVaListKind getBuiltinVaListKind() const override { return TargetInfo::VoidPtrBuiltinVaList; @@ -6225,8 +6214,7 @@ public: return Feature == "bpf"; } - void getTargetBuiltins(const Builtin::Info *&Records, - unsigned &NumRecords) const override {} + ArrayRef getTargetBuiltins() const override { return None; } const char *getClobbers() const override { return ""; } @@ -6383,10 +6371,9 @@ public: Builder.defineMacro("_MIPS_ARCH_" + StringRef(CPU).upper()); } - void getTargetBuiltins(const Builtin::Info *&Records, - unsigned &NumRecords) const override { - Records = BuiltinInfo; - NumRecords = clang::Mips::LastTSBuiltin - Builtin::FirstTSBuiltin; + ArrayRef getTargetBuiltins() const override { + return llvm::makeArrayRef(BuiltinInfo, + clang::Mips::LastTSBuiltin - Builtin::FirstTSBuiltin); } bool hasFeature(StringRef Feature) const override { return llvm::StringSwitch(Feature) @@ -6869,9 +6856,7 @@ public: bool hasFeature(StringRef Feature) const override { return Feature == "pnacl"; } - void getTargetBuiltins(const Builtin::Info *&Records, - unsigned &NumRecords) const override { - } + ArrayRef getTargetBuiltins() const override { return None; } BuiltinVaListKind getBuiltinVaListKind() const override { return TargetInfo::PNaClABIBuiltinVaList; } @@ -6925,10 +6910,9 @@ public: defineCPUMacros(Builder, "le64", /*Tuning=*/false); Builder.defineMacro("__ELF__"); } - void getTargetBuiltins(const Builtin::Info *&Records, - unsigned &NumRecords) const override { - Records = BuiltinInfo; - NumRecords = clang::Le64::LastTSBuiltin - Builtin::FirstTSBuiltin; + ArrayRef getTargetBuiltins() const override { + return llvm::makeArrayRef(BuiltinInfo, + clang::Le64::LastTSBuiltin - Builtin::FirstTSBuiltin); } BuiltinVaListKind getBuiltinVaListKind() const override { return TargetInfo::PNaClABIBuiltinVaList; @@ -7015,10 +6999,9 @@ private: .Case("generic", true) .Default(false); } - void getTargetBuiltins(const Builtin::Info *&Records, - unsigned &NumRecords) const final { - Records = BuiltinInfo; - NumRecords = clang::WebAssembly::LastTSBuiltin - Builtin::FirstTSBuiltin; + ArrayRef getTargetBuiltins() const final { + return llvm::makeArrayRef(BuiltinInfo, + clang::WebAssembly::LastTSBuiltin - Builtin::FirstTSBuiltin); } BuiltinVaListKind getBuiltinVaListKind() const final { // TODO: Implement va_list properly. @@ -7134,8 +7117,7 @@ public: return Feature == "spir"; } - void getTargetBuiltins(const Builtin::Info *&Records, - unsigned &NumRecords) const override {} + ArrayRef getTargetBuiltins() const override { return None; } const char *getClobbers() const override { return ""; } ArrayRef getGCCRegNames() const override { return None; } bool validateAsmConstraint(const char *&Name, @@ -7211,10 +7193,9 @@ public: MacroBuilder &Builder) const override { Builder.defineMacro("__XS1B__"); } - void getTargetBuiltins(const Builtin::Info *&Records, - unsigned &NumRecords) const override { - Records = BuiltinInfo; - NumRecords = clang::XCore::LastTSBuiltin-Builtin::FirstTSBuiltin; + ArrayRef getTargetBuiltins() const override { + return llvm::makeArrayRef(BuiltinInfo, + clang::XCore::LastTSBuiltin-Builtin::FirstTSBuiltin); } BuiltinVaListKind getBuiltinVaListKind() const override { return TargetInfo::VoidPtrBuiltinVaList; -- 2.40.0