[PATCH] D159186: [AArch64][SME] Enable TPIDR2 lazy-save for za_preserved

Sander de Smalen via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 6 03:22:50 PDT 2023


sdesmalen added inline comments.


================
Comment at: llvm/lib/Target/AArch64/AArch64ISelLowering.cpp:7342
         DAG.getTargetLoweringInfo().getFrameIndexTy(DAG.getDataLayout()));
     SDValue BufferPtrAddr =
         DAG.getNode(ISD::ADD, DL, TPIDR2ObjAddr.getValueType(), TPIDR2ObjAddr,
----------------
Am I reading this wrong, or should this have been named `NumZaSaveSlicesAddr` ?


================
Comment at: llvm/lib/Target/AArch64/AArch64ISelLowering.cpp:7767-7809
+  if (RequiresLazySave && !CalleeAttrs.preservesZA()) {
     // Unconditionally resume ZA.
     Result = DAG.getNode(
         AArch64ISD::SMSTART, DL, MVT::Other, Result,
         DAG.getTargetConstant((int32_t)(AArch64SVCR::SVCRZA), DL, MVT::i32),
         DAG.getConstant(0, DL, MVT::i64), DAG.getConstant(1, DL, MVT::i64));
 
----------------
Can you write this as:

  if (RequiresLazySave) {
    if (!CalleeAttrs.preservesZA()) {
      // code to restore ZA
    }
    Result = DAG.getNode(...aarch64_sme_set_tpidr2...);
  }


================
Comment at: llvm/lib/Target/AArch64/Utils/AArch64SMEAttributes.h:38
     ZA_Preserved = 1 << 5,  // aarch64_pstate_sm_preserved
+    ZA_NoLazySave = 1 << 6, // Don't emit TPI_DR2 lazy saves
     All = ZA_Preserved - 1
----------------
nit: maybe add a comment that we use this for SME ABI routines.


================
Comment at: llvm/lib/Target/AArch64/Utils/AArch64SMEAttributes.h:84
   }
+  bool hasNoLazySave() const { return Bitmask & ZA_NoLazySave; }
   bool requiresLazySave(const SMEAttrs &Callee) const {
----------------
nit: this interface seems redundant.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D159186/new/

https://reviews.llvm.org/D159186



More information about the llvm-commits mailing list