1Date: Fri, 1 Jun 2001 16:38:17 -0500 (CDT)
2From: Chris Lattner <sabre@nondot.org>
3To: Vikram S. Adve <vadve@cs.uiuc.edu>
4Subject: Interesting: GCC passes
5
6
7Take a look at this document (which describes the order of optimizations
8that GCC performs):
9
10http://gcc.gnu.org/onlinedocs/gcc_17.html
11
12The rundown is that after RTL generation, the following happens:
13
141 . [t] jump optimization (jumps to jumps, etc)
152 . [t] Delete unreachable code
163 .     Compute live ranges for CSE
174 . [t] Jump threading (jumps to jumps with identical or inverse conditions)
185 . [t] CSE
196 . *** Conversion to SSA
207 . [t] SSA Based DCE
218 . *** Conversion to LLVM
229 .     UnSSA
2310.     GCSE
2411.     LICM
2512.     Strength Reduction
2613.     Loop unrolling
2714. [t] CSE
2815. [t] DCE
2916.     Instruction combination, register movement, scheduling... etc.
30
31I've marked optimizations with a [t] to indicate things that I believe to
32be relatively trivial to implement in LLVM itself.  The time consuming
33things to reimplement would be SSA based PRE, Strength reduction & loop
34unrolling... these would be the major things we would miss out on if we
35did LLVM creation from tree code [inlining and other high level
36optimizations are done on the tree representation].
37
38Given the lack of "strong" optimizations that would take a long time to
39reimplement, I am leaning a bit more towards creating LLVM from the tree
40code.  Especially given that SGI has GPL'd their compiler, including many
41SSA based optimizations that could be adapted (besides the fact that their
42code looks MUCH nicer than GCC :)
43
44Even if we choose to do LLVM code emission from RTL, we will almost
45certainly want to move LLVM emission from step 8 down until at least CSE
46has been rerun... which causes me to wonder if the SSA generation code
47will still work (due to global variable dependencies and stuff).  I assume
48that it can be made to work, but might be a little more involved than we
49would like.
50
51I'm continuing to look at the Tree -> RTL code.  It is pretty gross
52because they do some of the translation a statement at a time, and some
53of it a function at a time...  I'm not quite clear why and how the
54distinction is drawn, but it does not appear that there is a wonderful
55place to attach extra info.
56
57Anyways, I'm proceeding with the RTL -> LLVM conversion phase for now.  We
58can talk about this more on Monday.
59
60Wouldn't it be nice if there were a obvious decision to be made?  :)
61
62-Chris
63
64