Mercurial > hg > CbC > CbC_llvm
comparison flang/documentation/Overview.md @ 173:0572611fdcc8 llvm10 llvm12
reorgnization done
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 11:55:54 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
172:9fbae9c8bf63 | 173:0572611fdcc8 |
---|---|
1 <!--===- documentation/Overview.md | |
2 | |
3 Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
4 See https://llvm.org/LICENSE.txt for license information. | |
5 SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
6 | |
7 --> | |
8 | |
9 # Overview of Compiler Phases | |
10 | |
11 Each phase produces either correct output or fatal errors. | |
12 | |
13 ## Prescan and Preprocess | |
14 | |
15 See: [Preprocessing.md](Preprocessing.md). | |
16 | |
17 **Input:** Fortran source and header files, command line macro definitions, | |
18 set of enabled compiler directives (to be treated as directives rather than | |
19 comments). | |
20 | |
21 **Output:** | |
22 - A "cooked" character stream: the entire program as a contiguous stream of | |
23 normalized Fortran source. | |
24 Extraneous whitespace and comments are removed (except comments that are | |
25 compiler directives that are not disabled) and case is normalized. | |
26 - Provenance information mapping each character back to the source it came from. | |
27 This is used in subsequent phases to issue errors messages that refer to source locations. | |
28 | |
29 **Entry point:** `parser::Parsing::Prescan` | |
30 | |
31 **Command:** `f18 -E src.f90` dumps the cooked character stream | |
32 | |
33 ## Parse | |
34 | |
35 **Input:** Cooked character stream. | |
36 | |
37 **Output:** A parse tree representing a syntactically correct program, | |
38 rooted at a `parser::Program`. | |
39 See: [Parsing.md](Parsing.md) and [ParserCombinators.md](ParserCombinators.md). | |
40 | |
41 **Entry point:** `parser::Parsing::Parse` | |
42 | |
43 **Command:** | |
44 - `f18 -fdebug-dump-parse-tree -fparse-only src.f90` dumps the parse tree | |
45 - `f18 -funparse src.f90` converts the parse tree to normalized Fortran | |
46 | |
47 ## Validate Labels and Canonicalize Do Statements | |
48 | |
49 **Input:** Parse tree. | |
50 | |
51 **Output:** The parse tree with label constraints and construct names checked, | |
52 and each `LabelDoStmt` converted to a `NonLabelDoStmt`. | |
53 See: [LabelResolution.md](LabelResolution.md). | |
54 | |
55 **Entry points:** `semantics::ValidateLabels`, `parser::CanonicalizeDo` | |
56 | |
57 ## Resolve Names | |
58 | |
59 **Input:** Parse tree (without `LabelDoStmt`) and `.mod` files from compilation | |
60 of USEd modules. | |
61 | |
62 **Output:** | |
63 - Tree of scopes populated with symbols and types | |
64 - Parse tree with some refinements: | |
65 - each `parser::Name::symbol` field points to one of the symbols | |
66 - each `parser::TypeSpec::declTypeSpec` field points to one of the types | |
67 - array element references that were parsed as function references or | |
68 statement functions are corrected | |
69 | |
70 **Entry points:** `semantics::ResolveNames`, `semantics::RewriteParseTree` | |
71 | |
72 **Command:** `f18 -fdebug-dump-symbols -fparse-only src.f90` dumps the | |
73 tree of scopes and symbols in each scope | |
74 | |
75 ## Check DO CONCURRENT Constraints | |
76 | |
77 **Input:** Parse tree with names resolved. | |
78 | |
79 **Output:** Parse tree with semantically correct DO CONCURRENT loops. | |
80 | |
81 ## Write Module Files | |
82 | |
83 **Input:** Parse tree with names resolved. | |
84 | |
85 **Output:** For each module and submodule, a `.mod` file containing a minimal | |
86 Fortran representation suitable for compiling program units that depend on it. | |
87 See [ModFiles.md](ModFiles.md). | |
88 | |
89 ## Analyze Expressions and Assignments | |
90 | |
91 **Input:** Parse tree with names resolved. | |
92 | |
93 **Output:** Parse tree with `parser::Expr::typedExpr` filled in and semantic | |
94 checks performed on all expressions and assignment statements. | |
95 | |
96 **Entry points**: `semantics::AnalyzeExpressions`, `semantics::AnalyzeAssignments` | |
97 | |
98 ## Produce the Intermediate Representation | |
99 | |
100 **Input:** Parse tree with names and labels resolved. | |
101 | |
102 **Output:** An intermediate representation of the executable program. | |
103 See [FortranIR.md](FortranIR.md). |