[llvm-dev] help/hints/suggestions/tips please: how to give _generic_ compilation for a particular ISA a non-zero LoopMicroOpBufferSize?
Hal Finkel via llvm-dev
llvm-dev at lists.llvm.org
Fri Dec 16 15:32:57 PST 2016
On 12/16/2016 05:05 PM, Abe Skolnik via llvm-dev wrote:
> 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.
Would it be the same positive value for all cores?
You could bypass the mechanism entirely and just override
TTI::getUnrollingPreferences in the target.
-Hal
>
> 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
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
More information about the llvm-dev
mailing list