30 if (
F ==
A.end() ||
StringRef(
F->Key) != S)
return nullptr;
43 if (Implies.
test(FE.Value))
52 if (FE.Implies.getAsBitset().test(
Value)) {
62 "Feature flags should start with '+' or '-'");
71 Bits.set(FeatureEntry->
Value);
76 Bits.reset(FeatureEntry->
Value);
82 errs() <<
"'" << Feature <<
"' is not a recognized feature for this target"
83 <<
" (ignoring feature)\n";
92 MaxLen = std::max(MaxLen, std::strlen(
I.Key));
101 static bool PrintOnce =
false;
111 errs() <<
"Available CPUs for this target:\n\n";
112 for (
auto &CPU : CPUTable)
113 errs() <<
format(
" %-*s - Select the %s processor.\n", MaxCPULen, CPU.Key,
118 errs() <<
"Available features for this target:\n\n";
119 for (
auto &Feature : FeatTable)
120 errs() <<
format(
" %-*s - %s.\n", MaxFeatLen, Feature.Key, Feature.Desc);
123 errs() <<
"Use +feature to enable a feature, or -feature to disable it.\n"
124 "For example, llc -mcpu=mycpu -mattr=+feature1,-feature2\n";
133 static bool PrintOnce =
false;
139 errs() <<
"Available CPUs for this target:\n\n";
140 for (
auto &CPU : CPUTable)
141 errs() <<
"\t" << CPU.Key <<
"\n";
144 errs() <<
"Use -mcpu or -mtune to specify the target's processor.\n"
145 "For example, clang --target=aarch64-unknown-linux-gnu "
146 "-mcpu=cortex-a35\n";
166 Help(ProcDesc, ProcFeatures);
169 else if (!CPU.
empty()) {
177 errs() <<
"'" << CPU <<
"' is not a recognized processor for this target"
178 <<
" (ignoring processor)\n";
182 if (!TuneCPU.
empty()) {
189 }
else if (TuneCPU != CPU) {
190 errs() <<
"'" << TuneCPU <<
"' is not a recognized processor for this "
191 <<
"target (ignoring processor)\n";
196 for (
const std::string &Feature : Features.
getFeatures()) {
198 if (Feature ==
"+help")
199 Help(ProcDesc, ProcFeatures);
200 else if (Feature ==
"+cpuhelp")
211 FeatureBits =
getFeatures(CPU, TuneCPU, FS, ProcDesc, ProcFeatures);
212 FeatureString = std::string(FS);
214 if (!TuneCPU.
empty())
222 FeatureBits =
getFeatures(CPU, TuneCPU, FS, ProcDesc, ProcFeatures);
223 FeatureString = std::string(FS);
235 ProcFeatures(PF), ProcDesc(PD), WriteProcResTable(WPR),
236 WriteLatencyTable(WL), ReadAdvanceTable(
RA), Stages(IS),
237 OperandCycles(OC), ForwardingPaths(
FP) {
242 FeatureBits.
flip(FB);
259 for (
unsigned I = 0, E = FB.
size();
I < E;
I++) {
274 if (FeatureBits.
test(FeatureEntry->
Value)) {
279 FeatureBits.
set(FeatureEntry->
Value);
286 errs() <<
"'" << Feature <<
"' is not a recognized feature for this target"
287 <<
" (ignoring feature)\n";
301 for (std::string
F :
T.getFeatures()) {
307 return (FeatureBits &
All) == Set;
312 "Processor machine model table is not sorted");
320 <<
"' is not a recognized processor for this target"
321 <<
" (ignoring processor)\n";
339std::vector<SubtargetFeatureKV>
341 std::vector<SubtargetFeatureKV> EnabledFeatures;
343 return FeatureBits.
test(FeatureKV.Value);
345 llvm::copy_if(ProcFeatures, std::back_inserter(EnabledFeatures), IsEnabled);
346 return EnabledFeatures;
353std::optional<unsigned>
358std::optional<unsigned>
376 unsigned NumStridedMemAccesses,
377 unsigned NumPrefetches,
378 bool HasCall)
const {
static GCRegistry::Add< ErlangGC > A("erlang", "erlang-compatible garbage collector")
static void ApplyFeatureFlag(FeatureBitset &Bits, StringRef Feature, ArrayRef< SubtargetFeatureKV > FeatureTable)
static const T * Find(StringRef S, ArrayRef< T > A)
Find KV in array using binary search.
static void SetImpliedBits(FeatureBitset &Bits, const FeatureBitset &Implies, ArrayRef< SubtargetFeatureKV > FeatureTable)
For each feature that is (transitively) implied by this feature, set it.
static void cpuHelp(ArrayRef< SubtargetSubTypeKV > CPUTable)
Display help for mcpu choices only.
static size_t getLongestEntryLength(ArrayRef< T > Table)
Return the length of the longest entry in the table.
static void Help(ArrayRef< SubtargetSubTypeKV > CPUTable, ArrayRef< SubtargetFeatureKV > FeatTable)
Display help for feature and mcpu choices.
static void ClearImpliedBits(FeatureBitset &Bits, unsigned Value, ArrayRef< SubtargetFeatureKV > FeatureTable)
For each feature that (transitively) implies this feature, clear it.
static FeatureBitset getFeatures(StringRef CPU, StringRef TuneCPU, StringRef FS, ArrayRef< SubtargetSubTypeKV > ProcDesc, ArrayRef< SubtargetFeatureKV > ProcFeatures)
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
SI optimize exec mask operations pre RA
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
bool empty() const
empty - Check if the array is empty.
const FeatureBitset & getAsBitset() const
Container class for subtarget features.
constexpr FeatureBitset & reset(unsigned I)
constexpr bool test(unsigned I) const
constexpr FeatureBitset & flip(unsigned I)
constexpr size_t size() const
Itinerary data supplied by a subtarget to be used by a target.
virtual unsigned getCacheLineSize() const
Return the target cache line size in bytes.
bool checkFeatures(StringRef FS) const
Check whether the subtarget features are enabled/disabled as per the provided string,...
virtual std::optional< unsigned > getCacheSize(unsigned Level) const
Return the cache size in bytes for the given level of cache.
virtual bool shouldPrefetchAddressSpace(unsigned AS) const
const MCSchedModel & getSchedModelForCPU(StringRef CPU) const
Get the machine model of a CPU.
virtual unsigned getMinPrefetchStride(unsigned NumMemAccesses, unsigned NumStridedMemAccesses, unsigned NumPrefetches, bool HasCall) const
Return the minimum stride necessary to trigger software prefetching.
virtual bool enableWritePrefetching() const
virtual unsigned getMaxPrefetchIterationsAhead() const
Return the maximum prefetch distance in terms of loop iterations.
virtual unsigned getPrefetchDistance() const
Return the preferred prefetch distance in terms of instructions.
std::vector< SubtargetFeatureKV > getEnabledProcessorFeatures() const
Return the list of processor features currently enabled.
FeatureBitset ApplyFeatureFlag(StringRef FS)
Apply a feature flag and return the re-computed feature bits, including all feature bits implied by t...
virtual std::optional< unsigned > getCacheAssociativity(unsigned Level) const
Return the cache associatvity for the given level of cache.
FeatureBitset SetFeatureBitsTransitively(const FeatureBitset &FB)
Set/clear additional feature bits, including all other bits they imply.
InstrItineraryData getInstrItineraryForCPU(StringRef CPU) const
Get scheduling itinerary of a CPU.
void setDefaultFeatures(StringRef CPU, StringRef TuneCPU, StringRef FS)
Set the features to the default for the given CPU and TuneCPU, with ano appended feature string.
FeatureBitset ToggleFeature(uint64_t FB)
Toggle a feature and return the re-computed feature bits.
void InitMCProcessorInfo(StringRef CPU, StringRef TuneCPU, StringRef FS)
Initialize the scheduling model and feature bits.
void initInstrItins(InstrItineraryData &InstrItins) const
Initialize an InstrItineraryData instance.
FeatureBitset ClearFeatureBitsTransitively(const FeatureBitset &FB)
const MCSchedModel & getSchedModel() const
Get the machine model for this subtarget's CPU.
StringRef - Represent a constant reference to a string, i.e.
constexpr bool empty() const
empty - Check if the string is empty.
Manages the enabling and disabling of subtarget specific features.
const std::vector< std::string > & getFeatures() const
Returns the vector of individual subtarget features.
static bool hasFlag(StringRef Feature)
Determine if a feature has a flag; '+' or '-'.
static StringRef StripFlag(StringRef Feature)
Return string stripped of flag.
static bool isEnabled(StringRef Feature)
Return true if enable flag; '+'.
Triple - Helper class for working with autoconf configuration names.
LLVM Value Representation.
@ C
The default llvm calling convention, compatible with C.
This is an optimization pass for GlobalISel generic memory operations.
OutputIt copy_if(R &&Range, OutputIt Out, UnaryPredicate P)
Provide wrappers to std::copy_if which take ranges instead of having to pass begin/end explicitly.
bool is_sorted(R &&Range, Compare C)
Wrapper function around std::is_sorted to check if elements in a range R are sorted with respect to a...
format_object< Ts... > format(const char *Fmt, const Ts &... Vals)
These are helper functions used to produce formatted output.
raw_fd_ostream & errs()
This returns a reference to a raw_ostream for standard error.
auto lower_bound(R &&Range, T &&Value)
Provide wrappers to std::lower_bound which take ranges instead of having to pass begin/end explicitly...
Implement std::hash so that hash_code can be used in STL containers.
These values represent a non-pipelined step in the execution of an instruction.
Specify the number of cycles allowed after instruction issue before a particular use operand reads it...
Machine model for scheduling, bundling, and heuristics.
static const MCSchedModel Default
Returns the default initialized model.
Specify the latency in cpu cycles for a particular scheduling class and def index.
Identify one of the processor resource kinds consumed by a particular scheduling class for the specif...
Used to provide key value pairs for feature and CPU bit flags.
unsigned Value
K-V integer value.
FeatureBitArray Implies
K-V bit mask.
Used to provide key value pairs for feature and CPU bit flags.
const MCSchedModel * SchedModel
FeatureBitArray Implies
K-V bit mask.
FeatureBitArray TuneImplies
K-V bit mask.