//=== llvm/TargetParser/SubtargetFeature.h - CPU characteristics-*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // /// \file Defines and manages user or tool specified CPU characteristics. /// The intent is to be able to package specific features that should or should /// not be used on a specific target processor. A tool, such as llc, could, as /// as example, gather chip info from the command line, a long with features /// that should be used on that chip. // //===----------------------------------------------------------------------===// #ifndef LLVM_TARGETPARSER_SUBTARGETFEATURE_H #define LLVM_TARGETPARSER_SUBTARGETFEATURE_H #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/MathExtras.h" #include <array> #include <initializer_list> #include <string> #include <vector> namespace llvm { class raw_ostream; class Triple; const unsigned MAX_SUBTARGET_WORDS = …; const unsigned MAX_SUBTARGET_FEATURES = …; /// Container class for subtarget features. /// This is a constexpr reimplementation of a subset of std::bitset. It would be /// nice to use std::bitset directly, but it doesn't support constant /// initialization. class FeatureBitset { … }; /// Class used to store the subtarget bits in the tables created by tablegen. class FeatureBitArray : public FeatureBitset { … }; //===----------------------------------------------------------------------===// /// Manages the enabling and disabling of subtarget specific features. /// /// Features are encoded as a string of the form /// "+attr1,+attr2,-attr3,...,+attrN" /// A comma separates each feature from the next (all lowercase.) /// Each of the remaining features is prefixed with + or - indicating whether /// that feature should be enabled or disabled contrary to the cpu /// specification. class SubtargetFeatures { … }; } // end namespace llvm #endif // LLVM_TARGETPARSER_SUBTARGETFEATURE_H