ghc-9.6.3: The GHC API

Safe Haskell | Safe-Inferred
Language | Haskell2010

GHC.CmmToAsm.Reg.Graph.SpillClean

Description

Clean out unneeded spill/reload instructions.

Handling of join points ~~~~~~~~~~~~~~~~~~~~~~~

      B1:                          B2:
       ...                          ...
          RELOAD SLOT(0), %r1          RELOAD SLOT(0), %r1
          ... A ...                    ... B ...
          jump B3                      jump B3

                   B3: ... C ...
                       RELOAD SLOT(0), %r1
                       ...

The Plan ~~~~~~~~

As long as %r1 hasn't been written to in A, B or C then we don't need the reload in B3.

What we really care about here is that on the entry to B3, %r1 will always have the same value that is in SLOT(0) (ie, %r1 is _valid_)

This also works if the reloads in B1/B2 were spills instead, because spilling %r1 to a slot makes that slot have the same value as %r1.

Synopsis

- cleanSpills :: Instruction instr => Platform -> LiveCmmDecl statics instr -> LiveCmmDecl statics instr

# Documentation

cleanSpills :: Instruction instr => Platform -> LiveCmmDecl statics instr -> LiveCmmDecl statics instr Source #

Clean out unneeded spill/reloads from this top level thing.