When save/restoring CR at prolog/epilog, in a large
authorDale Johannesen <dalej@apple.com>
Fri, 12 Feb 2010 21:35:34 +0000 (21:35 +0000)
committerDale Johannesen <dalej@apple.com>
Fri, 12 Feb 2010 21:35:34 +0000 (21:35 +0000)
commitc12da8d30a1394847ee4608fcd54daa24b889b37
treeb92f35058dbf699b7adadb2a616e7eaf9ac55995
parentfdfeb6976f07ad10d809b922ed7376ba2a3539be
When save/restoring CR at prolog/epilog, in a large
stack frame, the prolog/epilog code was using the same
register for the copy of CR and the address of the save slot.  Oops.
This is fixed here for Darwin, sort of, by reserving R2 for this case.
A better way would be to do the store before the decrement of SP,
which is safe on Darwin due to the red zone.

SVR4 probably has the same problem, but I don't know how to fix it;
there is no red zone and R2 is already used for something else.
I'm going to leave it to someone interested in that target.

Better still would be to rewrite the CR-saving code completely;
spilling each CR subregister individually is horrible code.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96015 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/PowerPC/PPCInstrInfo.cpp
test/CodeGen/PowerPC/2010-02-12-saveCR.ll [new file with mode: 0644]