[llvm-dev] help/hints/suggestions/tips please: how to give _generic_ compilation for a particular ISA a non-zero LoopMicroOpBufferSize?
Abe Skolnik via llvm-dev
llvm-dev at lists.llvm.org
Fri Dec 16 15:05:06 PST 2016
Dear all,
Some benchmarking experimentation I`ve done recently -- all on AArch64 -- has shown that it
might be beneficial for all AArch64 targets to have a positive LoopMicroOpBufferSize, whereas
the default that applies to all ISAs seems to be zero.
Although I`ve tried going as far down the rabbit hole as I can, I haven`t found a way to set
DefaultLoopMicroOpBufferSize on a per-ISA basis or to change the generic AArch64 model. I`ve
searched for anything that might create an ISA-specific default scheduling model or that might
initialize the default MCSchedModel in an ISA-specific way, but I`ve come up empty.
The closest I found to what I was looking for seems to be a barrier for what I am trying to do;
quoting "lib/Target/AArch64/AArch64GenSubtargetInfo.inc" in a build dir.:
{ "generic", (const void *)&NoSchedModel },
[...]
static const llvm::MCSchedModel NoSchedModel = {
MCSchedModel::DefaultIssueWidth,
MCSchedModel::DefaultMicroOpBufferSize,
MCSchedModel::DefaultLoopMicroOpBufferSize,
... where "NoSchedModel" seems to be generated from this TableGen code in the source-tree file
at "llvm/lib/Target/AArch64/AArch64.td":
def : ProcessorModel<"generic", NoSchedModel, [
FeatureCRC,
FeatureFPARMv8,
FeatureNEON,
FeaturePerfMon,
FeaturePostRAScheduler
]>;
... wherein it`s obvious how to add something like "FeatureCustomCheapAsMoveHandling" to the
list of features, but I have no idea how to change the LoopMicroOpBufferSize, default or otherwise.
Furthermore, "NoSchedModel" seems to be a cross-ISA entity that is defined by code generated
from this snippet of "llvm/include/llvm/Target/TargetSchedule.td":
def NoSchedModel : SchedMachineModel {
let NoModel = 1;
let CompleteModel = 0;
}
... which is made the default model in code generated from this snippet of
"llvm/include/llvm/Target/Target.td":
class Processor<string n, ProcessorItineraries pi, list<SubtargetFeature> f> {
[...]
SchedMachineModel SchedModel = NoSchedModel;
So, all in all, given the current structure of this part of LLVM, there seems to be no way to
make a particular ISA have defaults different than the global defaults, and in AArch64 I can`t
see a way to make the generic model different from the default model.
If editing "AArch64GenSubtargetInfo.inc" was a decent way of changing the generic model, I
guess I would not need any help/etc. on this topic, but I`m pretty sure that editing
"AArch64GenSubtargetInfo.inc" cannot possibly be the basis of a good patch proposal. [Maybe it
won`t even work for an experiment -- I haven`t tried it yet.]
Regards,
Abe
More information about the llvm-dev
mailing list