K. Cooper, L. Torczon - Engineering a Compiler (2011 - 2nd edition) (798440), страница 4
Текст из файла (страница 4)
. . . . . . . . . . . . . . . . . . . . . . . . . .331334335336340342344Contents xiii7.3.2 Accessing Parameter Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7.3.3 Function Calls in an Expression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7.3.4 Other Arithmetic Operators . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .7.3.5 Mixed-Type Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7.3.6 Assignment as an Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7.4 Boolean and Relational Operators . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .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 . . . . . .