SC100 C Compiler
vii
Chapter 4
Interfacing C and Assembly Code
4.1
4.2
4.2.1
4.2.2
4.3
4.3.1
4.3.2
4.3.3
4.4
Inlining a Single Assembly Instruction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-1
Inlining a Sequence of Assembly Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-2
Guidelines for Inlining Assembly Code Sequences . . . . . . . . . . . . . . . . . . . . .4-2
Defining an Inlined Sequence of Assembly Instructions . . . . . . . . . . . . . . . . .4-3
Calling an Assembly Function in a Separate File. . . . . . . . . . . . . . . . . . . . . . . . . .4-7
Writing the Assembly Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-7
Calling the Assembly Function. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-8
Integrating the C and Assembly Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-8
Including Offset Labels in the Output File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-9
Chapter 5
Optimization Techniques and Hints
5.1
5.1.1
5.1.2
5.1.3
5.1.4
5.2
5.2.1
5.2.2
5.2.3
5.2.4
5.3
5.3.1
5.3.2
5.3.2.1
5.3.2.2
5.3.2.3
5.3.2.4
5.3.2.5
5.3.2.6
5.3.2.7
5.3.2.8
5.3.3
5.3.3.1
5.3.3.2
5.3.3.3
5.3.3.4
5.3.3.5
5.3.3.6
5.3.4
5.3.4.1
5.3.4.2
5.3.5
5.3.6
Optimizer Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-2
Code Transformations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-2
Basic Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-2
Linear and Parallelized Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-3
Optimization Levels and Options. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-4
Using the Optimizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-6
Invoking the Optimizer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-6
Optimizing for Space . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-7
Optimizing for Speed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-7
Using Global Optimization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-7
Optimization Types and Functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-8
Dependencies and Parallelization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-8
High-Level Optimizations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-9
Strength reduction (loop transformations) . . . . . . . . . . . . . . . . . . . . . . . .5-10
Function inlining. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-16
Common subexpression elimination. . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-17
Loop invariant code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-17
Constant folding and propagation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-17
Jump-to-jump elimination. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-18
Dead code elimination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-18
Dead storage/assignment elimination. . . . . . . . . . . . . . . . . . . . . . . . . . . .5-18
Low-Level Optimizations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-19
Instruction scheduling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-21
Low-level software pipelining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-22
Conditional execution and predication. . . . . . . . . . . . . . . . . . . . . . . . . . .5-25
Speculative execution. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-26
Post-increment detection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-27
Low-level peephole optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-28
Time Optimizations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-29
Time optimization levels and criteria . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-29
Prefix grouping. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-30
Space Optimizations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-30
Global Optimizations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5-30