diff options
Diffstat (limited to 'llvm/utils/TableGen/Basic/TargetFeaturesEmitter.h')
| -rw-r--r-- | llvm/utils/TableGen/Basic/TargetFeaturesEmitter.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/llvm/utils/TableGen/Basic/TargetFeaturesEmitter.h b/llvm/utils/TableGen/Basic/TargetFeaturesEmitter.h new file mode 100644 index 000000000000..99e4820c614c --- /dev/null +++ b/llvm/utils/TableGen/Basic/TargetFeaturesEmitter.h @@ -0,0 +1,49 @@ +//===- TargetFeaturesEmitter.h- Generate CPU Target features ----===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// Defines the TargetFeaturesEmitter class, which is used to export +// CPU target features and CPU subtypes. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_UTILS_TABLEGEN_BASIC_EMITTARGETFEATURE_H +#define LLVM_UTILS_TABLEGEN_BASIC_EMITTARGETFEATURE_H + +#include "llvm/ADT/DenseMap.h" +#include "llvm/TableGen/Record.h" + +namespace llvm { +/// Sorting predicate to sort record pointers by their +/// FieldName field. +struct LessRecordFieldFieldName { + bool operator()(const Record *Rec1, const Record *Rec2) const { + return Rec1->getValueAsString("FieldName") < + Rec2->getValueAsString("FieldName"); + } +}; + +using FeatureMapTy = DenseMap<const Record *, unsigned>; + +class TargetFeaturesEmitter { +protected: + const RecordKeeper &Records; + std::string Target; + +public: + TargetFeaturesEmitter(const RecordKeeper &R); + static void printFeatureMask(raw_ostream &OS, + ArrayRef<const Record *> FeatureList, + const FeatureMapTy &FeatureMap); + FeatureMapTy enumeration(raw_ostream &OS); + void printFeatureKeyValues(raw_ostream &OS, const FeatureMapTy &FeatureMap); + void printCPUKeyValues(raw_ostream &OS, const FeatureMapTy &FeatureMap); + virtual void run(raw_ostream &O); + virtual ~TargetFeaturesEmitter() {}; +}; +} // namespace llvm +#endif |
