[llvm] [MachineScheduler][AArch64] Skip Neoverse V2 Pre-RA MISched for large vector intrinsic codes (PR #139557)
Sjoerd Meijer via llvm-commits
llvm-commits at lists.llvm.org
Tue May 13 01:24:14 PDT 2025
================
@@ -557,6 +576,47 @@ bool MachineSchedulerLegacy::runOnMachineFunction(MachineFunction &MF) {
return false;
}
+ // Try to recognise large hand-written instrinc vector code, and skip the
+ // machine scheduler for this function if the target and TTI hook are okay
+ // with this.
+ const TargetSubtargetInfo &STI = MF.getSubtarget();
+ const MCSchedModel &SchedModel = STI.getSchedModel();
+ auto &TTI = getAnalysis<TargetTransformInfoWrapperPass>().getTTI(MF.getFunction());
+
+ if (TTI.skipPreRASchedLargeVecFunc()) {
+ uint64_t InstructionCount = 0;
+ uint64_t IntrinsicCount = 0;
+ uint64_t VectorTypeCount = 0;
+ for (auto &BB : MF.getFunction()) {
+ for (Instruction &I : BB) {
+ InstructionCount++;
+ if (isa<IntrinsicInst>(I))
+ IntrinsicCount++;
+ Type *T = I.getType();
+ if (T && T->isVectorTy())
+ VectorTypeCount++;
+ }
+ }
----------------
sjoerdmeijer wrote:
I see you what you mean, but I intentionally iterated over the IR to extract high level information that is not available on MIR, i.e. the vector intrinsics are lowered (FMAs) on MIR and are no longer recognisable.
I can calculate the heuristic on the MIR too, but then I will have to change it and drop the number intrinsics from the heuristic calculation, which then becomes "recognising a large and very vector code dense function". Which is slightly less specific, so if that is acceptable, that's easy to implement.
https://github.com/llvm/llvm-project/pull/139557
More information about the llvm-commits
mailing list