|
40 | 40 |
|
41 | 41 | <p>This document contains the release notes for the LLVM compiler
|
42 | 42 | infrastructure, release 1.1. Here we describe the status of LLVM, including any
|
43 |
| -known problems, and bug fixes from the previous release. The most up-to-date |
| 43 | +known problems and bug fixes from the previous release. The most up-to-date |
44 | 44 | version of this document can be found on the <a
|
45 | 45 | href="http://llvm.cs.uiuc.edu/releases/1.1/">LLVM 1.1 web site</a>. If you are
|
46 |
| -not reading this on the LLVM web pages, you should probably go there, because |
| 46 | +not reading this on the LLVM web pages, you should probably go there because |
47 | 47 | this document may be updated after the release.</p>
|
48 | 48 |
|
49 | 49 | <p>For more information about LLVM, including information about potentially more
|
|
69 | 69 |
|
70 | 70 | <p>This is the second public release of the LLVM compiler infrastructure. This
|
71 | 71 | release is primarily a bugfix release, dramatically improving the C/C++
|
72 |
| -front-end, and improving support for C++ in the LLVM core. This release also |
| 72 | +front-end and improving support for C++ in the LLVM core. This release also |
73 | 73 | includes a few new features, such as a simple profiler, support for Mac OS X,
|
74 | 74 | better interoperability with external source bases, a new example language
|
75 | 75 | front-end, and improvements in a few optimizations. The performance of several
|
|
84 | 84 | </p>
|
85 | 85 |
|
86 | 86 | <p>
|
87 |
| -The LLVM native code generators are very stable, but do not currently support |
| 87 | +The LLVM native code generators are very stable but do not currently support |
88 | 88 | unwinding (exception throwing or <tt>longjmp</tt>ing), which prevent them from
|
89 | 89 | working with programs like the <tt>253.perlbmk</tt> in SPEC CPU2000. The C
|
90 |
| -backend and the rest of LLVM does support these programs however, so you can |
| 90 | +backend and the rest of LLVM supports these programs, so you can |
91 | 91 | still use LLVM with them. Support for unwinding will be added in a future
|
92 | 92 | release.
|
93 | 93 | </p>
|
|
101 | 101 | <ol>
|
102 | 102 | <li><a
|
103 | 103 | href="http://mail.cs.uiuc.edu/pipermail/llvmdev/2003-November/000528.html">A new
|
104 |
| -LLVM profiler, similar to gprof</a> is available</li> |
| 104 | +LLVM profiler, similar to gprof,</a> is available.</li> |
105 | 105 |
|
106 | 106 | <li>LLVM and the C/C++ front-end now compile on Mac OS X! Mac OS X users can
|
107 | 107 | now explore the LLVM optimizer with the C backend and interpreter. Note that
|
108 | 108 | LLVM requires GCC 3.3 on Mac OS X.</li>
|
109 | 109 |
|
110 | 110 | <li>LLVM has been <a
|
111 | 111 | href="http://mail.cs.uiuc.edu/pipermail/llvmdev/2003-November/000554.html">moved
|
112 |
| -into an 'llvm' C++ namespace</a>, for easier integration with third-party |
| 112 | +into an 'llvm' C++ namespace</a> for easier integration with third-party |
113 | 113 | code. Note that due to lack of namespace support in GDB 5.x, you will probably
|
114 | 114 | want to upgrade to GDB 6 or better to debug LLVM code.</li>
|
115 | 115 |
|
|
119 | 119 | <ol>
|
120 | 120 | <li>
|
121 | 121 | New directories can be added to the source tree, and the build will
|
122 |
| - automatically pick them up (i.e. no need to re-run <tt>configure</tt>). |
| 122 | + automatically pick them up (i.e. no need to edit <tt>configure.ac</tt> and |
| 123 | + re-run <tt>configure</tt>). |
123 | 124 | </li>
|
124 | 125 |
|
125 | 126 | <li>
|
|
131 | 132 |
|
132 | 133 | <li>A front-end for "Stacker" (a simple Forth-like language) is now
|
133 | 134 | <a href="http://llvm.cs.uiuc.edu/PR136">included in the main LLVM tree</a>.
|
134 |
| - Additionally, Reid Spencer, the author, contributed a document <a href="Stacker.html">describing his experiences writing Stacker, and the language itself</a>. This document is invaluable for others writing front-ends targetting LLVM.</li> |
| 135 | + Additionally, Reid Spencer, the author, contributed a document |
| 136 | + <a href="Stacker.html">describing his experiences writing Stacker and the language itself</a>. |
| 137 | + This document is invaluable for others writing front-ends targetting LLVM.</li> |
135 | 138 |
|
136 | 139 | <li>The <tt>configure</tt> script will now configure all projects placed in the
|
137 | 140 | <tt>llvm/projects</tt> directory.</li>
|
|
142 | 145 | <li>The <tt>-licm</tt> pass can now sink instructions out the bottom of loops
|
143 | 146 | in addition to being able to hoist them out the top.</li>
|
144 | 147 |
|
145 |
| -<li>The <tt>-basicaa</tt> pass (the default alias analysis) has been upgraded |
146 |
| -to be <a href="http://llvm.cs.uiuc.edu/PR86">significantly more |
| 148 | +<li>The <tt>-basicaa</tt> pass (the default alias analysis pass) has been |
| 149 | +upgraded to be <a href="http://llvm.cs.uiuc.edu/PR86">significantly more |
147 | 150 | precise</a>.</li>
|
148 | 151 |
|
149 | 152 | <li>LLVM 1.1 implements a simple size optimization for LLVM bytecode files.
|
150 |
| - This means that the 1.1 files are smaller than 1.0, but that 1.0 won't |
| 153 | + This means that the 1.1 files are smaller than 1.0, but LLVM 1.0 won't |
151 | 154 | read 1.1 bytecode files.</li>
|
152 | 155 |
|
153 | 156 | <li><a href="http://llvm.cs.uiuc.edu/PR140">The gccld program produces a runner script that includes command-line options to load the necessary shared objects.</a></li>
|
|
187 | 190 | more, giving the optimizer more freedom.</a></li>
|
188 | 191 |
|
189 | 192 | <li>The C front-end now <a href="http://llvm.cs.uiuc.edu/PR84">generates
|
190 |
| - type-safe code</a> in several cases that it did not before, which prevented |
191 |
| - some important optimizations.</li> |
| 193 | + type-safe code</a> in several cases that it did not before, allowing |
| 194 | + optimization of code that could not be optimized previously.</li> |
192 | 195 |
|
193 | 196 | <li>The LLVM build system has been taught to catch some common configuration
|
194 | 197 | problems that <a href="http://llvm.cs.uiuc.edu/PR96">caused it to get
|
195 |
| - horribly confused</a> before.</li> |
| 198 | + horribly confused</a>.</li> |
196 | 199 |
|
197 | 200 | <li>The LLVM header files are now
|
198 | 201 | <a href="http://llvm.cs.uiuc.edu/PR114">-Wold-style-cast clean</a>.</li>
|
|
209 | 212 | <a href="http://llvm.cs.uiuc.edu/PR11">generated N^2 amounts of duplicated cleanup code</a> in some cases.</li>
|
210 | 213 |
|
211 | 214 | <li>The JIT used to <a href="http://llvm.cs.uiuc.edu/PR177">generate code for
|
212 |
| - all functions pointed to by globals</a> immediately, before the program |
213 |
| - started execution, but now it waits until the first time they are called to |
| 215 | + all functions pointed to by globals</a> before the program |
| 216 | + started execution. Now, it waits until the first time the functions are |
| 217 | + called to |
214 | 218 | compile them. This dramatically speeds up short runs of large C++ programs,
|
215 | 219 | which often have large numbers of functions pointed to by vtables.</li>
|
216 | 220 | </ol>
|
|
232 | 236 | <li><a href="http://llvm.cs.uiuc.edu/PR71">llvm-as crashes when labels are used in phi nodes</a></li>
|
233 | 237 | <li><a href="http://llvm.cs.uiuc.edu/PR72">[build problem] Callgraph.cpp not pulled in from libipa.a</a></li>
|
234 | 238 | <li><a href="http://llvm.cs.uiuc.edu/PR77">Variables in scope of output setjmp
|
235 |
| -calls should be volatile</a> (Note that this does not effect correctness on |
| 239 | +calls should be volatile</a> (Note that this does not affect correctness on |
236 | 240 | many platforms, such as X86).</li>
|
237 | 241 | <li><a href="http://llvm.cs.uiuc.edu/PR83">[X86] Emission of global bool initializers broken</a></li>
|
238 | 242 | <li><a href="http://llvm.cs.uiuc.edu/PR91">[gccld] The -r (relinking) option does not work correctly</a></li>
|
|
307 | 311 | interpreter (no native backend for the PowerPC is available yet).
|
308 | 312 | The core LLVM infrastructure uses "autoconf" for portability, so hopefully we
|
309 | 313 | work on more platforms than that. However, it is likely that we
|
310 |
| -missed something, and that minor porting is required to get LLVM to work on |
| 314 | +missed something and that minor porting is required to get LLVM to work on |
311 | 315 | new platforms. We welcome portability patches and error messages.</p>
|
312 | 316 |
|
313 | 317 | </div>
|
|
323 | 327 | <p>This section contains all known problems with the LLVM system, listed by
|
324 | 328 | component. As new problems are discovered, they will be added to these
|
325 | 329 | sections. If you run into a problem, please check the <a
|
326 |
| -href="http://llvm.cs.uiuc.edu/bugs/">LLVM bug database</a>, and submit a bug if |
| 330 | +href="http://llvm.cs.uiuc.edu/bugs/">LLVM bug database</a> and submit a bug if |
327 | 331 | there isn't already one.</p>
|
328 | 332 |
|
329 | 333 | </div>
|
|
418 | 422 | the following extensions are known to <b>not be</b> supported:
|
419 | 423 | <ol>
|
420 | 424 | <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Local-Labels.html#Local%20Labels">Local Labels</a>: Labels local to a block.</li>
|
421 |
| - <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html#Labels%20as%20Values">Labels as Values</a>: Getting pointers to labels, and computed gotos.</li> |
| 425 | + <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html#Labels%20as%20Values">Labels as Values</a>: Getting pointers to labels and computed gotos.</li> |
422 | 426 | <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html#Nested%20Functions">Nested Functions</a>: As in Algol and Pascal, lexical scoping of functions.</li>
|
423 | 427 | <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Constructing-Calls.html#Constructing%20Calls">Constructing Calls</a>: Dispatching a call to another function.</li>
|
424 | 428 | <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html#Extended%20Asm">Extended Asm</a>: Assembler instructions with C expressions as operands.</li>
|
425 |
| - <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Constraints.html#Constraints">Constraints</a>: Constraints for asm operands</li> |
| 429 | + <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Constraints.html#Constraints">Constraints</a>: Constraints for asm operands.</li> |
426 | 430 | <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Asm-Labels.html#Asm%20Labels">Asm Labels</a>: Specifying the assembler name to use for a C symbol.</li>
|
427 | 431 | <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Explicit-Reg-Vars.html#Explicit%20Reg%20Vars">Explicit Reg Vars</a>: Defining variables residing in specified registers.</li>
|
428 | 432 | <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Return-Address.html#Return%20Address">Return Address</a>: Getting the return or frame address of a function.</li>
|
|
435 | 439 | <p>The following GCC extensions are <b>partially</b> supported. An ignored
|
436 | 440 | attribute means that the LLVM compiler ignores the presence of the attribute,
|
437 | 441 | but the code should still work. An unsupported attribute is one which is
|
438 |
| - ignored by the LLVM compiler, which will cause a different interpretation of |
| 442 | + ignored by the LLVM compiler and will cause a different interpretation of |
439 | 443 | the program.</p>
|
440 | 444 |
|
441 | 445 | <ol>
|
|
445 | 449 |
|
446 | 450 | <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html#Function%20Attributes">Function Attributes</a>:
|
447 | 451 |
|
448 |
| - Declaring that functions have no side effects, or that they can never |
| 452 | + Declaring that functions have no side effects or that they can never |
449 | 453 | return.<br>
|
450 | 454 |
|
451 | 455 | <b>Supported:</b> <tt>format</tt>, <tt>format_arg</tt>, <tt>non_null</tt>,
|
|
504 | 508 | <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Subscripting.html#Subscripting">Subscripting</a>: Any array can be subscripted, even if not an lvalue.</li>
|
505 | 509 | <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Pointer-Arith.html#Pointer%20Arith">Pointer Arith</a>: Arithmetic on <code>void</code>-pointers and function pointers.</li>
|
506 | 510 | <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Initializers.html#Initializers">Initializers</a>: Non-constant initializers.</li>
|
507 |
| - <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Compound-Literals.html#Compound%20Literals">Compound Literals</a>: Compound literals give structures, unions or arrays as values.</li> |
| 511 | + <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Compound-Literals.html#Compound%20Literals">Compound Literals</a>: Compound literals give structures, unions, |
| 512 | +or arrays as values.</li> |
508 | 513 | <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html#Designated%20Inits">Designated Inits</a>: Labeling elements of initializers.</li>
|
509 | 514 | <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Cast-to-Union.html#Cast%20to%20Union">Cast to Union</a>: Casting to union type from any member of the union.</li>
|
510 | 515 | <li><a href="http://gcc.gnu.org/onlinedocs/gcc/Case-Ranges.html#Case%20Ranges">Case Ranges</a>: `case 1 ... 9' and such.</li>
|
|
536 | 541 |
|
537 | 542 | <div class="doc_text">
|
538 | 543 |
|
539 |
| -<p>For this release, the C++ front-end is considered to be fully functional, but |
| 544 | +<p>For this release, the C++ front-end is considered to be fully functional but |
540 | 545 | has not been tested as thoroughly as the C front-end. It has been tested and
|
541 | 546 | works for a number of non-trivial programs, but there may be lurking bugs.
|
542 | 547 | Please report any bugs or problems.</p>
|
|
552 | 557 |
|
553 | 558 | <ul>
|
554 | 559 | <li>The C++ front-end inherits all problems afflicting the <a href="#c-fe">C
|
555 |
| - front-end</a></li> |
| 560 | + front-end</a>.</li> |
556 | 561 | </ul>
|
557 | 562 |
|
558 | 563 | </div>
|
|
574 | 579 | <li>Destructors for local objects are not always run when a <tt>longjmp</tt> is
|
575 | 580 | performed. In particular, destructors for objects in the <tt>longjmp</tt>ing
|
576 | 581 | function and in the <tt>setjmp</tt> receiver function may not be run.
|
577 |
| - Objects in intervening stack frames will be destroyed however (which is |
| 582 | + Objects in intervening stack frames will be destroyed, however (which is |
578 | 583 | better than most compilers).</li>
|
579 | 584 |
|
580 | 585 | <li>The LLVM C++ front-end follows the <a
|
|
663 | 668 | <div class="doc_text">
|
664 | 669 |
|
665 | 670 | <p>A wide variety of additional information is available on the LLVM web page,
|
666 |
| -including mailing lists publications describing algorithms and components |
| 671 | +including mailing lists and publications describing algorithms and components |
667 | 672 | implemented in LLVM. The web page also contains versions of the API
|
668 | 673 | documentation which is up-to-date with the CVS version of the source code. You
|
669 | 674 | can access versions of these documents specific to this release by going into
|
|
0 commit comments