aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/MachineInstr.cpp
diff options
context:
space:
mode:
authorRoman Divacky <rdivacky@freebsd.org>2012-09-12 14:47:47 +0000
committerRoman Divacky <rdivacky@freebsd.org>2012-09-12 14:47:47 +0000
commitc9e23d93ae0094d95e9689dcbab779f5b257d81e (patch)
tree0642997657073a19bb5e6064ca59aea70c920c7d /llvm/lib/CodeGen/MachineInstr.cpp
parent7d4c68a6aed6d3c57e9f7d8f17b67414dcc2ef6d (diff)
downloadllvm-c9e23d93ae0094d95e9689dcbab779f5b257d81e.zip
llvm-c9e23d93ae0094d95e9689dcbab779f5b257d81e.tar.gz
llvm-c9e23d93ae0094d95e9689dcbab779f5b257d81e.tar.bz2
This patch corrects logic in PPCFrameLowering for save and restore of
nonvolatile condition register fields across calls under the SVR4 ABIs. * With the 64-bit ABI, the save location is at a fixed offset of 8 from the stack pointer. The frame pointer cannot be used to access this portion of the stack frame since the distance from the frame pointer may change with alloca calls. * With the 32-bit ABI, the save location is just below the general register save area, and is accessed via the frame pointer like the rest of the save areas. This is an optional slot, so it must only be created if any of CR2, CR3, and CR4 were modified. * For both ABIs, save/restore logic is generated only if one of the nonvolatile CR fields were modified. I also took this opportunity to clean up an extra FIXME in PPCFrameLowering.h. Save area offsets for 32-bit GPRs are meaningless for the 64-bit ABI, so I removed them for correctness and efficiency. Fixes PR13708 and partially also PR13623. It lets us enable exception handling on PPC64. Patch by William J. Schmidt! llvm-svn: 163713
Diffstat (limited to 'llvm/lib/CodeGen/MachineInstr.cpp')
0 files changed, 0 insertions, 0 deletions