| //===- SubtargetFeatureInfo.h - Helpers for subtarget features ------------===// | |
| // | |
| // The LLVM Compiler Infrastructure | |
| // | |
| // This file is distributed under the University of Illinois Open Source | |
| // License. See LICENSE.TXT for details. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #ifndef LLVM_UTIL_TABLEGEN_SUBTARGETFEATUREINFO_H | |
| #define LLVM_UTIL_TABLEGEN_SUBTARGETFEATUREINFO_H | |
| #include "llvm/TableGen/Error.h" | |
| #include "llvm/TableGen/Record.h" | |
| #include <map> | |
| #include <string> | |
| #include <vector> | |
| namespace llvm { | |
| class Record; | |
| class RecordKeeper; | |
| struct SubtargetFeatureInfo; | |
| using SubtargetFeatureInfoMap = std::map<Record *, SubtargetFeatureInfo, LessRecordByID>; | |
| /// Helper class for storing information on a subtarget feature which | |
| /// participates in instruction matching. | |
| struct SubtargetFeatureInfo { | |
| /// The predicate record for this feature. | |
| Record *TheDef; | |
| /// An unique index assigned to represent this feature. | |
| uint64_t Index; | |
| SubtargetFeatureInfo(Record *D, uint64_t Idx) : TheDef(D), Index(Idx) {} | |
| /// The name of the enumerated constant identifying this feature. | |
| std::string getEnumName() const { | |
| return "Feature_" + TheDef->getName().str(); | |
| } | |
| /// The name of the enumerated constant identifying the bitnumber for | |
| /// this feature. | |
| std::string getEnumBitName() const { | |
| return "Feature_" + TheDef->getName().str() + "Bit"; | |
| } | |
| bool mustRecomputePerFunction() const { | |
| return TheDef->getValueAsBit("RecomputePerFunction"); | |
| } | |
| void dump() const; | |
| static std::vector<std::pair<Record *, SubtargetFeatureInfo>> | |
| getAll(const RecordKeeper &Records); | |
| /// Emit the subtarget feature flag definitions. | |
| /// | |
| /// This version emits the bit value for the feature and is therefore limited | |
| /// to 64 feature bits. | |
| static void emitSubtargetFeatureFlagEnumeration( | |
| SubtargetFeatureInfoMap &SubtargetFeatures, raw_ostream &OS); | |
| /// Emit the subtarget feature flag definitions. | |
| /// | |
| /// This version emits the bit index for the feature and can therefore support | |
| /// more than 64 feature bits. | |
| static void | |
| emitSubtargetFeatureBitEnumeration(SubtargetFeatureInfoMap &SubtargetFeatures, | |
| raw_ostream &OS); | |
| static void emitNameTable(SubtargetFeatureInfoMap &SubtargetFeatures, | |
| raw_ostream &OS); | |
| /// Emit the function to compute the list of available features given a | |
| /// subtarget. | |
| /// | |
| /// This version is used for subtarget features defined using Predicate<> | |
| /// and supports more than 64 feature bits. | |
| /// | |
| /// \param TargetName The name of the target as used in class prefixes (e.g. | |
| /// <TargetName>Subtarget) | |
| /// \param ClassName The name of the class (without the <Target> prefix) | |
| /// that will contain the generated functions. | |
| /// \param FuncName The name of the function to emit. | |
| /// \param SubtargetFeatures A map of TableGen records to the | |
| /// SubtargetFeatureInfo equivalent. | |
| /// \param ExtraParams Additional arguments to the generated function. | |
| static void | |
| emitComputeAvailableFeatures(StringRef TargetName, StringRef ClassName, | |
| StringRef FuncName, | |
| SubtargetFeatureInfoMap &SubtargetFeatures, | |
| raw_ostream &OS, StringRef ExtraParams = ""); | |
| /// Emit the function to compute the list of available features given a | |
| /// subtarget. | |
| /// | |
| /// This version is used for subtarget features defined using | |
| /// AssemblerPredicate<> and supports up to 64 feature bits. | |
| /// | |
| /// \param TargetName The name of the target as used in class prefixes (e.g. | |
| /// <TargetName>Subtarget) | |
| /// \param ClassName The name of the class (without the <Target> prefix) | |
| /// that will contain the generated functions. | |
| /// \param FuncName The name of the function to emit. | |
| /// \param SubtargetFeatures A map of TableGen records to the | |
| /// SubtargetFeatureInfo equivalent. | |
| static void emitComputeAssemblerAvailableFeatures( | |
| StringRef TargetName, StringRef ClassName, StringRef FuncName, | |
| SubtargetFeatureInfoMap &SubtargetFeatures, raw_ostream &OS); | |
| }; | |
| } // end namespace llvm | |
| #endif // LLVM_UTIL_TABLEGEN_SUBTARGETFEATUREINFO_H |