11debfc3dSmrg\input texinfo @c -*-texinfo-*- 21debfc3dSmrg@c %**start of header 31debfc3dSmrg@setfilename gccint.info 41debfc3dSmrg@c INTERNALS is used by md.texi to determine whether to include the 51debfc3dSmrg@c whole of that file, in the internals manual, or only the part 61debfc3dSmrg@c dealing with constraints, in the user manual. 71debfc3dSmrg@set INTERNALS 81debfc3dSmrg 91debfc3dSmrg@c See miscellaneous notes in gcc.texi on checks/things to do. 101debfc3dSmrg 111debfc3dSmrg@include gcc-common.texi 121debfc3dSmrg 131debfc3dSmrg@settitle GNU Compiler Collection (GCC) Internals 141debfc3dSmrg 151debfc3dSmrg@c Create a separate index for command line options. 161debfc3dSmrg@defcodeindex op 171debfc3dSmrg@c Merge the standard indexes into a single one. 181debfc3dSmrg@syncodeindex fn cp 191debfc3dSmrg@syncodeindex vr cp 201debfc3dSmrg@syncodeindex ky cp 211debfc3dSmrg@syncodeindex pg cp 221debfc3dSmrg@syncodeindex tp cp 231debfc3dSmrg 241debfc3dSmrg@paragraphindent 1 251debfc3dSmrg 261debfc3dSmrg@c %**end of header 271debfc3dSmrg 281debfc3dSmrg@copying 29*8feb0f0bSmrgCopyright @copyright{} 1988-2020 Free Software Foundation, Inc. 301debfc3dSmrg 311debfc3dSmrgPermission is granted to copy, distribute and/or modify this document 321debfc3dSmrgunder the terms of the GNU Free Documentation License, Version 1.3 or 331debfc3dSmrgany later version published by the Free Software Foundation; with the 341debfc3dSmrgInvariant Sections being ``Funding Free Software'', the Front-Cover 351debfc3dSmrgTexts being (a) (see below), and with the Back-Cover Texts being (b) 361debfc3dSmrg(see below). A copy of the license is included in the section entitled 371debfc3dSmrg``GNU Free Documentation License''. 381debfc3dSmrg 391debfc3dSmrg(a) The FSF's Front-Cover Text is: 401debfc3dSmrg 411debfc3dSmrg A GNU Manual 421debfc3dSmrg 431debfc3dSmrg(b) The FSF's Back-Cover Text is: 441debfc3dSmrg 451debfc3dSmrg You have freedom to copy and modify this GNU Manual, like GNU 461debfc3dSmrg software. Copies published by the Free Software Foundation raise 471debfc3dSmrg funds for GNU development. 481debfc3dSmrg@end copying 491debfc3dSmrg@ifnottex 501debfc3dSmrg@dircategory Software development 511debfc3dSmrg@direntry 521debfc3dSmrg* gccint: (gccint). Internals of the GNU Compiler Collection. 531debfc3dSmrg@end direntry 541debfc3dSmrgThis file documents the internals of the GNU compilers. 551debfc3dSmrg@sp 1 561debfc3dSmrg@insertcopying 571debfc3dSmrg@sp 1 581debfc3dSmrg@end ifnottex 591debfc3dSmrg 601debfc3dSmrg@setchapternewpage odd 611debfc3dSmrg@titlepage 621debfc3dSmrg@title GNU Compiler Collection Internals 631debfc3dSmrg@versionsubtitle 641debfc3dSmrg@author Richard M. Stallman and the @sc{GCC} Developer Community 651debfc3dSmrg@page 661debfc3dSmrg@vskip 0pt plus 1filll 671debfc3dSmrg@insertcopying 681debfc3dSmrg@end titlepage 691debfc3dSmrg@summarycontents 701debfc3dSmrg@contents 711debfc3dSmrg@page 721debfc3dSmrg 731debfc3dSmrg@node Top, Contributing 741debfc3dSmrg@top Introduction 751debfc3dSmrg@cindex introduction 761debfc3dSmrg 771debfc3dSmrgThis manual documents the internals of the GNU compilers, including 781debfc3dSmrghow to port them to new targets and some information about how to 791debfc3dSmrgwrite front ends for new languages. It corresponds to the compilers 801debfc3dSmrg@ifset VERSION_PACKAGE 811debfc3dSmrg@value{VERSION_PACKAGE} 821debfc3dSmrg@end ifset 831debfc3dSmrgversion @value{version-GCC}. The use of the GNU compilers is documented in a 841debfc3dSmrgseparate manual. @xref{Top,, Introduction, gcc, Using the GNU 851debfc3dSmrgCompiler Collection (GCC)}. 861debfc3dSmrg 871debfc3dSmrgThis manual is mainly a reference manual rather than a tutorial. It 881debfc3dSmrgdiscusses how to contribute to GCC (@pxref{Contributing}), the 891debfc3dSmrgcharacteristics of the machines supported by GCC as hosts and targets 901debfc3dSmrg(@pxref{Portability}), how GCC relates to the ABIs on such systems 911debfc3dSmrg(@pxref{Interface}), and the characteristics of the languages for 921debfc3dSmrgwhich GCC front ends are written (@pxref{Languages}). It then 931debfc3dSmrgdescribes the GCC source tree structure and build system, some of the 941debfc3dSmrginterfaces to GCC front ends, and how support for a target system is 951debfc3dSmrgimplemented in GCC@. 961debfc3dSmrg 971debfc3dSmrgAdditional tutorial information is linked to from 981debfc3dSmrg@uref{http://gcc.gnu.org/readings.html}. 991debfc3dSmrg 1001debfc3dSmrg@menu 1011debfc3dSmrg* Contributing:: How to contribute to testing and developing GCC. 1021debfc3dSmrg* Portability:: Goals of GCC's portability features. 1031debfc3dSmrg* Interface:: Function-call interface of GCC output. 1041debfc3dSmrg* Libgcc:: Low-level runtime library used by GCC. 1051debfc3dSmrg* Languages:: Languages for which GCC front ends are written. 1061debfc3dSmrg* Source Tree:: GCC source tree structure and build system. 1071debfc3dSmrg* Testsuites:: GCC testsuites. 1081debfc3dSmrg* Options:: Option specification files. 1091debfc3dSmrg* Passes:: Order of passes, what they do, and what each file is for. 110a2dc1f3fSmrg* poly_int:: Representation of runtime sizes and offsets. 1111debfc3dSmrg* GENERIC:: Language-independent representation generated by Front Ends 1121debfc3dSmrg* GIMPLE:: Tuple representation used by Tree SSA optimizers 1131debfc3dSmrg* Tree SSA:: Analysis and optimization of GIMPLE 1141debfc3dSmrg* RTL:: Machine-dependent low-level intermediate representation. 1151debfc3dSmrg* Control Flow:: Maintaining and manipulating the control flow graph. 1161debfc3dSmrg* Loop Analysis and Representation:: Analysis and representation of loops 1171debfc3dSmrg* Machine Desc:: How to write machine description instruction patterns. 1181debfc3dSmrg* Target Macros:: How to write the machine description C macros and functions. 1191debfc3dSmrg* Host Config:: Writing the @file{xm-@var{machine}.h} file. 1201debfc3dSmrg* Fragments:: Writing the @file{t-@var{target}} and @file{x-@var{host}} files. 1211debfc3dSmrg* Collect2:: How @code{collect2} works; how it finds @code{ld}. 1221debfc3dSmrg* Header Dirs:: Understanding the standard header file directories. 1231debfc3dSmrg* Type Information:: GCC's memory management; generating type information. 1241debfc3dSmrg* Plugins:: Extending the compiler with plugins. 1251debfc3dSmrg* LTO:: Using Link-Time Optimization. 1261debfc3dSmrg 1271debfc3dSmrg* Match and Simplify:: How to write expression simplification patterns for GIMPLE and GENERIC 128*8feb0f0bSmrg* Static Analyzer:: Working with the static analyzer. 129c0a68be4Smrg* User Experience Guidelines:: Guidelines for implementing diagnostics and options. 1301debfc3dSmrg* Funding:: How to help assure funding for free software. 1311debfc3dSmrg* GNU Project:: The GNU Project and GNU/Linux. 1321debfc3dSmrg 1331debfc3dSmrg* Copying:: GNU General Public License says 1341debfc3dSmrg how you can copy and share GCC. 1351debfc3dSmrg* GNU Free Documentation License:: How you can copy and share this manual. 1361debfc3dSmrg* Contributors:: People who have contributed to GCC. 1371debfc3dSmrg 1381debfc3dSmrg* Option Index:: Index to command line options. 1391debfc3dSmrg* Concept Index:: Index of concepts and symbol names. 1401debfc3dSmrg@end menu 1411debfc3dSmrg 1421debfc3dSmrg@include contribute.texi 1431debfc3dSmrg@include portability.texi 1441debfc3dSmrg@include interface.texi 1451debfc3dSmrg@include libgcc.texi 1461debfc3dSmrg@include languages.texi 1471debfc3dSmrg@include sourcebuild.texi 1481debfc3dSmrg@include options.texi 1491debfc3dSmrg@include passes.texi 150a2dc1f3fSmrg@include poly-int.texi 1511debfc3dSmrg@include generic.texi 1521debfc3dSmrg@include gimple.texi 1531debfc3dSmrg@include tree-ssa.texi 1541debfc3dSmrg@include rtl.texi 1551debfc3dSmrg@include cfg.texi 1561debfc3dSmrg@include loop.texi 1571debfc3dSmrg@include md.texi 1581debfc3dSmrg@include tm.texi 1591debfc3dSmrg@include hostconfig.texi 1601debfc3dSmrg@include fragments.texi 1611debfc3dSmrg@include collect2.texi 1621debfc3dSmrg@include headerdirs.texi 1631debfc3dSmrg@include gty.texi 1641debfc3dSmrg@include plugins.texi 1651debfc3dSmrg@include lto.texi 1661debfc3dSmrg@include match-and-simplify.texi 167*8feb0f0bSmrg@include analyzer.texi 168c0a68be4Smrg@include ux.texi 1691debfc3dSmrg 1701debfc3dSmrg@include funding.texi 1711debfc3dSmrg@include gnu.texi 1721debfc3dSmrg@include gpl_v3.texi 1731debfc3dSmrg 1741debfc3dSmrg@c --------------------------------------------------------------------- 1751debfc3dSmrg@c GFDL 1761debfc3dSmrg@c --------------------------------------------------------------------- 1771debfc3dSmrg 1781debfc3dSmrg@include fdl.texi 1791debfc3dSmrg 1801debfc3dSmrg@include contrib.texi 1811debfc3dSmrg 1821debfc3dSmrg@c --------------------------------------------------------------------- 1831debfc3dSmrg@c Indexes 1841debfc3dSmrg@c --------------------------------------------------------------------- 1851debfc3dSmrg 1861debfc3dSmrg@node Option Index 1871debfc3dSmrg@unnumbered Option Index 1881debfc3dSmrg 1891debfc3dSmrgGCC's command line options are indexed here without any initial @samp{-} 1901debfc3dSmrgor @samp{--}. Where an option has both positive and negative forms 1911debfc3dSmrg(such as @option{-f@var{option}} and @option{-fno-@var{option}}), 1921debfc3dSmrgrelevant entries in the manual are indexed under the most appropriate 1931debfc3dSmrgform; it may sometimes be useful to look up both forms. 1941debfc3dSmrg 1951debfc3dSmrg@printindex op 1961debfc3dSmrg 1971debfc3dSmrg@node Concept Index 1981debfc3dSmrg@unnumbered Concept Index 1991debfc3dSmrg 2001debfc3dSmrg@printindex cp 2011debfc3dSmrg 2021debfc3dSmrg@c --------------------------------------------------------------------- 2031debfc3dSmrg@c Epilogue 2041debfc3dSmrg@c --------------------------------------------------------------------- 2051debfc3dSmrg 2061debfc3dSmrg@bye 207