- User Since
- Feb 3 2018, 5:52 PM (27 w, 6 d)
Apr 2 2018
Ping--do I still have to do something to get this committed?
Mar 23 2018
awesome, thank you :) i do not have commit access, so i won't be able to merge it myself.
Mar 21 2018
added assertions for noreturn nounwind to the generic and ARM csr spill skip predicates.
Mar 19 2018
Another week, another ping.
Mar 13 2018
Mar 6 2018
Feb 27 2018
Feb 21 2018
Feb 16 2018
Feb 13 2018
Feb 8 2018
Added a comment about setjmp/longjmp and CSR spills.
I did think about that, but came to the conclusion that longjmp would have to restore all callee-saves to the state they had at setjmp, and that setjmp would have to store them into the jmp_buf. If longjmp uses CSR spills the transform is indeed unsound, but I'm not sure how it would access those without being an llvm builtin. I've checked with what musl does on ARM (because that's what I'm familiar with) to confirm that idea, so at least on ARM the transform should be safe?
Feb 6 2018
Added a target hook to enable CSR spill skipping, default off and enabled currently only for ARM because that's what I know best.
I would rather make it generic, not break debug, and habe the user decide whether or not to apply this. If libraries are the concern it probably can't be the target's decision either. Would enabling the transform only with fp-elim and a cl option be just as good?
If I understand the IR correctly then this would either involve some nasty inline assembly or some form of tail call. If the target were not itself nonreturning, then the caller could also not be, so the transform would not apply.
Can you elaborate on that? I'm primarily interested in programs that do not terminate at all, with nested nonreturning functions. How would not saving CSRs in the outer nonreturning function prolog affect the inner nonreturning function? The only affected thing that comes to my mind right now is a debugger.
Feb 5 2018
Restricated CSR save skip to noreturn nounwind functions from previously noreturn. Exception handlers might need CSRs restored.