Repository : ssh://darcs.haskell.org//srv/darcs/ghc On branch : master
http://hackage.haskell.org/trac/ghc/changeset/dcf88e66caefb3e79e68d4c149a878bc6eca639e >--------------------------------------------------------------- commit dcf88e66caefb3e79e68d4c149a878bc6eca639e Author: Geoffrey Mainland <gmain...@microsoft.com> Date: Thu Oct 18 15:43:27 2012 +0100 Generate correct LLVM for the new register allocation scheme. We now have accurate global register liveness information attached to all Cmm procedures and jumps. With this patch, the LLVM back end uses this information to pass only the live floating point (F and D) registers on tail calls. This makes the LLVM back end compatible with the new register allocation strategy. Ideally the GHC LLVM calling convention would put all registers that are always live first in the parameter sequence. Unfortunately the specification is written so that on x86-64 SpLim (always live) is passed after the R registers. Therefore we must always pass *something* in the R registers, so we pass the LLVM value undef. compiler/llvmGen/LlvmCodeGen.hs | 4 +- compiler/llvmGen/LlvmCodeGen/Base.hs | 38 ++++++++++++------- compiler/llvmGen/LlvmCodeGen/CodeGen.hs | 63 +++++++++++++++---------------- compiler/llvmGen/LlvmCodeGen/Ppr.hs | 4 +- 4 files changed, 59 insertions(+), 50 deletions(-) Diff suppressed because of size. To see it, use: git show dcf88e66caefb3e79e68d4c149a878bc6eca639e _______________________________________________ Cvs-ghc mailing list Cvs-ghc@haskell.org http://www.haskell.org/mailman/listinfo/cvs-ghc