From 8c0cd53a9006a275f4db5653f9ef28d94db9ed67 Mon Sep 17 00:00:00 2001 From: Reid Kleckner <rnk@google.com> Date: Fri, 16 Dec 2016 22:11:28 +0000 Subject: [PATCH] Really revert all changes from r289979. Apparently conflict resolution failed git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@289997 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Basic/OpenCLOptions.h | 111 +++++++++------------------- 1 file changed, 35 insertions(+), 76 deletions(-) diff --git a/include/clang/Basic/OpenCLOptions.h b/include/clang/Basic/OpenCLOptions.h index a51494fa2e..fa52ae723f 100644 --- a/include/clang/Basic/OpenCLOptions.h +++ b/include/clang/Basic/OpenCLOptions.h @@ -15,122 +15,81 @@ #ifndef LLVM_CLANG_BASIC_OPENCLOPTIONS_H #define LLVM_CLANG_BASIC_OPENCLOPTIONS_H -#include "llvm/ADT/StringMap.h" +#include "llvm/ADT/StringRef.h" namespace clang { /// \brief OpenCL supported extensions and optional core features class OpenCLOptions { - struct Info { - bool Supported; // Is this option supported - bool Enabled; // Is this option enabled - unsigned Avail; // Option starts to be available in this OpenCL version - unsigned Core; // Option becomes (optional) core feature in this OpenCL - // version - Info(bool S = false, bool E = false, unsigned A = 100, unsigned C = ~0U) - :Supported(S), Enabled(E), Avail(A), Core(C){} - }; - llvm::StringMap<Info> OptMap; public: - bool isKnown(llvm::StringRef Ext) const { - return OptMap.find(Ext) != OptMap.end(); - } - - bool isEnabled(llvm::StringRef Ext) const { - return OptMap.find(Ext)->second.Enabled; - } - - // Is supported as either an extension or an (optional) core feature for - // OpenCL version \p CLVer. - bool isSupported(llvm::StringRef Ext, unsigned CLVer) const { - auto I = OptMap.find(Ext)->getValue(); - return I.Supported && I.Avail <= CLVer; - } - - // Is supported (optional) OpenCL core features for OpenCL version \p CLVer. - // For supported extension, return false. - bool isSupportedCore(llvm::StringRef Ext, unsigned CLVer) const { - auto I = OptMap.find(Ext)->getValue(); - return I.Supported && I.Avail <= CLVer && - I.Core != ~0U && CLVer >= I.Core; - } +#define OPENCLEXT(nm) unsigned nm : 1; +#include "clang/Basic/OpenCLExtensions.def" - // Is supported OpenCL extension for OpenCL version \p CLVer. - // For supported (optional) core feature, return false. - bool isSupportedExtension(llvm::StringRef Ext, unsigned CLVer) const { - auto I = OptMap.find(Ext)->getValue(); - return I.Supported && I.Avail <= CLVer && - (I.Core == ~0U || CLVer < I.Core); + OpenCLOptions() { +#define OPENCLEXT(nm) nm = 0; +#include "clang/Basic/OpenCLExtensions.def" } - void enable(llvm::StringRef Ext, bool V = true) { - OptMap[Ext].Enabled = V; + // Enable or disable all options. + void setAll(bool Enable = true) { +#define OPENCLEXT(nm) nm = Enable; +#include "clang/Basic/OpenCLExtensions.def" } /// \brief Enable or disable support for OpenCL extensions /// \param Ext name of the extension optionally prefixed with /// '+' or '-' /// \param Enable used when \p Ext is not prefixed by '+' or '-' - void support(llvm::StringRef Ext, bool V = true) { + void set(llvm::StringRef Ext, bool Enable = true) { assert(!Ext.empty() && "Extension is empty."); switch (Ext[0]) { case '+': - V = true; + Enable = true; Ext = Ext.drop_front(); break; case '-': - V = false; + Enable = false; Ext = Ext.drop_front(); break; } if (Ext.equals("all")) { - supportAll(V); + setAll(Enable); return; } - OptMap[Ext].Supported = V; - } - OpenCLOptions(){ -#define OPENCLEXT_INTERNAL(Ext, AvailVer, CoreVer) \ - OptMap[#Ext].Avail = AvailVer; \ - OptMap[#Ext].Core = CoreVer; +#define OPENCLEXT(nm) \ + if (Ext.equals(#nm)) { \ + nm = Enable; \ + } #include "clang/Basic/OpenCLExtensions.def" } - void addSupport(const OpenCLOptions &Opts) { - for (auto &I:Opts.OptMap) - if (I.second.Supported) - OptMap[I.getKey()].Supported = true; - } - - void copy(const OpenCLOptions &Opts) { - OptMap = Opts.OptMap; + // Is supported with OpenCL version \p OCLVer. +#define OPENCLEXT_INTERNAL(Ext, Avail, ...) \ + bool is_##Ext##_supported(unsigned OCLVer) const { \ + return Ext && OCLVer >= Avail; \ } +#include "clang/Basic/OpenCLExtensions.def" - // Turn on or off support of all options. - void supportAll(bool On = true) { - for (llvm::StringMap<Info>::iterator I = OptMap.begin(), - E = OptMap.end(); I != E; ++I) - I->second.Supported = On; - } - void disableAll() { - for (llvm::StringMap<Info>::iterator I = OptMap.begin(), - E = OptMap.end(); I != E; ++I) - I->second.Enabled = false; + // Is supported OpenCL extension with OpenCL version \p OCLVer. + // For supported optional core feature, return false. +#define OPENCLEXT_INTERNAL(Ext, Avail, Core) \ + bool is_##Ext##_supported_extension(unsigned CLVer) const { \ + return is_##Ext##_supported(CLVer) && (Core == ~0U || CLVer < Core); \ } +#include "clang/Basic/OpenCLExtensions.def" - void enableSupportedCore(unsigned CLVer) { - for (llvm::StringMap<Info>::iterator I = OptMap.begin(), - E = OptMap.end(); I != E; ++I) - if (isSupportedCore(I->getKey(), CLVer)) - I->second.Enabled = true; + // Is supported OpenCL core features with OpenCL version \p OCLVer. + // For supported extension, return false. +#define OPENCLEXT_INTERNAL(Ext, Avail, Core) \ + bool is_##Ext##_supported_core(unsigned CLVer) const { \ + return is_##Ext##_supported(CLVer) && Core != ~0U && CLVer >= Core; \ } +#include "clang/Basic/OpenCLExtensions.def" - friend class ASTWriter; - friend class ASTReader; }; } // end namespace clang -- 2.40.0