summaryrefslogtreecommitdiff
path: root/lib/Support
diff options
context:
space:
mode:
authorHal Finkel <hfinkel@anl.gov>2012-08-28 02:10:27 +0000
committerHal Finkel <hfinkel@anl.gov>2012-08-28 02:10:27 +0000
commit82b3821208286aeb43f603fdac98832bd662dad9 (patch)
treeabb5ac4eea9e0f1504fb1f2f3ad847261a5179de /lib/Support
parent97d047dec71cb37f31aac102cdc87b3dec0b1c46 (diff)
downloadllvm-82b3821208286aeb43f603fdac98832bd662dad9.tar.gz
llvm-82b3821208286aeb43f603fdac98832bd662dad9.tar.bz2
llvm-82b3821208286aeb43f603fdac98832bd662dad9.tar.xz
Eliminate redundant CR moves on PPC32.
The 32-bit ABI requires CR bit 6 to be set if the call has fp arguments and unset if it doesn't. The solution up to now was to insert a MachineNode to set/unset the CR bit, which produces a CR vreg. This vreg was then copied into CR bit 6. When the register allocator saw a bunch of these in the same function, it allocated the set/unset CR bit in some random CR register (1 extra instruction) and then emitted CR moves before every vararg function call, rather than just setting and unsetting CR bit 6 directly before every vararg function call. This patch instead inserts a PPCcrset/PPCcrunset instruction which are then matched by a dedicated instruction pattern. Patch by Tobias von Koch. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@162725 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Support')
0 files changed, 0 insertions, 0 deletions