summaryrefslogtreecommitdiff
path: root/compiler/codeGen
diff options
context:
space:
mode:
authorClemens Fruhwirth <clemens@endorphin.org>2007-07-14 08:32:41 +0000
committerClemens Fruhwirth <clemens@endorphin.org>2007-07-14 08:32:41 +0000
commit64f0661e56ca19214aed9c917612aeaa125253c6 (patch)
tree3729837b89356ab1aa9cffed90f849a83ef3aae5 /compiler/codeGen
parent57a4597d5a487af65d0a6c9a6701e2efcbbefac2 (diff)
downloadhaskell-64f0661e56ca19214aed9c917612aeaa125253c6.tar.gz
joinToTargets to emit fixup code even when movement graph contains cycles
First, cycles can only start of with registers and their destination must involve a register location. This is because memory locations are allocated exclusively for a virtual register and hence can never cause a conflict in the assignment, hence need no fixup code. Therefore, we only have to deal with InReg -> InReg, or InReg -> InReg/InMem movements. The strategy is to take the first cycle element, which is guaranteed to start with a register, spill it to a fresh memory location, compute the fixup for the rest, and restore from the spill slot to its destinations. The "rest" will degenerate into an acyclic scc, so we do not need take care of the empty list case in CyclicScc. ***END OF DESCRIPTION*** Place the long patch description above the ***END OF DESCRIPTION*** marker. The first line of this file will be the patch name. This patch contains the following changes: M ./compiler/nativeGen/RegisterAlloc.hs -6 +27
Diffstat (limited to 'compiler/codeGen')
0 files changed, 0 insertions, 0 deletions