tree parsing for code selection
play

Tree Parsing for Code Selection Reinhard Wilhelm Universitt des - PowerPoint PPT Presentation

Tree Parsing for Code Selection Tree Parsing for Code Selection Reinhard Wilhelm Universitt des Saarlandes wilhelm@cs.uni-sb.de 3. Januar 2010 Tree Parsing for Code Selection Code Generation Real machines instead of abstract machines:


  1. Tree Parsing for Code Selection Tree Parsing for Code Selection Reinhard Wilhelm Universität des Saarlandes wilhelm@cs.uni-sb.de 3. Januar 2010

  2. Tree Parsing for Code Selection Code Generation Real machines instead of abstract machines: ◮ Register machines, ◮ Limited resources (registers, memory), ◮ Fixed word size, ◮ Storage hierarchy, ◮ Intraprocessor parallelism.

  3. Tree Parsing for Code Selection Phases in code generation code selection: selecting semantically equivalent sequences of machine instructions for programs, register allocation: exploiting the registers for storing values of variables and temporaries, instruction scheduling: reordering instruction sequences to exploit intraprocessor parallelism.

  4. Tree Parsing for Code Selection Complexity Many subproblems in the compiler backend are complex: Early results: Bruno&Sethi[1976]: generation of optimal code for straight-line programs and 1-register machine is NP-complete Garey&Johnson[1979]: Instruction scheduling, even for very simple target machines, is NP-hard. What makes the difference in code generation? input: straight-line programs w/o common subexpressions machine model: register constraints, e.g., interchangeable registers or not, operations on register pairs or not Common subexpressions need directed acyclic graphs (DAGs). Code generation for expression trees has efficient solutions.

  5. Tree Parsing for Code Selection Phase Ordering Problem Issues: ◮ Software Complexity ◮ Result Quality ◮ Order in Serialization

  6. Tree Parsing for Code Selection Code Selection Task: Select (best) instruction sequences for a program. ◮ Control statements – translated as for abstract machines, ◮ Procedure organisation – same as on abstract machines, ◮ Expressions, variable and data structure access – many different translations. Expressions (without common subexpressions) to be translated into (locally) optimal code according to some cost measure.

  7. Tree Parsing for Code Selection An Example CISC Architecture, the Motorola 68000 ◮ 8 Data registers, ◮ 8 Address registers, ◮ many addressing modes, ◮ 2–address machine, i.e., two operand locations in each instruction, one is also the result location, ADD D1, D2 adds the contents of registers D1 and D2 and stores the result in D2. ◮ most instructions are scalable to byte (.B), word (.W), double word (.L) operands.

  8. Tree Parsing for Code Selection Addressing Modes ◮ D n Data register direct: cont(D n ) . ◮ A n Address register direct: cont(A n ) . ◮ ( A n ) Address register indirect: St(cont(A n )) . ◮ d ( A n ) Address register indirect with address distance: St(cont ( A n ) + d) with 16-Bit-constant d . ◮ d ( A n , I x ) Address register indirect with Index and Address distance: St ( cont ( A n ) + cont ( I x ) + d ) with A n used as base register, I x index register (either address or data register), 8-Bit-distance d . ◮ x Absolute short: St(x) with 16-Bit-constant x . ◮ x Absolute long: St(x) with 32-Bit-constant x . ◮ # x Immediate: x .

  9. Tree Parsing for Code Selection Execution Times Addressing mode Byte, Word Double Word D n Data register direct 0 0 A n Address register direct 0 0 ( A n ) Address register indirect 4 8 d ( A n ) Address register indirect with 8 12 Address distance d ( A n , I x ) Address register indirect with Index 10 14 and Address distance Absolute short 8 12 x x Absolute long 12 16 # x immediate 4 8

  10. Tree Parsing for Code Selection Alternative Code Sequences Load a Byte into the lower quarter of data register D5, the address results from adding base register A1’s content to the contents of the lower half of data register D1 and incrementing the result by 8. The execution time, 14 cycles, consists of the execution time for the operation proper, 4 cycles, and the execution time for the addressing, 10 cycles. MOVE.B 8(A1, D1.W), D5 ADDA # 8, A1 costs: 16 ADDA D1.W, A1 costs: 8 total costs 8 ADDA D1.W, A1 costs: 8 MOVE.B 8(A1), D5 costs: 12 MOVE.B (A1), D5 costs: 8 total costs 20 total costs 32

  11. Tree Parsing for Code Selection Code Sequences for b := 2 + a[i] b, i integer variables, a: array[1 ..10] of integer . a, b, i in the same frame addressed by address register A5, Relative addresses: b �→ 4, i �→ 6, a �→ 8. The code for addressing a[2] computes: A5 + 8 + value(i) * 2 MOVE 6(A5), D1 costs 12 MOVE.L A5, A1 costs 4 ADD D1, D1 costs 4 ADDA.L #6, A1 costs 12 MOVE 8(A5,D1), D2 costs 14 MOVE (A1), D1 costs 8 ADDQ #2, D2 costs 4 MULU #2, D1 costs 44 MOVE D2, 4(A5) costs 12 MOVE.L A5, A2 costs 4 total costs 46 ADDA.L #8, A2 costs 12 ADDA.L D1, A2 costs 8 MOVE (A2), D2 costs 8 ADDQ #2, D2 costs 4 MOVE.L A5, A3 costs 4 ADDA.L #4, A3 costs 12 MOVE D2, (A3) costs 8 total costs 128

  12. Tree Parsing for Code Selection An Example RISC Architecture, the MIPS ◮ RISC microprocessor architecture developed by John L. Hennessy at Stanford University in 1981 ◮ no interlocked pipeline stages ◮ Load/Store-Architecture (R3000) ◮ 32 registers ◮ 2 30 memory words = 2 32 bytes ◮ Still used: Playstation Portable, PS2, etc.

  13. Tree Parsing for Code Selection Instruction Set (MIPS R3000) Arithmetic: ◮ add $1, $2, $3 ◮ sub $1, $2, $3 ◮ addi $1, $2, CONST Data Transfer: ◮ lw $1, CONST($2) ◮ sw $1, CONST($2) Cond. Branch: beq $1, $2, CONST Unconditional Jumps: ◮ j CONST ◮ jr $1 ◮ jal CONST Logical operations: Bitwise Shift, etc. Pseudoinstructions: Translated into real instructions before assembly: bgtz Label (branch greater than), etc.

  14. Tree Parsing for Code Selection Example Code if (x <= 0) bgtz $1 el y = x + 1; addi $2, $1, 1 else j end x = y+x; el: addi $1, $2, $1 ... end: ... Assuming x in $1 and y in $2

  15. Tree Parsing for Code Selection Looking for a Description Mechanism Several compilation subtasks ◮ can be formally described and ◮ their implementation can be automatically generated. Examples: compilation description acceptor desired algorithmic properties subtask forma- output aspects lism r.e. �→ nfa, lexical regular finite au- final equivalences, nfa �→ dfa, analysis expressi- tomata states closure ons minimizati- properties, on decidabilities syntax context- pushdown syntax (determ.) non-equiv. of analysis free automata trees, de- parser det. and non- gram- rivations generation det. pda, un- mars decidabilities

  16. Tree Parsing for Code Selection compilation description acceptor desired algorithmic properties subtask formalism output aspects lexical regular ex- finite au- final r.e. �→ nfa, equivalences, analysis pressions tomata states nfa �→ dfa, closure pro- minimizati- perties, on decidabili- ties syntax context- pushdown syntax (determ.) non-equiv. analysis free automata trees, de- parser of det. and grammars rivations generation non-det. pda, undeci- dabilities code regular finite tree derivations rtg �→ fta, closure pro- selection tree automata fta �→ bu- perties, de- grammars dfta cidabilities

  17. Tree Parsing for Code Selection Machine Description ◮ Input to Code Selector Generator, ◮ Regular Tree Grammar, terminals from the program representation, non–terminals represent machine resources, ◮ Often ambiguous, ◮ Each rule has associated costs, ◮ Factorization of addressing modes reduces size. m plus DREG plus bconst AREG IREG

  18. Tree Parsing for Code Selection Generated Code Selector ◮ Parses intermediate representations (IR) of programs, ◮ Computes derivations according to “machine grammar”, each corresponding to one instruction sequence, ◮ Has to select cheapest derivation, corresponding to (locally) cheapest code sequence ◮ May compute costs in states or use dynamic programming.

  19. Tree Parsing for Code Selection Tree Languages ◮ Alphabet with arity is a finite set Σ of operators together with a function ρ : Σ → N 0 , arity . ◮ Σ k = { a ∈ Σ | ρ ( a ) = k } . ◮ The homogeneous tree language over Σ is the following inductively defined set T (Σ) : ◮ a ∈ T (Σ) for all a ∈ Σ 0 ; ◮ Are b 1 , . . . , b k in T (Σ) and is f ∈ Σ k , so is f ( b 1 , . . . , b k ) ∈ T (Σ) . Example: Σ = { a , cons , nil } , ρ ( a ) = ρ ( nil ) = 0 , ρ ( cons ) = 2. Some trees over Σ : a , cons ( nil , nil ) , cons ( cons ( a , nil ) , nil ) .

  20. Tree Parsing for Code Selection Patterns, Substitutions V infinite set of variables (arity 0). ◮ p ∈ T (Σ ∪ V ) is called a pattern over Σ , ◮ p is linear if no variable occurs twice in p . ◮ A Substitution Θ maps variables to patterns, Θ : V → T (Σ ∪ V ) . ◮ Θ extended to Θ : T (Σ ∪ V ) → T (Σ ∪ V ) by t Θ = x Θ , if t = x ∈ V and t Θ = a ( t 1 Θ , . . . , t k Θ) , if t = a ( t 1 , . . . , t k ) . Let V = { X } . X , cons ( nil , X ) , cons ( X , nil ) are patterns over Σ .

  21. Tree Parsing for Code Selection Regular Tree Grammars Regular Tree Grammar (RTG) G = ( N , Σ , P , S ) consists of ◮ N , finite set of non–terminals , ◮ Σ , finite alphabet (with arity) of terminals (operators labeling nodes) ◮ P , finite set of rules X → s where X ∈ N and s ∈ T (Σ ∪ N ) , ◮ S ∈ N , the start symbol. Notions: ◮ p : X → Y chain rule , ◮ p : X → s has type ( X 1 , . . . , X k ) → X , if j -th occurrence of a non–terminal in s (counted from the left) is X j . ◮ ˜ s results from s by replacing non–terminal X j by variable x j .

Recommend


More recommend