xref: /freebsd/contrib/llvm-project/llvm/utils/TableGen/Basic/TargetFeaturesEmitter.h (revision 700637cbb5e582861067a11aaca4d053546871d2)
1 //===- TargetFeaturesEmitter.h- Generate CPU Target features ----===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // Defines the TargetFeaturesEmitter class, which is used to export
10 // CPU target features and CPU subtypes.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef LLVM_UTILS_TABLEGEN_BASIC_EMITTARGETFEATURE_H
15 #define LLVM_UTILS_TABLEGEN_BASIC_EMITTARGETFEATURE_H
16 
17 #include "llvm/ADT/DenseMap.h"
18 #include "llvm/TableGen/Record.h"
19 
20 namespace llvm {
21 /// Sorting predicate to sort record pointers by their
22 /// FieldName field.
23 struct LessRecordFieldFieldName {
operatorLessRecordFieldFieldName24   bool operator()(const Record *Rec1, const Record *Rec2) const {
25     return Rec1->getValueAsString("FieldName") <
26            Rec2->getValueAsString("FieldName");
27   }
28 };
29 
30 using FeatureMapTy = DenseMap<const Record *, unsigned>;
31 
32 class TargetFeaturesEmitter {
33 protected:
34   const RecordKeeper &Records;
35   std::string Target;
36 
37 public:
38   TargetFeaturesEmitter(const RecordKeeper &R);
39   static void printFeatureMask(raw_ostream &OS,
40                                ArrayRef<const Record *> FeatureList,
41                                const FeatureMapTy &FeatureMap);
42   FeatureMapTy enumeration(raw_ostream &OS);
43   void printFeatureKeyValues(raw_ostream &OS, const FeatureMapTy &FeatureMap);
44   void printCPUKeyValues(raw_ostream &OS, const FeatureMapTy &FeatureMap);
45   virtual void run(raw_ostream &O);
~TargetFeaturesEmitter()46   virtual ~TargetFeaturesEmitter() {};
47 };
48 } // namespace llvm
49 #endif
50