principles of programming languages h p di unipi it
play

Principles of Programming Languages - PowerPoint PPT Presentation

Principles of Programming Languages h"p://www.di.unipi.it/~andrea/Dida2ca/PLP-16/ Prof. Andrea Corradini Department of Computer Science, Pisa Lesson 14 More on code genera;on Summary Next-use informa;on in basic blocks A Code


  1. Principles of Programming Languages h"p://www.di.unipi.it/~andrea/Dida2ca/PLP-16/ Prof. Andrea Corradini Department of Computer Science, Pisa Lesson 14 � • More on code genera;on

  2. Summary • Next-use informa;on in basic blocks • A Code Generator – Register alloca;on and assignment • Graph coloring – Instruc;on selec;on • Tree transducer • An overview on Dataflow Analysis and some Global Op;miza;on techniques 2

  3. A Simple Code Generator • Algorithm for genera;ng target code for a basic block (sequence of three-address statements) using (local) next-use informa;on • Cri;cal issue: how to use registers. Several compe;ng uses: – To store operands of a target code opera;on – Registers make good temporaries – To hold (global) values computed in a block and used in another (e.g., loop indexes) – To help run;me storage management (stack pointer, …) • The algorithm will check if operands of three-address code are available in registers to avoid unnecessary stores and loads. 3

  4. (Local) Next-Use Informa;on • Next-use informa0on is needed for dead-code elimina;on and register assignment • Next-use is computed by a backward scan of a basic block and performing the following ac;ons on statement L : x := y op z – Add liveness/next-use info on x , y , and z to statement L • This info can be stored in the symbol table – Before going up to the previous statement (scan up): • Set x info to “not live” and “no next use” • Set y and z info to “live” and the “next uses” of y and z to L 4

  5. Next-Use (Step 1) i : b := b + 1 j : a := b + c k : t := a + b [ live ( a ) = true, live ( b ) = true, live ( t ) = true, � nextuse ( a ) = none, nextuse ( b ) = none, nextuse ( t ) = none ] • Attach current live/next-use information (from symbol table) • Since the is no info, assume variables are live • [ Data-flow analysis can provide accurate (global) information] 5

  6. Next-Use (Step 2) i : b := b + 1 j : a := b + c live ( a ) = true nextuse ( a ) = k � live ( b ) = true nextuse ( b ) = k live ( t ) = false nextuse ( t ) = none k : t := a + b [ live ( a ) = true, live ( b ) = true, live ( t ) = true, � nextuse ( a ) = none, nextuse ( b ) = none, nextuse ( t ) = none ] Compute live/next-use informa;on at k and store in the symbol table • 6

  7. Next-Use (Step 3) i : b := b + 1 j : a := b + c [ live ( a ) = true, live ( b ) = true, live ( c ) = true, � nextuse ( a ) = k , nextuse ( b ) = k , nextuse ( c ) = none ] k : t := a + b [ live ( a ) = true, live ( b ) = true, live ( t ) = true, � nextuse ( a ) = none, nextuse ( b ) = none, nextuse ( t ) = none ] AZach current live/next-use informa;on from the symbol table to j • 7

  8. Next-Use (Step 4) live ( a ) = false nextuse ( a ) = none � i : b := b + 1 live ( b ) = true nextuse ( b ) = j � live ( c ) = true nextuse ( c ) = j live ( t ) = false nextuse ( t ) = none j : a := b + c [ live ( a ) = true, live ( b ) = true, live ( c ) = true, � nextuse ( a ) = k , nextuse ( b ) = k , nextuse ( c ) = none ] k : t := a + b [ live ( a ) = true, live ( b ) = true, live ( t ) = true, � nextuse ( a ) = none, nextuse ( b ) = none, nextuse ( t ) = none ] Compute live/next-use informa;on j • 8

  9. Next-Use (Step 5) i : b := b + 1 [ live ( b ) = true, nextuse ( b ) = j ] j : a := b + c [ live ( a ) = true, live ( b ) = true, live ( c ) = true, � nextuse ( a ) = k , nextuse ( b ) = k , nextuse ( c ) = none ] k : t := a + b [ live ( a ) = true, live ( b ) = true, live ( t ) = true, � nextuse ( a ) = none, nextuse ( b ) = none, nextuse ( t ) = none ] AZach current live/next-use informa;on to i • 9

  10. Code Generator: assump;ons • We assume that – A set of register can be used for values used within the block – The order of statements in the block is fixed – Each three-address operator corresponds to a single machine instruc;on – Machine instruc;ons take operands in registers and leave the result in a register • Allowed machine instruc;ons: – LD reg, mem – ST mem, reg – OP reg, reg, reg 10

  11. Code Generator: sketch • For each three-address instruc;ons, the algorithm – checks which operands are not in register, and emits corresponding loads – emits the opera;on – emits the store of the result, if needed • The algorithm makes use of address descriptors and register descriptors , and of func;on getreg() such that getreg(x = y OP z) returns the three registers to be used for x , y and z (denoted Rx , Ry and Rz ). 11

  12. Register and Address Descriptors • For each available register, a register descriptor (RD) keeps track of the vars whose current value in that register – Ini;ally empty • For each variable, an address descriptor (AD) keeps track of the loca;ons where the current value of the var can be found – Loca;on can be a register, a stack loca;on, a memory address, etc. – Can be stored in the symbol table 12

  13. Managing Register and Address Descriptors • For LD R,x – Change RD for R so it holds only x – Change AD for x by adding R as an addi;onal loca;on • For ST x,R – Change AD for x to include its own memory loca;on • For OP Rx,Ry,Rz – Change RD for Rx so it holds only x – Change AD for x so its only loca;on is Rx – Remove Rx from the AD of any variable other than x 13

  14. The Code Genera;on Algorithm • For a three-address instruc;on, e.g. x=y OP z – Use getReg(x=y OP z) to select registers Rx , Ry , Rz for x , y , z – If y is not in Ry , emit an instruc;on LD Ry, y’ where y’ ∈ AD (y) , preferably a register – Similarly for z – Issue the instruc;on OP Rx, Ry, Rz • Copy statement x=y – If y is not already in register, emit LD Ry, y’ – Adjust RD for Ry so it includes x – Change AD for x so its only loca;on is Ry • Ending the basic block – If x is used at other blocks, issue ST x, Rx 14

  15. � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � Example of code genera;on (1) � � � � t � = � a � – b � � � u � = � a � – c � � � � � � � � v � = � t � + � u � � � � � � � � � � a � = � d � � � d � = � v � + � u d � � � � � � � � � � � � � � � � � � � � � � � � � • t,u and v are temporaries, while a, b, c, d are global variables � � � � � � � � � � �� � � � � � � � � � • Assume that registers are enaugh � � � � � � � � � � � – Reuse registers whenever possible � � � � � � � � � � 15

  16. Example of code genera;on (2) � R1 R2 R3 a b c d t u v a b c d � � � � � � � t � = � a �� b LD � R1, � a; � LD � R2, � b; � SUB � R2, � R1, � R2 R1 R1 R2 R2 R3 R3 a a b b c c d d t t u u v v a t a,R1 b c d R2 � � � � u � = � a �� c LD � R3, � c; �� SUB � R1, � R1, � R3 R1 R2 R3 a b c d t u v u t c a b c,R3 d R2 R1 16 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �

  17. Example of code genera;on (3) � v � = � t � + � u ADD � R3, � R2, � R1 � � �� R1 R2 R3 a b c d t u v � � � � � � � � � u t v a b c d R2 R1 R3 a � = � d LD � R2, � d � � �� � � �� � � � R1 R2 R3 a b c d t u v u a,d v R2 b c d,R2 R1 R3 17 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend