[llvm] [llvm] Support multiple save/restore points in mir (PR #119357)

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 21 04:42:06 PDT 2025


================
@@ -678,18 +757,57 @@ void PEI::spillCalleeSavedRegs(MachineFunction &MF) {
     MFI.setCalleeSavedInfoValid(true);
 
     std::vector<CalleeSavedInfo> &CSI = MFI.getCalleeSavedInfo();
+    DenseMap<Register, CalleeSavedInfo *> RegToInfo;
+    for (auto &CS : CSI)
+      RegToInfo.insert({CS.getReg(), &CS});
+
+    if (!MFI.getSavePoints().empty()) {
+      fillCSInfoPerBB(MFI, RegToInfo, PrologBlocks, true /* isSave */);
+      fillCSInfoPerBB(MFI, RegToInfo, EpilogBlocks, false /* isSave */);
----------------
arsenm wrote:

```suggestion
      fillCSInfoPerBB(MFI, RegToInfo, PrologBlocks, /*isSave=*/true);
      fillCSInfoPerBB(MFI, RegToInfo, EpilogBlocks, /*isSave=*/false);
```

https://github.com/llvm/llvm-project/pull/119357


More information about the llvm-commits mailing list