BPF.td is used to generate (among other things) MCSubtargetInfo
setup function for BPF target.
Specifically, the BPFGenSubtargetInfo.inc file:
enum {
ALU32 = 0,
...
};
...
extern const llvm::SubtargetSubTypeKV BPFSubTypeKV[] = {
{ "generic", { { { 0x0ULL, ... } } }, ... },
{ "probe", { { { 0x0ULL, ... } } }, ... },
{ "v1", { { { 0x0ULL, ... } } }, ... },
{ "v2", { { { 0x0ULL, ... } } }, ... },
{ "v3", { { { 0x1ULL, ... } } }, ... },
};
...
static inline MCSubtargetInfo *createBPFMCSubtargetInfoImpl(...) {
return new BPFGenMCSubtargetInfo(..., BPFSubTypeKV, ...);
}The SubtargetSubTypeKV is defined in MCSubtargetInfo.h as:
/// Used to provide key value pairs for feature and CPU bit flags.
struct SubtargetSubTypeKV {
const char *Key; ///< K-V key string
FeatureBitArray Implies; ///< K-V bit mask
FeatureBitArray TuneImplies; ///< K-V bit mask
const MCSchedModel *SchedModel;
...
}The first bit array specifies features enabled by default for a
specific CPU. This commit makes sure that this information is
communicated to tablegen and correct BPFSubTypeKV table is
generated. This allows tools like objdump to detect available
features when --mcpu flag is specified.