Build results: qbe.freebsd

Build results: qbe.freebsd

[OK] 2d02070af019e9896ecf2a63bedc098092fd395d

new hinting in the register allocator

The previous heuristics were ad hoc and it was
hard to understand why they worked at all.

This patch can be summarized in three points:

 1. When a register is freed (an instruction
    assigns it), we try to find if a temporary
    would like to be in it, and if we find one,
    we move it in the newly freed register.
    I call this an "eager move".

 2. Temporaries now remember in what register
    they were last allocated; this information
    is stored in the field Tmp.visit, and
    prevails on the field Tmp.hint when it is
    set.  (This makes having the same hint for
    interfering temporaries not so disastrous.)

 3. Blocks are now allocated in "onion" order,
    from the innermost loop to the outermost.
    This is the change I am the least sure
    about; it should be evaluated thorougly.

OK: build: gmake

STDOUT

cc main.c
cc util.c
cc parse.c
cc cfg.c
cc mem.c
cc ssa.c
cc alias.c
cc load.c
cc copy.c
cc fold.c
cc live.c
cc spill.c
cc rega.c
cc gas.c
cc amd64/targ.c
cc amd64/sysv.c
cc amd64/isel.c
cc amd64/emit.c
cc arm64/targ.c
cc arm64/abi.c
cc arm64/isel.c
cc arm64/emit.c
ld obj/qbe


STDERR



OK: test: gmake check

STDOUT

tools/test.sh all
abi1.ssa...                                  [ok]
abi2.ssa...                                  [ok]
abi3.ssa...                                  [ok]
abi4.ssa...                                  [ok]
abi5.ssa...                                  [ok]
abi6.ssa...                                  [ok]
align.ssa...                                 [ok]
collatz.ssa...                               [ok]
cprime.ssa...                                [ok]
cup.ssa...                                   [ok]
dark.ssa...                                  [ok]
double.ssa...                                [ok]
echo.ssa...                                  [ok]
eucl.ssa...                                  [ok]
euclc.ssa...                                 [ok]
fixarg.ssa...                                [ok]
fpcnv.ssa...                                 [ok]
ldbits.ssa...                                [ok]
ldhoist.ssa...                               [ok]
loop.ssa...                                  [ok]
mandel.ssa...                                [ok]
max.ssa...                                   [ok]
philv.ssa...                                 [ok]
prime.ssa...                                 [ok]
puts10.ssa...                                [ok]
queen.ssa...                                 [ok]
strcmp.ssa...                                [ok]
strspn.ssa...                                [ok]
sum.ssa...                                   [ok]
vararg1.ssa...                               [ok]
vararg2.ssa...                               [ok]

All is fine!


STDERR



OK: clean: gmake clean

STDOUT

rm -fr obj


STDERR