[SystemZ][z/OS] Save (and restore) R3 to avoid clobbering parameter when call stack...
authorNeumann Hon <neumann.hon@ibm.com>
Fri, 12 May 2023 13:32:04 +0000 (09:32 -0400)
committerNeumann Hon <neumann.hon@ibm.com>
Fri, 12 May 2023 13:32:04 +0000 (09:32 -0400)
commit80c643c46422e2af165aacf5d556604b118598b8
treebe798cd81fd74966b6d6026b447fd061dd411a6c
parent7d436d56b60b36508b94e39d08761f1405a9c770
[SystemZ][z/OS] Save (and restore) R3 to avoid clobbering parameter when call stack frame extension is invoked

When the stack frame extension routine is used, the contents of r3 is overwritten.
However, if r3 is live in the prologue (ie. one of the function's parameters
resides in r3), it needs to be saved. We save r3 in r0 if r0 is available
(ie. r0 is not used as temporary storage for r4), and in the corresponding
stack slot for the third parameter otherwise.

Differential Revision: https://reviews.llvm.org/D150332

Reviewed By: uweigand
llvm/lib/Target/SystemZ/SystemZFrameLowering.cpp
llvm/test/CodeGen/SystemZ/zos-prologue-epilog.ll