|
62 | 62 |
|
63 | 63 | <p>This is the sixth public release of the LLVM Compiler Infrastructure.</p>
|
64 | 64 |
|
65 |
| -<p> At this time, LLVM is known to correctly compile a wide range of C and C++ |
66 |
| -programs, including the SPEC CPU95 & 2000 suite. It includes bug fixes for |
67 |
| -those problems found since the 1.4 release and a large number of new features |
68 |
| -and enhancements, described below.</p> |
| 65 | +<p>LLVM 1.5 is known to correctly compile a wide range of C and C++ programs, |
| 66 | +includes bug fixes for those problems found since the 1.4 release, and includes |
| 67 | +a large number of new features and enhancements, described below.</p> |
69 | 68 |
|
70 | 69 | </div>
|
71 | 70 |
|
|
101 | 100 | generating efficient code for <a
|
102 | 101 | href="LangRef.html#i_getelementptr">getelementptr</a> instructions, promoting
|
103 | 102 | small integer types to larger types (e.g. for RISC targets with one size of
|
104 |
| -integer registers), expanding 64-bit integer operations for 32-bit hosts, etc. |
| 103 | +integer registers), expanding 64-bit integer operations for 32-bit targets, etc. |
105 | 104 | Currently, the X86, PowerPC, Alpha, and IA-64 backends use this framework. The
|
106 | 105 | SPARC backends will be migrated when time permits.
|
107 | 106 | </p>
|
|
138 | 137 | href="http://doi.acm.org/10.1145/277650.277719">proper tail calls</a>, as
|
139 | 138 | required to implement languages like Scheme. Tail calls make use of two
|
140 | 139 | features: custom calling conventions (described above), which allow the code
|
141 |
| -generator to emit code for the caller to deallocate its own stack when it |
| 140 | +generator to use a convention where the caller deallocates its stack before it |
142 | 141 | returns. The second feature is a flag on the <a href="LangRef.html#i_call">call
|
143 | 142 | instruction</a>, which indicates that the callee does not access the caller's
|
144 | 143 | stack frame (indicating that it is acceptable to deallocate the caller stack
|
|
149 | 148 | could be added if desired.
|
150 | 149 | </p>
|
151 | 150 |
|
152 |
| -<p>In order for a front-end to get guaranteed tail call, it must mark functions |
153 |
| -as "fastcc", mark calls with the 'tail' marker, and follow the call with a |
154 |
| -return of the called value (or void). The optimizer and code generator attempt |
155 |
| -to handle more general cases, but the simple case will always work if the code |
156 |
| -generator supports tail calls. Here is a simple example:</p> |
| 151 | +<p>In order for a front-end to get a guaranteed tail call, it must mark |
| 152 | +functions as "fastcc", mark calls with the 'tail' marker, and follow the call |
| 153 | +with a return of the called value (or void). The optimizer and code generator |
| 154 | +attempt to handle more general cases, but the simple case will always work if |
| 155 | +the code generator supports tail calls. Here is an example:</p> |
157 | 156 |
|
158 | 157 | <pre>
|
159 | 158 | fastcc int %bar(int %X, int(double, int)* %FP) { ;<i> fastcc</i>
|
|
198 | 197 | <li>LLVM 1.5 is now about 15% faster than LLVM 1.4 and its core data
|
199 | 198 | structures use about 30% less memory.</li>
|
200 | 199 | <li>Support for Microsoft Visual Studio is improved, and <a
|
201 |
| - href="GettingStartedVS.html">now documented</a>.</li> |
| 200 | + href="GettingStartedVS.html">now documented</a>. Most LLVM tools build |
| 201 | + natively with Visual C++ now.</li> |
202 | 202 | <li><a href="GettingStarted.html#config">Configuring LLVM to build a subset
|
203 | 203 | of the available targets</a> is now implemented, via the
|
204 | 204 | <tt>--enable-targets=</tt> option.</li>
|
|
215 | 215 | <li>LLVM now includes workarounds in the code generator generator which
|
216 | 216 | reduces the likelyhood of <a href="http://llvm.cs.uiuc.edu/PR448">GCC
|
217 | 217 | hitting swap during optimized builds</a>.</li>
|
218 |
| - <li>The PowerPC backend generates far better code than in LLVM 1.4.</li> |
| 218 | + <li>The <a href="http://llvm.cs.uiuc.edu/ProjectsWithLLVM/#llvmtv">LLVM |
| 219 | + Transformation Visualizer</a> (llvm-tv) project has been updated to |
| 220 | + work with LLVM CVS.</li> |
| 221 | + <li>Nightly tester output is now archived on the <a |
| 222 | + href="http://mail.cs.uiuc.edu/pipermail/llvm-testresults/"> |
| 223 | + llvm-testresults</a> mailing list.</li> |
| 224 | + |
219 | 225 | </ol>
|
220 | 226 | </div>
|
221 | 227 |
|
|
226 | 232 |
|
227 | 233 | <div class="doc_text">
|
228 | 234 | <ol>
|
229 |
| -<li>The -globalopt pass now promotes non-address-taken static globals that are |
230 |
| -only accessed in main to SSA registers.</li> |
231 |
| - |
232 | 235 | <li>The new -simplify-libcalls pass improves code generated for well-known
|
233 | 236 | library calls. The pass optimizes calls to many of the string, memory, and
|
234 | 237 | standard I/O functions (e.g. replace the calls with simpler/faster calls) when
|
235 | 238 | possible, given information known statically about the arguments to the call.
|
236 | 239 | </li>
|
237 | 240 |
|
| 241 | +<li>The -globalopt pass now promotes non-address-taken static globals that are |
| 242 | +only accessed in main to SSA registers.</li> |
| 243 | + |
238 | 244 | <li>Loops with trip counts based on array pointer comparisons (e.g. "<tt>for (i
|
239 |
| -= 0; &A[i] != &A[100]; ++i) ...</tt>") are optimized better than before, |
| 245 | += 0; &A[i] != &A[n]; ++i) ...</tt>") are optimized better than before, |
240 | 246 | which primarily helps iterator-intensive C++ codes.</li>
|
241 | 247 |
|
242 |
| -<li>The code generator now can provide and use information about commutative |
243 |
| -two-address instructions when performing register allocation.</li> |
244 |
| - |
245 | 248 | <li>The optimizer now eliminates simple cases where redundant conditions exist
|
246 |
| -between neighboring blocks.</li> |
| 249 | + between neighboring blocks.</li> |
247 | 250 |
|
248 | 251 | <li>The reassociation pass (which turns (1+X+3) into (X+1+3) among other
|
249 |
| -things), is more aggressive an intelligent.</li> |
250 |
| - |
| 252 | +things), is more aggressive and intelligent.</li> |
| 253 | + |
| 254 | +<li>The -prune-eh pass now detects no-return functions in addition to the |
| 255 | + no-unwind functions it did before.</li> |
| 256 | + |
| 257 | +<li>The -globalsmodref alias analysis generates more precise results in some |
| 258 | + cases.</li> |
| 259 | +</ol> |
| 260 | +</div> |
| 261 | + |
| 262 | + |
| 263 | +<!--=========================================================================--> |
| 264 | +<div class="doc_subsection"> |
| 265 | +<a name="codequality">Code Generator Improvements in LLVM 1.5</a> |
| 266 | +</div> |
| 267 | + |
| 268 | +<div class="doc_text"> |
| 269 | +<ol> |
| 270 | +<li>The code generator now can provide and use information about commutative |
| 271 | + two-address instructions when performing register allocation.</li> |
| 272 | + |
| 273 | +<li>The code generator now tracks function live-in registers explicitly, |
| 274 | + instead of requiring the target to generate 'implicit defs' at the |
| 275 | + entry to a function.</li> |
| 276 | + |
| 277 | +<li>The code generator can lower integer division by a constant to |
| 278 | + multiplication by a magic constant and multiplication by a constant into |
| 279 | + shift/add sequences.</li> |
| 280 | + |
| 281 | +<li>The code generator compiles fabs/fneg/sin/cos/sqrt to assembly instructions |
| 282 | + when possible.</li> |
| 283 | + |
| 284 | +<li>The PowerPC backend generates better code in many cases, making use of |
| 285 | + FMA instructions and the recording ("dot") forms of various PowerPC |
| 286 | + instructions.</li> |
251 | 287 | </ol>
|
252 | 288 | </div>
|
253 | 289 |
|
| 290 | + |
254 | 291 | <!--=========================================================================-->
|
255 | 292 | <div class="doc_subsection">
|
256 | 293 | <a name="bugfix">Significant Bugs Fixed in LLVM 1.5</a>
|
|
266 | 303 | <li><a href="http://llvm.cs.uiuc.edu/PR548">[instcombine] miscompilation of
|
267 | 304 | setcc or setcc in one case</a></li>
|
268 | 305 | <li>Transition code for LLVM 1.0 style varargs was removed from the .ll file
|
269 |
| - parser. LLVM 1.0 bytecode files are still supported. </li> |
| 306 | + parser. LLVM 1.0 bytecode files are still supported. </li> |
270 | 307 | </ol>
|
271 | 308 |
|
272 | 309 | <p>Code Generator Bugs:</p>
|
|
277 | 314 | respect 'volatile'</a>.</li>
|
278 | 315 | <li>The JIT sometimes miscompiled globals and constant pool entries for
|
279 | 316 | 64-bit integer constants on 32-bit hosts.</li>
|
| 317 | + <li>The C backend should no longer produce code that crashes ICC 8.1.</li> |
280 | 318 | </ol>
|
281 | 319 |
|
282 | 320 | <p>Bugs in the C/C++ front-end:</p>
|
|
0 commit comments