[llvm] [AArch64][SME] Propagate desired ZA states in the MachineSMEABIPass (PR #149510)
Sander de Smalen via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 23 09:19:22 PDT 2025
================
@@ -918,6 +987,43 @@ bool MachineSMEABI::runOnMachineFunction(MachineFunction &MF) {
getAnalysis<EdgeBundlesWrapperLegacy>().getEdgeBundles();
FunctionInfo FnInfo = collectNeededZAStates(SMEFnAttrs);
+
+ if (OptLevel != CodeGenOptLevel::None) {
+ // Propagate desired states forwards then backwards. We propagate forwards
+ // first as this propagates desired states from inner to outer loops.
+ // Backwards propagation is then used to fill in any gaps. Note: Doing both
+ // in one step can give poor results. For example:
+ //
+ // ┌─────┐
+ // ┌─┤ BB0 ◄───┐
+ // │ └─┬───┘ │
+ // │ ┌─▼───◄──┐│
+ // │ │ BB1 │ ││
+ // │ └─┬┬──┘ ││
+ // │ │└─────┘│
+ // │ ┌─▼───┐ │
+ // │ │ BB2 ├───┘
+ // │ └─┬───┘
+ // │ ┌─▼───┐
+ // └─► BB3 │
+ // └─────┘
+ //
+ // If:
+ // - "BB0" and "BB2" (outer loop) has no state preference
----------------
sdesmalen-arm wrote:
I thought the entry block (BB0) would always have a state preference?
https://github.com/llvm/llvm-project/pull/149510
More information about the llvm-commits
mailing list