Cooper_Engineering_a_Compiler(Second Edition) (1157546), страница 4
Текст из файла (страница 4)
. . . . . . . . . . . . . . . . . . . . . . . . . . .7.4.1 Representations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7.4.2 Hardware Support for Relational Operations . . . . . . . . . . . . . . . .7.5 Storing and Accessing Arrays . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .7.5.1 Referencing a Vector Element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7.5.2 Array Storage Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7.5.3 Referencing an Array Element . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .7.5.4 Range Checking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7.6 Character Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7.6.1 String Representations . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7.6.2 String Assignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7.6.3 String Concatenation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . .7.6.4 String Length . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7.7 Structure References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7.7.1 Understanding Structure Layouts . . . . .
. . . . . . . . . . . . . . . . . . . . . . .7.7.2 Arrays of Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7.7.3 Unions and Runtime Tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7.7.4 Pointers and Anonymous Values . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .7.8 Control-Flow Constructs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7.8.1 Conditional Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .7.8.2 Loops and Iteration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7.8.3 Case Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7.9 Procedure Calls . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7.9.1 Evaluating Actual Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7.9.2 Saving and Restoring Registers . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .7.10 Summary and Perspective . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Chapter Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .345347348348349350351353359359361362367369370370372373374375376377378380381384388392393394396397398CHAPTER 8 Introduction to Optimization . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4058.18.2Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .8.2.1 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8.2.2 Considerations for Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8.2.3 Opportunities for Optimization . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .405407408412415xiv Contents8.38.48.58.68.78.8Scope of Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Local Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .8.4.1 Local Value Numbering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8.4.2 Tree-Height Balancing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Regional Optimization . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8.5.1 Superlocal Value Numbering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8.5.2 Loop Unrolling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Global Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . .8.6.1 Finding Uninitialized Variables with LiveInformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8.6.2 Global Code Placement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . .Interprocedural Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8.7.1 Inline Substitution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8.7.2 Procedure Placement . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8.7.3 Compiler Organization for InterproceduralOptimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Summary and Perspective . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Chapter Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Exercises . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .417420420428437437441445445451457458462467469470471CHAPTER 9 Data-Flow Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4759.19.29.39.49.5Introduction . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Iterative Data-Flow Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9.2.1 Dominance . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9.2.2 Live-Variable Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9.2.3 Limitations on Data-Flow Analysis . . . . . . . . . . . . . . . . . . . . . . . . . .9.2.4 Other Data-Flow Problems . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .Static Single-Assignment Form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9.3.1 A Simple Method for Building SSA Form . . . . . . . . . . . . . . . . . .9.3.2 Dominance Frontiers . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .9.3.3 Placing φ-Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9.3.4 Renaming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9.3.5 Translation Out of SSA Form .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9.3.6 Using SSA Form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Interprocedural Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .9.4.1 Call-Graph Construction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9.4.2 Interprocedural Constant Propagation . . . . . . . . . . . . . . . . . . . . . . .Advanced Topics . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9.5.1 Structural Data-Flow Algorithms and Reducibility . . . . . . . . .9.5.2 Speeding up the Iterative Dominance Framework . . . . . . . . . .475477478482487490495496497500505510515519520522526527530Contents xv9.6 Summary and Perspective . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 533Chapter Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534Exercises . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535CHAPTER 10 Scalar Optimizations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53910.1 Introduction .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10.2 Eliminating Useless and Unreachable Code . . . . . . . . . . . . . . . . . . . . . . . .10.2.1 Eliminating Useless Code . . . . . . . . . . . . . . . . . . . . . . .