Teach RTL compression to search through object->float too.
authorTaylor R Campbell <campbell@mumble.net>
Wed, 28 Nov 2018 09:15:45 +0000 (09:15 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Wed, 28 Nov 2018 09:15:45 +0000 (09:15 +0000)
commit52126d30c39437aa5200f23b28d928317cf74c10
treeb259ee8c0c569db406c580993ef2a202da7b5991
parent082fd3dd3642cd71191c9804d6c454d0f0f67ca8
Teach RTL compression to search through object->float too.

This way it can fold (object->float (constant #x1p+0)) in both

(assign (register #x22) (object->float (constant #x1p+0))
(assign (register #x23) (offset (register 4) (machine-constant 0)))
(assign (register #x24) (object->float (register #x23)))
(jumpc (flonum-pred-2-args flonum-is-greater? (register #x22) (register #x24)) label-3)

and

(assign (register #x21) (offset (register 4) (machine-constant 0)))
(assign (register #x22) (object->float (register #x21)))
(assign (register #x24) (object->float (constant #x1p+0)))
(jumpc (flonum-pred-2-args flonum-is-greater? (register #x22) (register #x24)) label-3)

where previously it could handle only the second one because the
reference appeared in the immediately subsequent instruction.

This exposes a latent bug in the x86-64 code generator, to be fixed
in a subsequent commit.
src/compiler/rtlopt/rcompr.scm
tests/runtime/test-flonum.scm