TMS320C6000 Optimizing Compiler V 7.0
Total Page:16
File Type:pdf, Size:1020Kb
TMS320C6000 Optimizing Compiler v 7.0 User's Guide Literature Number: SPRU187Q February 2010 2 SPRU187Q–February 2010 Submit Documentation Feedback Copyright © 2010, Texas Instruments Incorporated Contents Preface ...................................................................................................................................... 13 1 Introduction to the Software Development Tools ................................................................... 17 1.1 Software Development Tools Overview ................................................................................ 18 1.2 C/C++ Compiler Overview ................................................................................................ 19 1.2.1 ANSI/ISO Standard ............................................................................................... 19 1.2.2 Output Files ....................................................................................................... 20 1.2.3 Compiler Interface ................................................................................................ 20 1.2.4 Utilities ............................................................................................................. 20 2 Using the C/C++ Compiler .................................................................................................. 21 2.1 About the Compiler ........................................................................................................ 22 2.2 Invoking the C/C++ Compiler ............................................................................................ 22 2.3 Changing the Compiler's Behavior With Options ...................................................................... 23 2.3.1 Frequently Used Options ........................................................................................ 32 2.3.2 Miscellaneous Useful Options .................................................................................. 34 2.3.3 Run-Time Model Options ........................................................................................ 35 2.3.4 Selecting Target CPU Version (--silicon_version Option) ................................................... 35 2.3.5 Symbolic Debugging and Profiling Options ................................................................... 36 2.3.6 Specifying Filenames ............................................................................................ 37 2.3.7 Changing How the Compiler Interprets Filenames ........................................................... 37 2.3.8 Changing How the Compiler Processes C Files ............................................................. 38 2.3.9 Changing How the Compiler Interprets and Names Extensions ........................................... 38 2.3.10 Specifying Directories ........................................................................................... 38 2.3.11 Assembler Options .............................................................................................. 39 2.3.12 Deprecated Options ............................................................................................. 40 2.4 Controlling the Compiler Through Environment Variables ........................................................... 40 2.4.1 Setting Default Compiler Options (C6X_C_OPTION) ....................................................... 40 2.4.2 Naming an Alternate Directory (C6X_C_DIR ) ............................................................... 41 2.5 Precompiled Header Support ............................................................................................ 42 2.5.1 Automatic Precompiled Header ................................................................................. 42 2.5.2 Manual Precompiled Header .................................................................................... 42 2.5.3 Additional Precompiled Header Options ....................................................................... 42 2.6 Controlling the Preprocessor ............................................................................................. 43 2.6.1 Predefined Macro Names ....................................................................................... 43 2.6.2 The Search Path for #include Files ............................................................................ 44 2.6.3 Generating a Preprocessed Listing File (--preproc_only Option) .......................................... 45 2.6.4 Continuing Compilation After Preprocessing (--preproc_with_compile Option) .......................... 45 2.6.5 Generating a Preprocessed Listing File With Comments (--preproc_with_comment Option) .......... 45 2.6.6 Generating a Preprocessed Listing File With Line-Control Information (--preproc_with_line Option) ............................................................................................................. 45 2.6.7 Generating Preprocessed Output for a Make Utility (--preproc_dependency Option) ................... 46 2.6.8 Generating a List of Files Included With the #include Directive (--preproc_includes Option) .......... 46 2.6.9 Generating a List of Macros in a File (--preproc_macros Option) .......................................... 46 2.7 Understanding Diagnostic Messages ................................................................................... 46 2.7.1 Controlling Diagnostics .......................................................................................... 47 2.7.2 How You Can Use Diagnostic Suppression Options ........................................................ 48 SPRU187Q–February 2010 Contents 3 Submit Documentation Feedback Copyright © 2010, Texas Instruments Incorporated www.ti.com 2.8 Other Messages ........................................................................................................... 48 2.9 Generating Cross-Reference Listing Information (--gen_acp_xref Option) ........................................ 49 2.10 Generating a Raw Listing File (--gen_acp_raw Option) .............................................................. 49 2.11 Using Inline Function Expansion ........................................................................................ 50 2.11.1 Inlining Intrinsic Operators ..................................................................................... 50 2.11.2 Automatic Inlining ................................................................................................ 51 2.11.3 Unguarded Definition-Controlled Inlining ..................................................................... 51 2.11.4 Guarded Inlining and the _INLINE Preprocessor Symbol .................................................. 51 2.11.5 Inlining Restrictions ............................................................................................. 53 2.12 Interrupt Flexibility Options (--interrupt_threshold Option) ........................................................... 53 2.13 Linking C6400 Code With C6200/C6700/Older C6400 Object Code ............................................... 54 2.14 Using Interlist ............................................................................................................... 54 2.15 Controlling Application Binary Interface ................................................................................ 55 2.16 Enabling Entry Hook and Exit Hook Functions ........................................................................ 56 3 Optimizing Your Code ........................................................................................................ 57 3.1 Invoking Optimization ..................................................................................................... 58 3.2 Optimizing Software Pipelining .......................................................................................... 59 3.2.1 Turn Off Software Pipelining (--disable_software_pipelining Option) ...................................... 60 3.2.2 Software Pipelining Information ................................................................................. 60 3.2.3 Collapsing Prologs and Epilogs for Improved Performance and Code Size .............................. 64 3.3 Redundant Loops .......................................................................................................... 65 3.4 Utilizing the Loop Buffer Using SPLOOP on C6400+ and C6740 .................................................. 67 3.5 Reducing Code Size (--opt_for_space (or -ms) Option) .............................................................. 67 3.6 Performing File-Level Optimization (--opt_level=3 option) ........................................................... 68 3.6.1 Controlling File-Level Optimization (--std_lib_func_def Options) ........................................... 68 3.6.2 Creating an Optimization Information File (--gen_opt_info Option) ........................................ 68 3.7 Performing Program-Level Optimization (--program_level_compile and --opt_level=3 options) ................ 69 3.7.1 Controlling Program-Level Optimization (--call_assumptions Option) ..................................... 69 3.7.2 Optimization Considerations When Mixing C/C++ and Assembly ......................................... 70 3.8 Using Feedback Directed Optimization ................................................................................. 71 3.8.1 Feedback Directed Optimization ............................................................................... 71 3.8.2 Profile Data Decoder ............................................................................................