This changes the license information in many of the flang source files. - Renamed LICENSE to LICENSE.txt. - NVIDIA Copyright lines have been removed. - Initial lines for files follow the LLVM coding convention (file name on the first line; Emacs mode information on the first line). - License references have been replaced with the abridged LLVM text. - License information was removed from the test files. - No file header was placed on test files (these weren't in most LLVM test files). - License information was added to documentation files where it was missing. We did not add brief file summaries to the initial line. See http://llvm.org/docs/DeveloperPolicy.html#new-llvm-project-license-framework for a description of the new license. See http://llvm.org/docs/CodingStandards.html#file-headers for a description of the new LLVM standard file header. Original-commit: flang-compiler/f18@add6cde724 Reviewed-on: https://github.com/flang-compiler/f18/pull/887
3.4 KiB
Overview of Compiler Phases
Each phase produces either correct output or fatal errors.
Prescan and Preprocess
See: Preprocessing.md.
Input: Fortran source and header files, command line macro definitions, set of enabled compiler directives (to be treated as directives rather than comments).
Output:
- A "cooked" character stream: the entire program as a contiguous stream of normalized Fortran source. Extraneous whitespace and comments are removed (except comments that are compiler directives that are not disabled) and case is normalized.
- Provenance information mapping each character back to the source it came from. This is used in subsequent phases to issue errors messages that refer to source locations.
Entry point: parser::Parsing::Prescan
Command: f18 -E src.f90
dumps the cooked character stream
Parse
Input: Cooked character stream.
Output: A parse tree representing a syntactically correct program,
rooted at a parser::Program
.
See: Parsing.md and ParserCombinators.md.
Entry point: parser::Parsing::Parse
Command:
f18 -fdebug-dump-parse-tree -fparse-only src.f90
dumps the parse treef18 -funparse src.f90
converts the parse tree to normalized Fortran
Validate Labels and Canonicalize Do Statements
Input: Parse tree.
Output: The parse tree with label constraints and construct names checked,
and each LabelDoStmt
converted to a NonLabelDoStmt
.
See: LabelResolution.md.
Entry points: semantics::ValidateLabels
, parser::CanonicalizeDo
Resolve Names
Input: Parse tree (without LabelDoStmt
) and .mod
files from compilation
of USEd modules.
Output:
- Tree of scopes populated with symbols and types
- Parse tree with some refinements:
- each
parser::Name::symbol
field points to one of the symbols - each
parser::TypeSpec::declTypeSpec
field points to one of the types - array element references that were parsed as function references or statement functions are corrected
- each
Entry points: semantics::ResolveNames
, semantics::RewriteParseTree
Command: f18 -fdebug-dump-symbols -fparse-only src.f90
dumps the
tree of scopes and symbols in each scope
Check DO CONCURRENT Constraints
Input: Parse tree with names resolved.
Output: Parse tree with semantically correct DO CONCURRENT loops.
Write Module Files
Input: Parse tree with names resolved.
Output: For each module and submodule, a .mod
file containing a minimal
Fortran representation suitable for compiling program units that depend on it.
See ModFiles.md.
Analyze Expressions and Assignments
Input: Parse tree with names resolved.
Output: Parse tree with parser::Expr::typedExpr
filled in and semantic
checks performed on all expressions and assignment statements.
Entry points: semantics::AnalyzeExpressions
, semantics::AnalyzeAssignments
Produce the Intermediate Representation
Input: Parse tree with names and labels resolved.
Output: An intermediate representation of the executable program. See FortranIR.md.