A method, system, and apparatus for inserting spill code optimized for a
complex instruction set computing (CISC) two-address machine, such as a
machine utilizing an 80x86 processor is described. The spill code is
generated in a single pass. Copy propagation and dead-code elimination
are performed to remove unnecessary loads and stores from the stack.
Instructions contained within the code block are processed in reverse
order. Temporary variables are not extended to the point that they may
become spilled by a register allocation procedure. A store to a stack
location is inserted if the stack location is not dead, saving the use of
a register. Memory operands are substituted when possible in place of
load and store instructions on CISC machines. As the instructions are
being processed, the number of occurrences and location of a temporary
variable associated with a spilled variable within the instructions is
maintained. The number of occurrences of the temporary variable is
checked before a load is inserted into the new instructions as well as
before a temporary variable is removed from use. If the variable has only
occurred once then the memory operand of the temporary is used in place
of the load of the temporary variable saving a load instruction. If the
temporary variable is about to be removed from use and the temporary
variable has only occurred one time then the variable is not stored
saving a store instruction within the spill code.
Een methode, een systeem, en een apparaat om morserijcode op te nemen die voor complexe instructiereeks gegevensverwerkings (CISC) wordt geoptimaliseerd worden een twee-adres machine, zoals een machine die een bewerker 80x86 gebruikt beschreven. De morserijcode wordt geproduceerd in één enkele pas. De propagatie van het exemplaar en de dood-codeverwijdering worden uitgevoerd om onnodige ladingen en opslag uit de stapel te verwijderen. De instructies bevat binnen het codeblok worden verwerkt in omgekeerde orde. De tijdelijke variabelen worden niet uitgebreid tot het punt dat zij gemorst kunnen worden door een procedure van de registertoewijzing. Een opslag aan een stapelplaats wordt opgenomen als de stapelplaats niet dood is, bewarend het gebruik van een register. De operands van het geheugen worden gesubstitueerd wanneer mogelijk in plaats van lading en opslaginstructies op machines CISC. Aangezien de instructies worden verwerkt, wordt het aantal voorkomen en plaats van een tijdelijke variabele verbonden aan een gemorste variabele binnen de instructies gehandhaafd. Het aantal voorkomen van de tijdelijke variabele wordt gecontroleerd alvorens een lading in de nieuwe instructies wordt opgenomen evenals alvorens een tijdelijke variabele wordt verwijderd uit gebruik. Als de variabele slechts is voorgekomen zodra dan de geheugenoperand van de tijdelijke werkkracht in plaats van de lading van de tijdelijke variabele gebruikt wordt die een ladingsinstructie bewaart. Als de tijdelijke variabele uit gebruik op het punt staat worden verwijderd en de tijdelijke variabele slechts één keer toen is voorgekomen wordt de variabele niet opgeslagen bewarend een opslaginstructie binnen de morserijcode.