- Avoid a crash when IPRA calls ARMFrameLowering::determineCalleeSaves with a null RegScavenger. Simply not updating the register scavenger is fine because IPRA only cares about the SavedRegs vector, the acutal code of the function has already been generated at this point.
- Add a new hook to TargetRegisterInfo to get the set of registers which can be clobbered inside a call, even if the compiler can see both sides, by linker-generated code.
Details
Details
- Reviewers
mehdi_amini arsenm dmgreen - Commits
- rG8ed8353fc45e: Reland: Fix and test inter-procedural register allocation for ARM
rL367819: Reland: Fix and test inter-procedural register allocation for ARM
rGf6b00c279a55: Fix and test inter-procedural register allocation for ARM
rL367669: Fix and test inter-procedural register allocation for ARM
Diff Detail
Diff Detail
- Repository
- rL LLVM
Event Timeline
llvm/include/llvm/CodeGen/TargetRegisterInfo.h | ||
---|---|---|
493 ↗ | (On Diff #210509) | Why aren’t these explicit clobbers on the call itself? |
llvm/include/llvm/CodeGen/TargetRegisterInfo.h | ||
---|---|---|
493 ↗ | (On Diff #210509) | This is a property of the calling convention, not the BL instruction, so I think it makes more sense to have it here. I think we also use BL as a long branch inside Thumb1 functions, in which case it clobbers lr but nor r12. |
llvm/include/llvm/CodeGen/TargetRegisterInfo.h | ||
---|---|---|
496 ↗ | (On Diff #210509) | Yes, it matches the functions above, but I suppose an ArrayRef would be a better interface, so I'll change it. |
Comment Actions
LGTM. I think this is a sensible way to deal with r12. It is a bit special.
llvm/include/llvm/CodeGen/TargetRegisterInfo.h | ||
---|---|---|
453 ↗ | (On Diff #213004) | Nit: is it worth making an ArrayRef const? |
Comment Actions
This change broke NetBSD buildbot:
http://lab.llvm.org:8011/builders/netbsd-amd64/builds/21240/steps/ninja%20build%20local/logs/stdio
Please fix.