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