Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/llvm/utils/TableGen/Common/SubtargetFeatureInfo.h
35290 views
1
//===- SubtargetFeatureInfo.h - Helpers for subtarget features --*- C++ -*-===//
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
#ifndef LLVM_UTIL_TABLEGEN_SUBTARGETFEATUREINFO_H
10
#define LLVM_UTIL_TABLEGEN_SUBTARGETFEATUREINFO_H
11
12
#include "llvm/ADT/StringRef.h"
13
#include "llvm/TableGen/Record.h"
14
#include <map>
15
#include <string>
16
#include <utility>
17
#include <vector>
18
19
namespace llvm {
20
struct SubtargetFeatureInfo;
21
using SubtargetFeatureInfoMap =
22
std::map<Record *, SubtargetFeatureInfo, LessRecordByID>;
23
24
/// Helper class for storing information on a subtarget feature which
25
/// participates in instruction matching.
26
struct SubtargetFeatureInfo {
27
/// The predicate record for this feature.
28
Record *TheDef;
29
30
/// An unique index assigned to represent this feature.
31
uint64_t Index;
32
33
SubtargetFeatureInfo(Record *D, uint64_t Idx) : TheDef(D), Index(Idx) {}
34
35
/// The name of the enumerated constant identifying this feature.
36
std::string getEnumName() const {
37
return "Feature_" + TheDef->getName().str();
38
}
39
40
/// The name of the enumerated constant identifying the bitnumber for
41
/// this feature.
42
std::string getEnumBitName() const {
43
return "Feature_" + TheDef->getName().str() + "Bit";
44
}
45
46
bool mustRecomputePerFunction() const {
47
return TheDef->getValueAsBit("RecomputePerFunction");
48
}
49
50
void dump() const;
51
static std::vector<std::pair<Record *, SubtargetFeatureInfo>>
52
getAll(const RecordKeeper &Records);
53
54
/// Emit the subtarget feature flag definitions.
55
///
56
/// This version emits the bit index for the feature and can therefore support
57
/// more than 64 feature bits.
58
static void emitSubtargetFeatureBitEnumeration(
59
const SubtargetFeatureInfoMap &SubtargetFeatures, raw_ostream &OS,
60
const std::map<std::string, unsigned> *HwModes = nullptr);
61
62
static void emitNameTable(SubtargetFeatureInfoMap &SubtargetFeatures,
63
raw_ostream &OS);
64
65
/// Emit the function to compute the list of available features given a
66
/// subtarget.
67
///
68
/// This version is used for subtarget features defined using Predicate<>
69
/// and supports more than 64 feature bits.
70
///
71
/// \param TargetName The name of the target as used in class prefixes (e.g.
72
/// <TargetName>Subtarget)
73
/// \param ClassName The name of the class that will contain the generated
74
/// functions (including the target prefix.)
75
/// \param FuncName The name of the function to emit.
76
/// \param SubtargetFeatures A map of TableGen records to the
77
/// SubtargetFeatureInfo equivalent.
78
/// \param ExtraParams Additional arguments to the generated function.
79
/// \param HwModes Map of HwMode conditions to check.
80
static void emitComputeAvailableFeatures(
81
StringRef TargetName, StringRef ClassName, StringRef FuncName,
82
const SubtargetFeatureInfoMap &SubtargetFeatures, raw_ostream &OS,
83
StringRef ExtraParams = "",
84
const std::map<std::string, unsigned> *HwModes = nullptr);
85
86
/// Emit the function to compute the list of available features given a
87
/// subtarget.
88
///
89
/// This version is used for subtarget features defined using
90
/// AssemblerPredicate<> and supports up to 64 feature bits.
91
///
92
/// \param TargetName The name of the target as used in class prefixes (e.g.
93
/// <TargetName>Subtarget)
94
/// \param ClassName The name of the class (without the <Target> prefix)
95
/// that will contain the generated functions.
96
/// \param FuncName The name of the function to emit.
97
/// \param SubtargetFeatures A map of TableGen records to the
98
/// SubtargetFeatureInfo equivalent.
99
static void emitComputeAssemblerAvailableFeatures(
100
StringRef TargetName, StringRef ClassName, StringRef FuncName,
101
SubtargetFeatureInfoMap &SubtargetFeatures, raw_ostream &OS);
102
};
103
} // end namespace llvm
104
105
#endif // LLVM_UTIL_TABLEGEN_SUBTARGETFEATUREINFO_H
106
107