292
I Use This!
Very High Activity

News

Analyzed 1 day ago. based on code collected 1 day ago.
Posted about 17 years ago by Chris Lattner
Hi Everyone, I'm happy to say that LLVM has made many leaps and bounds since the last update in November. Because we are bumping the major version number with this release, we're letting the release go for twice as long as our planned release ... [More] schedule (6 months instead of 3). We are currently half way through the LLVM 2.0 development cycle. So far, many important and invasive changes have landed in 2.0, including a complete replacement of the integer type system (necessitating replacement of many instructions), lots of new features have been added (e.g. ARM/Thumb is now fully supported), and of course many bugs have been found and fixed. Here are some of the most notable aspects of LLVM CVS (to become LLVM 2.0) so far: Major LLVM Changes: 1. llvm-gcc3 is now officially unsupported. LLVM 2.0 will require users to upgrade to llvm-gcc4. llvm-gcc4 includes many features over llvm-gcc3, is faster, and is much easier to build. Whenever I refer to llvm-gcc in this email, I mean llvm-gcc4. 2. Reid contributed changes to make the integer types in LLVM completely signless. This means that we have types like i8/i16/i32 instead of ubyte/sbyte/short/ushort/int etc. In order to support this, the LLVM operations that depend on sign have been split up into separate instructions. For example, instead of shr, we now have ashr/lshr. Instead of 'cast', we now 12 explicit instructions like trunc, zext, and sext. See http://llvm.org/PR950 for more details. This change makes the IR more powerful and efficient. We now no-longer have casts that simply change sign (e.g. int <-> uint), and we now support new operations like bitcast from fp to integer. 3. Reid and Sheng contributed changes to support arbitrary bitwidth integers (e.g. i13, i36, i42, etc) in the front-end and LLVM IR (the code generator does not support them yet). CVS currently supports bitwidths <= 64 bits. Work to support bitwidths larger than 64 bits is underway. See http://llvm.org/PR1043 for more details. 4. Reid removed the 'type planes' of LLVM 1.x. It is no longer possible to have two values with the same name in the same symbol table. This simplifies LLVM internals, allowing significant speedups. See http://llvm.org/PR411 for more information. 5. Global variables and functions in .ll files are now prefixed with < at > instead of %. This fixes some long-standing ambiguity problems with some cases. See http://llvm.org/PR645 for more details. New Features: 6. Devang implemented support for Precompiled Headers (PCH) in llvm-gcc. 7. Anton contributed support for external weak linkage and hidden visibility. 8. Andrew contributed support for packed structure types, which allows LLVM to express unaligned data more naturally. 9. Support for inline assembly in llvm-gcc is much improved, and many related bugs have been fixed. 10. Duncan Sands has contributed many llvm-gcc patches to better support Ada, including support for nested functions. 11. Reid added support for tracking function parameter/result attributes in LLVM. Optimizer Improvements: 12. Devang rewrote the pass manager, making it significantly smaller, simpler and more extensible. He added support for running FunctionPass's interlaced with CallGraphSCCPass's, which improves the cost model in the inliner and speeds it up. 13. The -scalarrepl pass can now promote unions containing FP values into a register, it can also handle unions of vectors of the same size. 14. Nick Lewycky contributed significant improvements to the predicate simplifier pass, making it able to do simple value range propagation and eliminate more conditionals. Target-Independent Code Generator Enhancements: 15. Jim contributed initial pieces of support for Zero-cost DWARF exception handling. It is now possible to throw through LLVM-compiled stack frames (callee save registers are properly restored) and C 'catch' statements work in simple cases. 16. Owen extended TargetData to support better target parameterization in the .ll/.bc files, eliminating the 'pointersize/endianness' attributes in the files. See http://llvm.org/PR761 for more info. 17. Scott Michel contributed patches to generalize TargetData for finer grained alignment handling, handling of vector alignment, and handling of preferred alignment. 18. Evan improved the scheduler to better reduce register pressure on X86 and other targets that are register pressure sensitive. 19. Evan contributed support for software floating point routines. 20. Jim improved DWARF debug information generation. LLVM now passes most of the GDB testsuite on MacOS and debug info is more dense. 21. Nate's work on a direct Mach-o .o file writer is making great progress. Many small apps work, but it is not quite complete yet. X86-Specific Code Generator Enhancements: 22. Dan Gohman contributed several patches to improve linux/x86-64 support. 23. Anton contributed PIC support for linux/x86. 24. Anton contributed support for the GCC regparm attribute, and code in the X86 backend to respect it. 25. Evan added various improvements for the X86-64 JIT, allowing it to generate code in the large code model. 26. LLVM now supports inline asm with multiple constraint letters per operand (like "ri") which is common in X86 inline asms. 27. Andrew contributed early support for X86 inline asm in the C backend. Other Target-Specific Code Generator Enhancements: 28. Lauro and Rafael contributed several improvements to the ARM backend, including basic inline asm support, weak linkage support, static ctor/dtor support and many bug fixes. 29. Evan contributed major enhancements to the ARM backend, including support for ARM v4-v6, vfp support, soft float, pre/postinc support, load/store multiple generation, and constant pool entry motion (to support large functions). 30. Evan contributed support for Thumb code generation (an ARM subtarget). 31. The PowerPC 64 JIT now supports addressing code loaded above the 2G boundary. 32. Nick Lewycky contributed several patches to improve support for the Linux/ppc ABI. 33. Jim contributed many bug fixes for PowerPC 64. Internal Cleanups: 34. Sheng merged the ConstantBool, ConstantIntegral and ConstantInt classes together, we now just have ConstantInt. 35. LLVM no longer relies on static destructors to shut itself down. Instead, it lazily initializes itself and shuts down when llvm_shutdown() is explicitly called. 36. LLVM now has significantly fewer static contructors, reducing startup time. 37. Bill refactored several classes to reduce the amount of code that gets linked into apps that use the JIT. 38. Dan Gohman contributed patches to simplify construction of intrinsic function declarations. Other Changes: 39. Reid contributed the llvm-upgrade tool, which migrates LLVM 1.9 .ll files to LLVM 2.0 syntax. This is the primary upgrade path for files compiled with LLVM 1.x to LLVM 2.x. 40. Reid removed the gccas/gccld tools. They have been replaced with small shell scripts that invoke opt/llvm-ld respectively. These scripts may be removed before LLVM 2.0 is released, so please migrate away from them. This reduces LLVM's install footprint. 41. LLVM has had a lot of performance work, specifically designed to tune datastructure usage. This makes several critical components faster. http://llvm.org/docs/ProgrammersManual.html#datastructure 42. As the community has continued to grow, we found it useful to codify some of the development practices we use for new contributors. If you're interested in our "community architecture", I encourage you to read through the 'LLVM Developer Policy' document: http://llvm.org/docs/DeveloperPolicy.html As usual, there have been a ton of bug fixes and other improvements. LLVM has successfully built a number of large projects like Mozilla, Qt, etc. There have also been a large number of minor codegen improvements - the compiler generates better code than ever before. As you can see, LLVM 2.0 is shaping up to be an amazing release. Many thanks go out to everyone who has contributed to it in both large and small ways. The LLVM community is vibrant and growing! Finally, here is the previous status report, the LLVM 1.9 Release: http://lists.cs.uiuc.edu/pipermail/llvm-announce/2006-November/ 000020.html If you have any questions or comments, please contact the LLVMdev mailing list (llvmdev at cs.uiuc.edu)! -Chris [Less]
Posted over 17 years ago by Chris Lattner
LLVM 1.9 is available now! Download it here: http://llvm.org/ releases/ or view the release here: http://llvm.org/releases/1.9/docs/ ReleaseNotes.html This is a huge new release with many improvements, new features, better codegen, faster ... [More] compiles, and many bugs fixed. One telling feature is that LLVM now correctly builds itself and passes all its regression tests when self-hosted: an impressive feat, considering that it is ~400,000 lines of complex C/C++ code. While LLVM 1.9 stuck to our planned 3-month release cycle, we plan to extend this cycle to 6 months for the 2.0 release. This longer release cycle will allow us to focus on cleaning up LLVM APIs and removing some old backward compatibility code we have maintained since 1.0. As such, we plan for LLVM 2.0 to drop support for some really old .bc and .ll files (LLVM 1.4 and earlier), and LLVM 2.0 will probably drop support for llvm-gcc3. I plan to send out a status update in 3 months to update everyone on the progress of LLVM 2.0. Here are some of the most notable aspects of the LLVM 1.9 Release: Major new Features: 1. Evan contributed a new X86-64 backend. Currently it supports Darwin/x86-64, and other operating systems in -static mode. Support for PIC codegen on other target should be straight-forward to add if someone is interested. 2. Devang contributed liblto, a library which allows a system linker to efficiently and tightly integrate LLVM Link-Time- Optimization: http://llvm.org/docs/LinkTimeOptimization.html 3. Bill and Nate integrated support for SPECCPU2006 into the llvm-test makefile system, which allows it to work with our nightly tester and automatic testcase reduction tools. 4. Reid wrote a new FAQ for the oft-misunderstood getelementptr instruction: http://llvm.org/docs/GetElementPtr.html Mid-Level Optimizer Enhancements: 5. Nick Lewycky contributed a new 'predicate simplifier' pass, which currently performs dominator tree-based optimizations. 6. Owen extended the loop unroll pass to support unrolling of multiple basic block loops. 7. The 'globalopt' pass can now perform the scalar replacement of aggregates transformation on some heap allocations. 8. The globalsmodref-aa alias analysis can now track 'indirect pointer globals' more accurately. 9. The instruction combiner now performs element propagation analysis of vector expressions, eliminating computation of vector elements that are not used. 10. The Loop Closed SSA pass is significantly faster at updating SSA. 11. Several LLVM transformations which had compile time explosions have been fixed. 12. Devang fixed several cases of nondeterministic behavior and tracked down several bugs blocking LLVM from building itself. Target-Independent Code Generator Enhancements: 13. LLVM now includes a late branch folding pass which optimizes code layout, performs several branch optimizations, and deletes unreachable code. 14. Evan contributed common code generator support for targets that support pre/post-increment addressing modes. 15. Jim added support for dynamically-loadable register allocators and schedulers. 16. Evan modified the DAG instruction selector to be iterative instead of recursive, fixing "out of stack space" problems with very large basic blocks when LLVM is compiled with GCC 4.x. 17. LLVM 1.9 includes several improvements to inline asm support, including support for new constraints and modifiers. 18. The register coalescer is now more aggressive than before, allowing it to eliminate more copies. 19. The core SelectionDAG data structures are now much more efficient, which yields faster compiles. 20. Bill sped up PHI elimination and live variables significantly on large functions by eliminating N^2 algorithms. 21. The target-independent switch lowering code now produces better code in several situations for common idioms. 22. Jim added several enhancements to speed up debug info generation and reduce the size of the emitted debug info. Target-specific Enhancements: 23. Anton contributed support for Win32 dllimport/dllexport linkage and stdcall/fastcall calling conventions. 24. Jim contributed support for Darwin/x86 debug information. 25. Reid contributed basic Linux/X86 support for LLVM debug info. 26. Anton contributed basic debug support for Cygwin and MingW when those environments are configured to use DWARF. 27. Anton contributed several patches to improve compatibility with MingW. 28. Evan added code generator support for machine-specific constant pool entries. 29. Rafael enhanced the LLVM ARM backend to support more instructions and the use of a frame pointer. It is now possible to build libgcc and a simple cross compiler, but it is not considered "complete" yet. 30. Nate contributed initial support for a direct Mach-o object file writer, but it is not yet complete. Target Description Enhancements: 31. tblgen now allows definition of 'multiclasses' which can be used to factor instruction patterns more aggressively in .td files. 32. Jim added a new TargetAsmInfo class which captures a variety of information about the target assembly language format. 33. .td files now support "${:foo}" syntax for encoding subtarget- specific assembler syntax into instruction descriptions. Major LLVM IR / API Changes: 34. Reid merged the ConstantUInt and ConstantSInt classes together into a single ConstantInt class. 35. Reid split the 'div' instruction into fdiv/sdiv/udiv operations and 'rem' into frem/srem/urem. We hope that LLVM 2.0 will split all instructions that vary behavior based on the signedness of their operands. See http://llvm.org/PR950 for more details. 36. ConstantBool::True and False have been renamed to ConstantBool::getTrue() and ConstantBool::getFalse(). LLVM Build System Changes: 37. The LLVM library dependency graph is now acyclic, allowing llvm-config to always work. The LLVM build system itself now internally uses llvm-config. 38. Reid updated autoconf/libtool to newer versions. 39. Reid contributed changes to eliminate C++ exception handling use from several libraries. Almost all of LLVM now builds with -fno-exceptions, which shrinks executables significantly. 40. Reid contributed changes to make LLVM -Woverloaded-virtual and -Wunused clean. These are now enabled by default. 41. Jeff Cohen contributed changes to ensure LLVM builds with MSVC++ 7.1 and updated project files to work with it. 42. Jim updated the Xcode project files. Other Changes: 43. Patrick contributed a new mode to bugpoint: -find-bugs. This asks bugpoint to permute pass sequences to try to expose bugs due to pass sequencing. 44. The JIT now supports lazily streaming code from multiple modules at a time, implicitly linking the code as it goes. 45. Bill and Fernando contributed new sections describing the code generator: http://llvm.org/docs/CodeGenerator.html 46. Reid merged the functionality of the 'analyze' tool into the 'opt' tool, cutting LLVM's disk footprint significantly. 47. Domagoj Babic contributed patches to make bugpoint converge faster when reducing programs. 48. LLVM now uses far fewer static constructors than it used to: it now lazily initializes global datastructures and provides an explicit 'teardown' API for releasing the memory associated with them. 49. Devang changed llvm-gcc to obey several GCC optimization options, including -funroll-loops, -fno-unit-at-a-time, -fno-inline-functions, etc. In addition to the new features and infrastructure we have built, we also fixed many minor bugs and made many diverse optimization improvements. LLVM 1.9 is the clearly our best release yet, and upgrading from a previous release is highly recommended. This release wouldn't be possible without the LLVM community building new features, reporting bugs, testing the pre-release bits, and contributing in many other ways. Tanya (our release manager) deserves a lot of credit for this being the smoothest and best release so far! Here is the previous status report, the LLVM 1.8 Release: http://lists.cs.uiuc.edu/pipermail/llvm-announce/2006-August/000019.html If you have any questions or comments, please contact the LLVMdev mailing list (llvmdev at cs.uiuc.edu)! -Chris [Less]
Posted over 17 years ago by Chris Lattner
LLVM 1.9 is available now! Download it here: http://llvm.org/ releases/ or view the release here: http://llvm.org/releases/1.9/docs/ ReleaseNotes.html This is a huge new release with many improvements, new features, better codegen, faster ... [More] compiles, and many bugs fixed. One telling feature is that LLVM now correctly builds itself and passes all its regression tests when self-hosted: an impressive feat, considering that it is ~400,000 lines of complex C/C code. While LLVM 1.9 stuck to our planned 3-month release cycle, we plan to extend this cycle to 6 months for the 2.0 release. This longer release cycle will allow us to focus on cleaning up LLVM APIs and removing some old backward compatibility code we have maintained since 1.0. As such, we plan for LLVM 2.0 to drop support for some really old .bc and .ll files (LLVM 1.4 and earlier), and LLVM 2.0 will probably drop support for llvm-gcc3. I plan to send out a status update in 3 months to update everyone on the progress of LLVM 2.0. Here are some of the most notable aspects of the LLVM 1.9 Release: Major new Features: 1. Evan contributed a new X86-64 backend. Currently it supports Darwin/x86-64, and other operating systems in -static mode. Support for PIC codegen on other target should be straight-forward to add if someone is interested. 2. Devang contributed liblto, a library which allows a system linker to efficiently and tightly integrate LLVM Link-Time- Optimization: http://llvm.org/docs/LinkTimeOptimization.html 3. Bill and Nate integrated support for SPECCPU2006 into the llvm-test makefile system, which allows it to work with our nightly tester and automatic testcase reduction tools. 4. Reid wrote a new FAQ for the oft-misunderstood getelementptr instruction: http://llvm.org/docs/GetElementPtr.html Mid-Level Optimizer Enhancements: 5. Nick Lewycky contributed a new 'predicate simplifier' pass, which currently performs dominator tree-based optimizations. 6. Owen extended the loop unroll pass to support unrolling of multiple basic block loops. 7. The 'globalopt' pass can now perform the scalar replacement of aggregates transformation on some heap allocations. 8. The globalsmodref-aa alias analysis can now track 'indirect pointer globals' more accurately. 9. The instruction combiner now performs element propagation analysis of vector expressions, eliminating computation of vector elements that are not used. 10. The Loop Closed SSA pass is significantly faster at updating SSA. 11. Several LLVM transformations which had compile time explosions have been fixed. 12. Devang fixed several cases of nondeterministic behavior and tracked down several bugs blocking LLVM from building itself. Target-Independent Code Generator Enhancements: 13. LLVM now includes a late branch folding pass which optimizes code layout, performs several branch optimizations, and deletes unreachable code. 14. Evan contributed common code generator support for targets that support pre/post-increment addressing modes. 15. Jim added support for dynamically-loadable register allocators and schedulers. 16. Evan modified the DAG instruction selector to be iterative instead of recursive, fixing "out of stack space" problems with very large basic blocks when LLVM is compiled with GCC 4.x. 17. LLVM 1.9 includes several improvements to inline asm support, including support for new constraints and modifiers. 18. The register coalescer is now more aggressive than before, allowing it to eliminate more copies. 19. The core SelectionDAG data structures are now much more efficient, which yields faster compiles. 20. Bill sped up PHI elimination and live variables significantly on large functions by eliminating N^2 algorithms. 21. The target-independent switch lowering code now produces better code in several situations for common idioms. 22. Jim added several enhancements to speed up debug info generation and reduce the size of the emitted debug info. Target-specific Enhancements: 23. Anton contributed support for Win32 dllimport/dllexport linkage and stdcall/fastcall calling conventions. 24. Jim contributed support for Darwin/x86 debug information. 25. Reid contributed basic Linux/X86 support for LLVM debug info. 26. Anton contributed basic debug support for Cygwin and MingW when those environments are configured to use DWARF. 27. Anton contributed several patches to improve compatibility with MingW. 28. Evan added code generator support for machine-specific constant pool entries. 29. Rafael enhanced the LLVM ARM backend to support more instructions and the use of a frame pointer. It is now possible to build libgcc and a simple cross compiler, but it is not considered "complete" yet. 30. Nate contributed initial support for a direct Mach-o object file writer, but it is not yet complete. Target Description Enhancements: 31. tblgen now allows definition of 'multiclasses' which can be used to factor instruction patterns more aggressively in .td files. 32. Jim added a new TargetAsmInfo class which captures a variety of information about the target assembly language format. 33. .td files now support "${:foo}" syntax for encoding subtarget- specific assembler syntax into instruction descriptions. Major LLVM IR / API Changes: 34. Reid merged the ConstantUInt and ConstantSInt classes together into a single ConstantInt class. 35. Reid split the 'div' instruction into fdiv/sdiv/udiv operations and 'rem' into frem/srem/urem. We hope that LLVM 2.0 will split all instructions that vary behavior based on the signedness of their operands. See http://llvm.org/PR950 for more details. 36. ConstantBool::True and False have been renamed to ConstantBool::getTrue() and ConstantBool::getFalse(). LLVM Build System Changes: 37. The LLVM library dependency graph is now acyclic, allowing llvm-config to always work. The LLVM build system itself now internally uses llvm-config. 38. Reid updated autoconf/libtool to newer versions. 39. Reid contributed changes to eliminate C exception handling use from several libraries. Almost all of LLVM now builds with -fno-exceptions, which shrinks executables significantly. 40. Reid contributed changes to make LLVM -Woverloaded-virtual and -Wunused clean. These are now enabled by default. 41. Jeff Cohen contributed changes to ensure LLVM builds with MSVC 7.1 and updated project files to work with it. 42. Jim updated the Xcode project files. Other Changes: 43. Patrick contributed a new mode to bugpoint: -find-bugs. This asks bugpoint to permute pass sequences to try to expose bugs due to pass sequencing. 44. The JIT now supports lazily streaming code from multiple modules at a time, implicitly linking the code as it goes. 45. Bill and Fernando contributed new sections describing the code generator: http://llvm.org/docs/CodeGenerator.html 46. Reid merged the functionality of the 'analyze' tool into the 'opt' tool, cutting LLVM's disk footprint significantly. 47. Domagoj Babic contributed patches to make bugpoint converge faster when reducing programs. 48. LLVM now uses far fewer static constructors than it used to: it now lazily initializes global datastructures and provides an explicit 'teardown' API for releasing the memory associated with them. 49. Devang changed llvm-gcc to obey several GCC optimization options, including -funroll-loops, -fno-unit-at-a-time, -fno-inline-functions, etc. In addition to the new features and infrastructure we have built, we also fixed many minor bugs and made many diverse optimization improvements. LLVM 1.9 is the clearly our best release yet, and upgrading from a previous release is highly recommended. This release wouldn't be possible without the LLVM community building new features, reporting bugs, testing the pre-release bits, and contributing in many other ways. Tanya (our release manager) deserves a lot of credit for this being the smoothest and best release so far! Here is the previous status report, the LLVM 1.8 Release: http://lists.cs.uiuc.edu/pipermail/llvm-announce/2006-August/000019.html If you have any questions or comments, please contact the LLVMdev mailing list (llvmdev at cs.uiuc.edu)! -Chris [Less]
Posted over 17 years ago by Chris Lattner
LLVM 1.8 is available now! Download it here: http://llvm.org/releases/ Release notes here: http://llvm.org/releases/1.8/docs/ReleaseNotes.html This is a great new release with great new features and lots of refinements (better codegen, faster ... [More] compiles, bugs fixed). One particularly nice feature of this release is that we're back to a regular 3-month release cycle, allowing users to have fresh bits that are well tested. The LLVM community is vibrant and growing: many thanks to all who contributed to this release - in both large and small ways! Here are some of the major new features of LLVM 1.8: High Level Changes: 1. Jim has finished enough support for DWARF debugging information that it is now enabled by default in llvm-gcc4! Currently it is limited to only working with Mac OS (X86 and PowerPC), and only is generated at -O0. The debug info has good support for C with initial C support. We'd welcome help adding support for x86-linux and other targets. 2. Patrick Jenkins built a new centralized LLVM nightly tester (http://llvm.org/nightlytest/). This tester can generate reports and graph data across time, works with tester machines that live behind firewalls, automatically alerts the llvm-testresults list of significant performance regressions and improvements, and will eventually support generation of reports correlating changes in data across machines. 3. Rafael Avila de Espindola has started work on a new LLVM ARM backend. It is still in early stages of development, but is making strong progress. 4. The llvm-config tool is now built by default, is heavily tested (e.g. used by the llvm-gcc4 build), and includes several new enhancements (--libfiles and other new options, allows running from an objdir, allow relocating install dir, captures more info about the build, etc). 5. Reid contributed the llvm2cpp tool which converts LLVM modules into C code that (when executed) creates the module. 6. The "SparcV9" target has been removed, the "Sparc" target introduced in LLVM 1.7 has replaced it. Mid-Level Optimizer Improvements: 7. Owen contributed a new "Loop Closed SSA Pass" and updated various loop optimizers to use/preserve it. LCSSA makes it much easier for loop transformations to update SSA form after making changes to code. 8. As part of the LCSSA work, Owen changed loop-unswitch to be more aggressive: it is now able to unswitch loops with live-out values. 9. The Inliner pass now constant folds and DCE's on the fly, making it faster and making its cost model more accurate. 10. LLVM now includes a new byte-swap intrinsic, which the X86 and PPC code generator use these to emit bswap register/load/store instructions as appropriate. 11. Because llvm-gcc has no byte-swap builtin, the LLVM optimizer recognizes common bswap idioms and automatically changes them to use the intrinsic. 12. llvm-gcc now bootstraps correctly on darwin-x86/ppc, x86-linux and probably others), which exposed several cases where optimizers were nondeterministic. Target Independent Code Generator Improvements: 13. Nate contributed support for lowering switch instructions into jump tables, instead of always lowering them to conditional branch trees. 14. The ExecutionEngine::freeMachineCodeForFunction now actually frees machine code for functions from the JIT code cache, allowing the JIT to be used in long-running environments without running out of space. 15. The register spiller has been improved in several ways to make it produce better optimized spill code. The effect is particularly noticable on X86, but does apply to all targets. 16. The DAG Combiner now tracks sign information through arithmetic operations allowing more aggressive sign extension elimination. 17. The code generator now lowers formal arguments and function calls like any other unsupported operation, simplifying target lowering code. 18. LLVM now includes better support for targets whose ABI handles struct-return functions in unusual ways, e.g. implementing PR729. 19. Many people (particularly Nate, Evan, Owen and I): lots of cleanup and simplification throughout the code generator. 20. Several serious bugs (due to bitrot) in the 'local' (intra-basic-block) register allocator have been fixed, and it is now used by llvm-gcc4 at -O0. 21. Many bugs relating to inline asm support have been fixed, and llvm-gcc4 now supports global and local "asm register" variables. X86 Target Improvements: 22. Evan fixed several bugs in SSE code generation and implemented many performance tweaks. 23. Evan implemented the correct ABI for vector arg/retval passing in SSE registers. 24. Evan made significant improvements to the register-pressure-reducing scheduler, which is used primarily by the x86 target. 25. Jeff Cohen implemented support in the X86 backend for the Microsoft ML assembler ("masm"). 26. The X86 backend now supports most GCC inline asm, the most significant missing piece is support for multiple alternatives (PR839). PowerPC Target Improvements: 27. The PPC backend now includes initial support for 64-bit code generation on Darwin/PPC. There are still some minor known ABI bugs (particularly with struct-return functions) and the JIT only works in limited cases, but many applications work fine in 64-bit mode. 28. The PPC backend now passes vector arguments/retvals in registers according to the Darwin ABI. 29. Nate changed the PPC JIT to generate code using the static relocation model instead of "dynamic-no-pic", since the JIT knows exactly where all globals are located when it is generating code. 30. Nate implemented a new, more aggressive, PPC rlwimi pattern matcher, which allows LLVM to produce much better code for bitfield operations in some cases. Compiler Cleanups, Speedups, and Code Size Reductions: 31. The JIT code emitter (and thus the JIT) is much faster than before (http://llvm.org/PR469). 31. Jim, Evan, and I made several changes to reduce the size and number of relocations needed for code autogenerated by tblgen from the target .td files. 31. Evan made several tblgen changes that significantly reduces the stack usage of the generated instruction selector. This is important when compiling LLVM with gcc 4.x, until GCC PR25505 is fixed. 31. Many small cleanups and a couple of tricky bugs have been fixed due to input from a Coverity run. 32. Many people contributed various fixes to reduce code size for pieces of LLVM. 33. Anton Korobeynikov and Reid made many small changes to build LLVM with the '-pedantic' option. Most of LLVM is now '-pedantic'-clean. The Amazing Miscellaneous Stuff Department: 34. Anton contributed many fixes for mingw and cygwin. llvm-gcc4 now builds on mingw, and a binary version of the front-end available. It is still experimental, as it is missing stdcall and some other support. 35. Nick Lewycky contributed support for bugpoint to debug optimizers that get stuck in an infinite loop, by killing the optimizer after a certain amount of time passes. 36. Reid & Vladimir Prus made several improvements to documentation generated by doxygen, exposing comments previously only visible in the header files into the doxygen output. 37. --version now prints more detailed output, including the version number, build configuration, and vendor information. 38. Andrew added basic inline asm support to the Alpha backend. 39. Several new LLVM-related publications are available at http://llvm.org/pubs/ . In addition to the new features and infrastructure we have built, we have also fixed many minor bugs and have made many small optimization improvements. LLVM 1.8 is the clearly our best release yet, and upgrading from a previous release is highly recommended. Thanks to Tanya for spearheading this release and to those who tested the results, contributed binaries of the front-ends, and those who filed bugs. Each contribution helps make LLVM that much better and that much easier for people to use. Finally, here is the previous status report, the LLVM 1.7 Release: http://lists.cs.uiuc.edu/pipermail/llvm-announce/2006-April/000018.html If you have any questions or comments, please contact the LLVMdev mailing list (llvmdev at cs.uiuc.edu)! -Chris [Less]
Posted over 17 years ago by Chris Lattner
LLVM 1.8 is available now! Download it here: http://llvm.org/releases/ Release notes here: http://llvm.org/releases/1.8/docs/ReleaseNotes.html This is a great new release with great new features and lots of refinements (better codegen, faster ... [More] compiles, bugs fixed). One particularly nice feature of this release is that we're back to a regular 3-month release cycle, allowing users to have fresh bits that are well tested. The LLVM community is vibrant and growing: many thanks to all who contributed to this release - in both large and small ways! Here are some of the major new features of LLVM 1.8: High Level Changes: 1. Jim has finished enough support for DWARF debugging information that it is now enabled by default in llvm-gcc4! Currently it is limited to only working with Mac OS (X86 and PowerPC), and only is generated at -O0. The debug info has good support for C with initial C++ support. We'd welcome help adding support for x86-linux and other targets. 2. Patrick Jenkins built a new centralized LLVM nightly tester (http://llvm.org/nightlytest/). This tester can generate reports and graph data across time, works with tester machines that live behind firewalls, automatically alerts the llvm-testresults list of significant performance regressions and improvements, and will eventually support generation of reports correlating changes in data across machines. 3. Rafael Avila de Espindola has started work on a new LLVM ARM backend. It is still in early stages of development, but is making strong progress. 4. The llvm-config tool is now built by default, is heavily tested (e.g. used by the llvm-gcc4 build), and includes several new enhancements (--libfiles and other new options, allows running from an objdir, allow relocating install dir, captures more info about the build, etc). 5. Reid contributed the llvm2cpp tool which converts LLVM modules into C++ code that (when executed) creates the module. 6. The "SparcV9" target has been removed, the "Sparc" target introduced in LLVM 1.7 has replaced it. Mid-Level Optimizer Improvements: 7. Owen contributed a new "Loop Closed SSA Pass" and updated various loop optimizers to use/preserve it. LCSSA makes it much easier for loop transformations to update SSA form after making changes to code. 8. As part of the LCSSA work, Owen changed loop-unswitch to be more aggressive: it is now able to unswitch loops with live-out values. 9. The Inliner pass now constant folds and DCE's on the fly, making it faster and making its cost model more accurate. 10. LLVM now includes a new byte-swap intrinsic, which the X86 and PPC code generator use these to emit bswap register/load/store instructions as appropriate. 11. Because llvm-gcc has no byte-swap builtin, the LLVM optimizer recognizes common bswap idioms and automatically changes them to use the intrinsic. 12. llvm-gcc now bootstraps correctly on darwin-x86/ppc, x86-linux and probably others), which exposed several cases where optimizers were nondeterministic. Target Independent Code Generator Improvements: 13. Nate contributed support for lowering switch instructions into jump tables, instead of always lowering them to conditional branch trees. 14. The ExecutionEngine::freeMachineCodeForFunction now actually frees machine code for functions from the JIT code cache, allowing the JIT to be used in long-running environments without running out of space. 15. The register spiller has been improved in several ways to make it produce better optimized spill code. The effect is particularly noticable on X86, but does apply to all targets. 16. The DAG Combiner now tracks sign information through arithmetic operations allowing more aggressive sign extension elimination. 17. The code generator now lowers formal arguments and function calls like any other unsupported operation, simplifying target lowering code. 18. LLVM now includes better support for targets whose ABI handles struct-return functions in unusual ways, e.g. implementing PR729. 19. Many people (particularly Nate, Evan, Owen and I): lots of cleanup and simplification throughout the code generator. 20. Several serious bugs (due to bitrot) in the 'local' (intra-basic-block) register allocator have been fixed, and it is now used by llvm-gcc4 at -O0. 21. Many bugs relating to inline asm support have been fixed, and llvm-gcc4 now supports global and local "asm register" variables. X86 Target Improvements: 22. Evan fixed several bugs in SSE code generation and implemented many performance tweaks. 23. Evan implemented the correct ABI for vector arg/retval passing in SSE registers. 24. Evan made significant improvements to the register-pressure-reducing scheduler, which is used primarily by the x86 target. 25. Jeff Cohen implemented support in the X86 backend for the Microsoft ML assembler ("masm"). 26. The X86 backend now supports most GCC inline asm, the most significant missing piece is support for multiple alternatives (PR839). PowerPC Target Improvements: 27. The PPC backend now includes initial support for 64-bit code generation on Darwin/PPC. There are still some minor known ABI bugs (particularly with struct-return functions) and the JIT only works in limited cases, but many applications work fine in 64-bit mode. 28. The PPC backend now passes vector arguments/retvals in registers according to the Darwin ABI. 29. Nate changed the PPC JIT to generate code using the static relocation model instead of "dynamic-no-pic", since the JIT knows exactly where all globals are located when it is generating code. 30. Nate implemented a new, more aggressive, PPC rlwimi pattern matcher, which allows LLVM to produce much better code for bitfield operations in some cases. Compiler Cleanups, Speedups, and Code Size Reductions: 31. The JIT code emitter (and thus the JIT) is much faster than before (http://llvm.org/PR469). 31. Jim, Evan, and I made several changes to reduce the size and number of relocations needed for code autogenerated by tblgen from the target .td files. 31. Evan made several tblgen changes that significantly reduces the stack usage of the generated instruction selector. This is important when compiling LLVM with gcc 4.x, until GCC PR25505 is fixed. 31. Many small cleanups and a couple of tricky bugs have been fixed due to input from a Coverity run. 32. Many people contributed various fixes to reduce code size for pieces of LLVM. 33. Anton Korobeynikov and Reid made many small changes to build LLVM with the '-pedantic' option. Most of LLVM is now '-pedantic'-clean. The Amazing Miscellaneous Stuff Department: 34. Anton contributed many fixes for mingw and cygwin. llvm-gcc4 now builds on mingw, and a binary version of the front-end available. It is still experimental, as it is missing stdcall and some other support. 35. Nick Lewycky contributed support for bugpoint to debug optimizers that get stuck in an infinite loop, by killing the optimizer after a certain amount of time passes. 36. Reid & Vladimir Prus made several improvements to documentation generated by doxygen, exposing comments previously only visible in the header files into the doxygen output. 37. --version now prints more detailed output, including the version number, build configuration, and vendor information. 38. Andrew added basic inline asm support to the Alpha backend. 39. Several new LLVM-related publications are available at http://llvm.org/pubs/ . In addition to the new features and infrastructure we have built, we have also fixed many minor bugs and have made many small optimization improvements. LLVM 1.8 is the clearly our best release yet, and upgrading from a previous release is highly recommended. Thanks to Tanya for spearheading this release and to those who tested the results, contributed binaries of the front-ends, and those who filed bugs. Each contribution helps make LLVM that much better and that much easier for people to use. Finally, here is the previous status report, the LLVM 1.7 Release: http://lists.cs.uiuc.edu/pipermail/llvm-announce/2006-April/000018.html If you have any questions or comments, please contact the LLVMdev mailing list (llvmdev at cs.uiuc.edu)! -Chris [Less]
Posted about 18 years ago by Chris Lattner
LLVM 1.7 is available now! Download it here: http://llvm.org/releases/ Release notes here: http://llvm.org/releases/1.7/docs/ReleaseNotes.html This release is huge! It contains about twice the number of new features as any previous release, and ... [More] includes some big-ticket items that people have been requesting for a long time. In particular, this release contains a completely rewritten llvm-gcc (based on GCC 4.0.1), a brand new SPARC backend, supports GCC-style generic vectors, supports SSE and Altivec intrinsics, support for Objective C/C++, the X86 backend generates much better code and can produce Scalar SSE code, this release has initial DWARF debugging support, includes a new llvm-config utility, has initial support for GCC-style inline assembly, and includes many target-independent code generator and optimizer improvements. The high quality of this release is a direct reflection of a growing number of contibutors in the LLVM community. Traffic on the LLVM developer list has been steadily growing as more people discover the cool things LLVM can do! Here are some of the major new features of LLVM 1.7: Core LLVM IR Improvements: 1. The LLVM IR now has full support for representing target-specific inline assembly code, as general as GCC's inline assembly. 2. Rob Bocchino added new LLVM insertelement and extractelement instructions, for accessing/updating scalar elements of a vector. 3. LLVM now has a new shufflevector instruction, for permuting the elements of a vector. http://llvm.org/docs/LangRef.html#vectorops 4. LLVM now supports first class global ctor/dtor initialization lists, no longer forcing targets to use "__main". 5. LLVM supports assigning globals and functions to a particular section in the result executable. LLVM Intrinsic Improvements: 6. Adding target-specific intrinsics to LLVM is now really easy: entries are added to TableGen (.td) files and necessary support code is generated from it. 7. Reid contributed flexible support for "autoupgrading" intrinsics. This is useful when we decide to change an intrinsic in a new releases of LLVM: .ll and .bc files from old releases get upgraded to the new form. 8. Andrew added support for a new LLVM "readcyclecounter" intrinsic, for accessing low-level target timing interfaces. 9. LLVM now supports llvm.stacksave/llvm.stackrestore intrinsics, for proper C99 Variable Length Array support. 10. Reid changed many intrinsics to have fixed types instead of being overloaded based on type. Mid-Level Analysis and Transformation Improvements: 11. The -loop-unswitch pass has had several bugs fixed, has several new features, and is enabled by default now. 12. Evan improved the loop strength reduction pass to use a parameterized target interface and to take advantage of strided loads on targets that support them (e.g. X86). 13. The -instcombine pass now uses information about whether individual bits are actually used to simplify code. 14. Nate reimplemented post-dominator analysis using the Lengauer and Tarjan algorithm, replacing the old iterative implementation. On one extreme example (PR681) his implementation is 40x faster than the old one and uses 19x less memory. 15. Daniel Berlin contributed an ET-Forest implementation, which replaces the old LLVM DominatorSet with a far more efficient data structure (in both space and time). 16. Andrew wrote a new "reg2mem" which transforms an LLVM function so that there are no SSA values live across basic blocks (useful when prototyping transformations that don't handle SSA 'phi' nodes). 17. The -scalarrepl pass can now promote simple unions to registers. 18. The inliner can now inline functions that have dynamic 'alloca' instructions in them (without increasing stack usage). 19. The -reassociate pass knows how to factor expressions in several ways, e.g. turning (A*A+A*B) into (A*(A+B)) and (X+X+Y+Y) into ((X+Y) << 1) 20. Saem Ghani contributed support to allow different implementations of the abstract callgraph interface, e.g., based on pointer analysis. Debugging Support Improvements: 21. Jim implemented almost complete debugging support in the llvm-gcc 4.0 front-end and the X86/PowerPC Darwin backends. This includes line number information, variable information, function information, frame information etc. This is a huge leap in debug support over previous releases, the only major missing piece is support for debugging optimized code. 22. Jim added support to the C backend for turning line number information into #line directives in the output C file. 23. Jim expanded http://llvm.org/docs/SourceLevelDebugging.html and filled in many details. Target-Independent Code Generator Improvements: 24. Nate contributed the foundation of vector support including instruction selection and tblgen pieces. 25. Evan contributed a new target-independent bottom-up list scheduler. 26. The new list scheduler was enhanced to support top-down scheduling and to support target-specific priority functions and resource conflict detectors. 27. The code generator now supports many simple inline assembly expressions, though there are still cases that are not handled. If you get errors or assertions using inline assembly, please file a bugzilla bug. Inline assembly is not currently supported in the JIT or the C backend. 28. Evan contributed extensive additions to 'tblgen', the code generator generator, providing more expressive .td files. 29. Nate integrated switch statement lowering directly into the SelectionDAG machinery, eliminating dependence on the lower-switch pass to reduce them to branches. In the process, he improved the algorithm to avoid emiting some dead comparisons. 30. Evan significantly improved SelectionDAG support for chain and flag handling, and added support for describing these nodes in .td files. 31. Nate contributed a framework and implementation for simplifying code based on whether computed bits are demanded or not, which works well on bitfield manipulations and other bit-twiddling code, particularly for removing unneeded sign extensions. 32. Evan added support for adding per-instruction predicates that enable/disable specific instructions. This is used to disable instructions that are not supported by specific subtargets, etc. 33. LLC has a new -fast option, instructing it to generate code quickly instead of optimizing the generated code. 34. There are many compile-time speedups in the code generator. 35. The target-independent AsmPrinter module has many new features, such as support for emitting ".asciz" instead of ".ascii" when possible, support for .zerofill, support for targets that accept quoted labels, etc, and it reduces the amount of target-specific code that needs to be written. 36. Nate added support for byte-swap and bit rotate nodes. 37. The legalizer pass is now non-iterative (==faster), simpler, and several nasty libcall insertion bugs are now fixed. 38. The register spiller is better at optimizing generated spill code. 39. Evan modified the instruction selector generator to produce code that doesn't run out of stack space when compiled with GCC 4.x. 40. Evan added support for lowering memset/memcpy with small fixed sizes into discrete load and store instructions. 41. LLVM can now inline the copysign C99/FORTRAN functions. X86-Specific Code Generator Improvements: 42. Evan added a new DAG-DAG instruction selector for X86, replacing the 'pattern' selector. 43. Evan added Scalar SSE support, which provides significantly better performance than the LLVM FP stack code. 44. Evan added a register-pressure reducing scheduler priority function, which is now used by default on X86. 45. Evan added support for -fpic and -static codegen on Darwin. 46. Evan added initial support for subtargets in the X86 backend, including a broad range of -mcpu=* values. 47. Evan improved the loop strength reduction pass on X86, and it is now enabled by default on X86. 48. Evan added support for generation of SSE3 instructions (e.g. fisttp) on subtargets that support it. PowerPC-Specific Code Generator Improvements: 49. The PowerPC backend now includes full support for the Altivec instruction set, accessible with the GCC generic vector extension and the altivec.h intrinsics (llvmgcc4 only), including support for -faltivec and -maltivec. 50. Nate greatly simplified the PowerPC branch selector, making it more aggressive and removing support code from the target-independent code in the process. 51. The PowerPC backend now supports -static and -fpic codegen on Darwin. 52. Many improvements in the generated code. IA64-Specific Code Generator Improvements: 53. Duraid transitioned the code generator to the new DAG-to-DAG isel framework, which is more reliable and produces better code. 54. The Itanium backend now has a bundling pass, which improves performance by ~10% and reduces code size. Bundling can be improved in the future by implementing a hazard recognizer for the scheduler to build better bundles. 55. LLVM has been built with the HP aCC compiler and stdcxx, the Apache C++ Standard Library (see http://incubator.apache.org/stdcxx/ ). While building with compilers other than g++ is not supported, doing so should now be more straight-forward. Alpha-specific Code Generator Improvements: 56. Andrew rewrote the alpha instruction selector to use the new DAG-to-DAG instruction selection framework. 57. Andrew fixed several bugs handling weak and linkonce linkage. SPARC-Specific Code Generator Improvements: 58. LLVM 1.7 includes a completely rewritten SPARC backend. This backend has several advantages over the previous LLVM SPARC backend, and will replace it entirely in LLVM 1.8. This backend is only about 3700 lines of code (making it a good reference for new targets), supports Sparc V8 and V9 instructions, and produces code that is slightly better than GCC on SPEC2000. For more details see: http://lists.cs.uiuc.edu/pipermail/llvmdev/2006-February/005228.html llvm-gcc 4.0: 59. llvm-gcc4 is a new C/C++/ObjC/ObjC++ front-end, rewritten from scratch, based on GCC 4.0.1. This front-end is currently only supported on Mac OS/X PowerPC and Intel systems, but we hope to extend support to the other LLVM-supported systems in the future. 60. Supports for the GCC "section", "used" and "align" attributes. 61. Full support for the GCC generic vector extension. 62. Full support for PowerPC/Altivec and IA32/SSE intrinsics. 63. Full support for GCC inline assembly (note that there are currently some limitations in the code generator though). 64. Full support for C99 Variable Length Arrays. 65. llvm-gcc 4.0 fixes a broad range of long term bugs that have afflicted llvm-gcc3 in areas such as ABI compliance, union layout, and bitfield handling. There are currently 30 bugs dependent on http://llvm.org/PR498 . Other Improvements: 66. The primary LLVM domain name is now http://llvm.org/ . 67. Web form registration is no longer required to download LLVM releases. 68. Eric Kidd contributed the llvm-config utility, to make it easier to build and link programs against the LLVM libraries: http://llvm.org/docs/CommandGuide/html/llvm-config.html 69. All LLVM builds now default to having assertions enabled (even release builds). To disable them, use 'make DISABLE_ASSERTIONS=1'. 70. Builds from official LLVM releases (such as LLVM 1.7) now default to building Release binaries instead of Debug binaries. 71. Saem Ghani extended the PostOrderIterator class to permit external storage. 72. The nightly tester output now color codes performance deltas to make it easier to read at a glance. 73. Reid added support for multiple -rpath options to the linker. 74. Reid finished consolidating the host specific code into the libsystem library. 75. Reid removed use of fork() from bugpoint, allowing it to work on Win32 systems. 76. Andrew improved bugpoint's handling of dynamically loaded optimization plugins. 77. Morten contributed patches for better support of Visual C++ 2005. In addition to the new features and infrastructure we have built, we have also fixed many minor bugs and have made many small optimization improvements. LLVM 1.7 is the clearly our best release yet, and upgrading from a previous release is highly recommended. Finally, Tanya deserves many thanks for spearheading this release and making it happen. If not for her, the release might have been several months later. :) Further, she is planning to ensure that future releases happen in a more timely manner than this one. We'd like to get a new LLVM release out every 3-4 months instead of every 6 months. As usual, if you have any questions or comments about LLVM or any of the features in this status update, please feel free to contact the LLVMdev mailing list (llvmdev at cs.uiuc.edu)! Finally, here is the previous status report, the LLVM 1.6 announcement: http://lists.cs.uiuc.edu/pipermail/llvm-announce/2005-November/000017.html -Chris [Less]
Posted about 18 years ago by Chris Lattner
LLVM 1.7 is available now! Download it here: http://llvm.org/releases/ Release notes here: http://llvm.org/releases/1.7/docs/ReleaseNotes.html This release is huge! It contains about twice the number of new features as any previous release, and ... [More] includes some big-ticket items that people have been requesting for a long time. In particular, this release contains a completely rewritten llvm-gcc (based on GCC 4.0.1), a brand new SPARC backend, supports GCC-style generic vectors, supports SSE and Altivec intrinsics, support for Objective C/C , the X86 backend generates much better code and can produce Scalar SSE code, this release has initial DWARF debugging support, includes a new llvm-config utility, has initial support for GCC-style inline assembly, and includes many target-independent code generator and optimizer improvements. The high quality of this release is a direct reflection of a growing number of contibutors in the LLVM community. Traffic on the LLVM developer list has been steadily growing as more people discover the cool things LLVM can do! Here are some of the major new features of LLVM 1.7: Core LLVM IR Improvements: 1. The LLVM IR now has full support for representing target-specific inline assembly code, as general as GCC's inline assembly. 2. Rob Bocchino added new LLVM insertelement and extractelement instructions, for accessing/updating scalar elements of a vector. 3. LLVM now has a new shufflevector instruction, for permuting the elements of a vector. http://llvm.org/docs/LangRef.html#vectorops 4. LLVM now supports first class global ctor/dtor initialization lists, no longer forcing targets to use "__main". 5. LLVM supports assigning globals and functions to a particular section in the result executable. LLVM Intrinsic Improvements: 6. Adding target-specific intrinsics to LLVM is now really easy: entries are added to TableGen (.td) files and necessary support code is generated from it. 7. Reid contributed flexible support for "autoupgrading" intrinsics. This is useful when we decide to change an intrinsic in a new releases of LLVM: .ll and .bc files from old releases get upgraded to the new form. 8. Andrew added support for a new LLVM "readcyclecounter" intrinsic, for accessing low-level target timing interfaces. 9. LLVM now supports llvm.stacksave/llvm.stackrestore intrinsics, for proper C99 Variable Length Array support. 10. Reid changed many intrinsics to have fixed types instead of being overloaded based on type. Mid-Level Analysis and Transformation Improvements: 11. The -loop-unswitch pass has had several bugs fixed, has several new features, and is enabled by default now. 12. Evan improved the loop strength reduction pass to use a parameterized target interface and to take advantage of strided loads on targets that support them (e.g. X86). 13. The -instcombine pass now uses information about whether individual bits are actually used to simplify code. 14. Nate reimplemented post-dominator analysis using the Lengauer and Tarjan algorithm, replacing the old iterative implementation. On one extreme example (PR681) his implementation is 40x faster than the old one and uses 19x less memory. 15. Daniel Berlin contributed an ET-Forest implementation, which replaces the old LLVM DominatorSet with a far more efficient data structure (in both space and time). 16. Andrew wrote a new "reg2mem" which transforms an LLVM function so that there are no SSA values live across basic blocks (useful when prototyping transformations that don't handle SSA 'phi' nodes). 17. The -scalarrepl pass can now promote simple unions to registers. 18. The inliner can now inline functions that have dynamic 'alloca' instructions in them (without increasing stack usage). 19. The -reassociate pass knows how to factor expressions in several ways, e.g. turning (A*A A*B) into (A*(A B)) and (X X Y Y) into ((X Y) << 1) 20. Saem Ghani contributed support to allow different implementations of the abstract callgraph interface, e.g., based on pointer analysis. Debugging Support Improvements: 21. Jim implemented almost complete debugging support in the llvm-gcc 4.0 front-end and the X86/PowerPC Darwin backends. This includes line number information, variable information, function information, frame information etc. This is a huge leap in debug support over previous releases, the only major missing piece is support for debugging optimized code. 22. Jim added support to the C backend for turning line number information into #line directives in the output C file. 23. Jim expanded http://llvm.org/docs/SourceLevelDebugging.html and filled in many details. Target-Independent Code Generator Improvements: 24. Nate contributed the foundation of vector support including instruction selection and tblgen pieces. 25. Evan contributed a new target-independent bottom-up list scheduler. 26. The new list scheduler was enhanced to support top-down scheduling and to support target-specific priority functions and resource conflict detectors. 27. The code generator now supports many simple inline assembly expressions, though there are still cases that are not handled. If you get errors or assertions using inline assembly, please file a bugzilla bug. Inline assembly is not currently supported in the JIT or the C backend. 28. Evan contributed extensive additions to 'tblgen', the code generator generator, providing more expressive .td files. 29. Nate integrated switch statement lowering directly into the SelectionDAG machinery, eliminating dependence on the lower-switch pass to reduce them to branches. In the process, he improved the algorithm to avoid emiting some dead comparisons. 30. Evan significantly improved SelectionDAG support for chain and flag handling, and added support for describing these nodes in .td files. 31. Nate contributed a framework and implementation for simplifying code based on whether computed bits are demanded or not, which works well on bitfield manipulations and other bit-twiddling code, particularly for removing unneeded sign extensions. 32. Evan added support for adding per-instruction predicates that enable/disable specific instructions. This is used to disable instructions that are not supported by specific subtargets, etc. 33. LLC has a new -fast option, instructing it to generate code quickly instead of optimizing the generated code. 34. There are many compile-time speedups in the code generator. 35. The target-independent AsmPrinter module has many new features, such as support for emitting ".asciz" instead of ".ascii" when possible, support for .zerofill, support for targets that accept quoted labels, etc, and it reduces the amount of target-specific code that needs to be written. 36. Nate added support for byte-swap and bit rotate nodes. 37. The legalizer pass is now non-iterative (==faster), simpler, and several nasty libcall insertion bugs are now fixed. 38. The register spiller is better at optimizing generated spill code. 39. Evan modified the instruction selector generator to produce code that doesn't run out of stack space when compiled with GCC 4.x. 40. Evan added support for lowering memset/memcpy with small fixed sizes into discrete load and store instructions. 41. LLVM can now inline the copysign C99/FORTRAN functions. X86-Specific Code Generator Improvements: 42. Evan added a new DAG-DAG instruction selector for X86, replacing the 'pattern' selector. 43. Evan added Scalar SSE support, which provides significantly better performance than the LLVM FP stack code. 44. Evan added a register-pressure reducing scheduler priority function, which is now used by default on X86. 45. Evan added support for -fpic and -static codegen on Darwin. 46. Evan added initial support for subtargets in the X86 backend, including a broad range of -mcpu=* values. 47. Evan improved the loop strength reduction pass on X86, and it is now enabled by default on X86. 48. Evan added support for generation of SSE3 instructions (e.g. fisttp) on subtargets that support it. PowerPC-Specific Code Generator Improvements: 49. The PowerPC backend now includes full support for the Altivec instruction set, accessible with the GCC generic vector extension and the altivec.h intrinsics (llvmgcc4 only), including support for -faltivec and -maltivec. 50. Nate greatly simplified the PowerPC branch selector, making it more aggressive and removing support code from the target-independent code in the process. 51. The PowerPC backend now supports -static and -fpic codegen on Darwin. 52. Many improvements in the generated code. IA64-Specific Code Generator Improvements: 53. Duraid transitioned the code generator to the new DAG-to-DAG isel framework, which is more reliable and produces better code. 54. The Itanium backend now has a bundling pass, which improves performance by ~10% and reduces code size. Bundling can be improved in the future by implementing a hazard recognizer for the scheduler to build better bundles. 55. LLVM has been built with the HP aCC compiler and stdcxx, the Apache C Standard Library (see http://incubator.apache.org/stdcxx/ ). While building with compilers other than g is not supported, doing so should now be more straight-forward. Alpha-specific Code Generator Improvements: 56. Andrew rewrote the alpha instruction selector to use the new DAG-to-DAG instruction selection framework. 57. Andrew fixed several bugs handling weak and linkonce linkage. SPARC-Specific Code Generator Improvements: 58. LLVM 1.7 includes a completely rewritten SPARC backend. This backend has several advantages over the previous LLVM SPARC backend, and will replace it entirely in LLVM 1.8. This backend is only about 3700 lines of code (making it a good reference for new targets), supports Sparc V8 and V9 instructions, and produces code that is slightly better than GCC on SPEC2000. For more details see: http://lists.cs.uiuc.edu/pipermail/llvmdev/2006-February/005228.html llvm-gcc 4.0: 59. llvm-gcc4 is a new C/C /ObjC/ObjC front-end, rewritten from scratch, based on GCC 4.0.1. This front-end is currently only supported on Mac OS/X PowerPC and Intel systems, but we hope to extend support to the other LLVM-supported systems in the future. 60. Supports for the GCC "section", "used" and "align" attributes. 61. Full support for the GCC generic vector extension. 62. Full support for PowerPC/Altivec and IA32/SSE intrinsics. 63. Full support for GCC inline assembly (note that there are currently some limitations in the code generator though). 64. Full support for C99 Variable Length Arrays. 65. llvm-gcc 4.0 fixes a broad range of long term bugs that have afflicted llvm-gcc3 in areas such as ABI compliance, union layout, and bitfield handling. There are currently 30 bugs dependent on http://llvm.org/PR498 . Other Improvements: 66. The primary LLVM domain name is now http://llvm.org/ . 67. Web form registration is no longer required to download LLVM releases. 68. Eric Kidd contributed the llvm-config utility, to make it easier to build and link programs against the LLVM libraries: http://llvm.org/docs/CommandGuide/html/llvm-config.html 69. All LLVM builds now default to having assertions enabled (even release builds). To disable them, use 'make DISABLE_ASSERTIONS=1'. 70. Builds from official LLVM releases (such as LLVM 1.7) now default to building Release binaries instead of Debug binaries. 71. Saem Ghani extended the PostOrderIterator class to permit external storage. 72. The nightly tester output now color codes performance deltas to make it easier to read at a glance. 73. Reid added support for multiple -rpath options to the linker. 74. Reid finished consolidating the host specific code into the libsystem library. 75. Reid removed use of fork() from bugpoint, allowing it to work on Win32 systems. 76. Andrew improved bugpoint's handling of dynamically loaded optimization plugins. 77. Morten contributed patches for better support of Visual C 2005. In addition to the new features and infrastructure we have built, we have also fixed many minor bugs and have made many small optimization improvements. LLVM 1.7 is the clearly our best release yet, and upgrading from a previous release is highly recommended. Finally, Tanya deserves many thanks for spearheading this release and making it happen. If not for her, the release might have been several months later. :) Further, she is planning to ensure that future releases happen in a more timely manner than this one. We'd like to get a new LLVM release out every 3-4 months instead of every 6 months. As usual, if you have any questions or comments about LLVM or any of the features in this status update, please feel free to contact the LLVMdev mailing list (llvmdev at cs.uiuc.edu)! Finally, here is the previous status report, the LLVM 1.6 announcement: http://lists.cs.uiuc.edu/pipermail/llvm-announce/2005-November/000017.html -Chris [Less]
Posted over 18 years ago by Chris Lattner
Hi Everyone, LLVM 1.6 is out! Get it here: http://llvm.org/releases/ or read about it here: http://llvm.org/releases/1.6/docs/ReleaseNotes.html#whatsnew This release is the culmination of a ton of great work by many people in the LLVM community. ... [More] This release cycle has been much longer than any previous release cycle, and reflects that in its content. However, because we think that 3-4 months between releases is ideal, we are aiming for more frequent releases in the future. The main focus of this release has been improving the code generator: we now generate better code, it is now easier to write an LLVM target, and several of the individual targets are more sophisticated. Another major feature of this release is increased maturity of the PowerPC backend and darwin port. Finally, an exciting aspect of the project is that more and more people are using LLVM for a variety of purposes. One of the most visible uses is for academic research projects: groups from across the globe are using LLVM to host their work: http://llvm.org/pubs/ . With 1.6 behind us, work is now starting on LLVM 1.7: we already have several great new features in the works. Stay tuned! Here is more detail on the highlights of the LLVM 1.6 release: Major New Features: 1. Reid added guards to the JIT, enabling it to JIT multithreaded code (on systems with pthreads). Threads support can be disabled by configuring LLVM with the --disable-threads switch. 2. LLVM includes a new optimization to statically evaluate C++ static variable constructors when they are simple enough. For example, it can now statically initialize "struct X { int a; X() : a(4) {} } g;". 3. The Loop Strength Reduction pass is completely rewritten, far more aggressive and enabled by default on most RISC targets. On PPC, we find that it often speeds up programs from 10-40% depending on the program. 4. LLVM now includes support for auto-generating large portions of the instruction selectors from target descriptions. This allows us to write patterns in the target .td file, instead of writing lots of nasty C++ code. Most of the PowerPC instruction selector is now generated from the PowerPC target description files and other targets are adding support that will be live for LLVM 1.7. 5. Andrew has dramatically improved the LLVM Alpha backend to the point where it is now considered fully functional and off the 'beta' list. Major Code Generator Changes: 6. Nate wrote a new component for the backend, a DAG Combiner. This allows the backend to take advantage of identities and do low-level peephole-style optimizations on the DAG. 7. Nate added support for a new TargetSubtarget interface, which determines which parts of the target to enable based on the target-triple (e.g., whether to use GAS or Intel asm printers on X86). 8. Jim Laskey extended sub-target support to include -mcpu and -mattr, allowing the target to think about what to do when particular features are enabled, but allowing the end-user to think about what CPU they have. 9. Jim also contributed a new light-weight instruction scheduler, available to targets that use DAG-to-DAG instruction selectors. In this release, the scheduler is fully operational but needs tuning, so it is not enabled by default. 10. The instruction selector framework now supports DAG-to-DAG instruction selection, where the instruction selector does pattern matching but no code emission (necessary for scheduling & .td file autogeneration). Other Code Generator Changes: 11. Duraid contributed many small improvements to the Itanium backend, and is actively moving it to the new isel framework. 12. Andrew Lenharth contributed a major change to the varargs support, allowing LLVM to work with targets whose va_list type is a struct. 13. The instruction selection framework that debuted in LLVM 1.5 is far more mature/robust and knows about many more strange target features. 14. Andrew added initial JIT support to the Alpha backend, which can run some simple programs. It is not fully complete yet, though. 15. Jim Laskey contributed patches to improve the instruction selection in the PowerPC backend, matching more RLWIMI cases, for example. 16. Nate implemented most of the PowerPC DAG-to-DAG instruction selector. 17. The tblgen tool & code generator now have more assertions and checking, which catch errors early, making it easier to work on the backend. 18. The default register allocator is now far faster on some testcases, particularly on targets with a large number of registers (e.g. IA64 and PPC). 19. Jim extended tblgen to allow description of subtarget features in the .td files for the target. 20. There have been several minor improvements to the register allocator to coalesce more aggressively and coalesce spill code with copies more effectively. Miscellaneous Improvements: 21. Andrew added support to the JIT to built a Global Offset Table if needed by a target. 22. Alexander Friedman improved the .ll file parser to be able to read from a text buffer in addition to a file. 23. Bryan Turner tried LLVM with Quest, a random testcase generator, and exposed several bugs (which are now fixed). 24. The llvm-test suite can now use the NAG Fortran to C compiler to compile SPEC FP programs, if available (allowing us to test all of SPEC'95 & 2K). 25. The JIT-debugger mode of bugpoint is now much faster than before. 26. When bugpoint is grinding away and the user hits ctrl-C, it now gracefully stops and gives what it has reduced so far (instead of giving up completely). 27. LLVM now includes Xcode project files. 28. Jim Laskey added bitvector support to the command line option parsing library. See http://llvm.org/docs/CommandLine.html#bits 29. We no longer build two versions of most LLVM libraries, which reduces the time required to build LLVM. 30. Documentation for the code generator is improving, though it is still incomplete: http://llvm.org/docs/CodeGenerator.html 31. The code produced when exception handling is enabled is far more efficient in some cases, particularly on Mac OS/X. 32. LLVM should build faster than before: it only links each library in one configuration (instead of two), and some old code has been removed. Portability Improvements: 33. Nate added support for Mac OS/X on Intel. 34. X86 tail calls now work with the JIT and Jeff Cohen added code to support them under Visual C++. 35. Nate contributed a patch to allow LLVM to build with GCC 4.x, and Reid contributed several cleanup patches to silence GCC 4 warnings. 36. The llvm-test suite is now fully compatible with Mac OS/X (non-portabilities in the programs have been fixed). 37. Jeff Cohen contributed portability fixes to build on AMD64. 38. Jeff and Reid improved the Visual C++ build to not require any GNU utilities like flex, bison, or sed. In addition to the new features and infrastructure we have built, we have also fixed many minor bugs in the C/C++ front-end, optimizers, and code generator including 63 bugzilla bugs (search for target milestone = 1.6). LLVM 1.6 is by far the best release we've had yet! Also, special thanks to John, Bill and Tanya for organizing the 1.6 release process and testing the prerelease tarballs! As usual, if you have any questions or comments about LLVM or any of the features in this status update, please feel free to contact the LLVMdev mailing list (llvmdev at cs.uiuc.edu)! Finally, here is the previous status report, the LLVM 1.5 announcement: http://lists.cs.uiuc.edu/pipermail/llvm-announce/2005-May/000016.html -Chris [Less]
Posted over 18 years ago by Chris Lattner
Hi Everyone, LLVM 1.6 is out! Get it here: http://llvm.org/releases/ or read about it here: http://llvm.org/releases/1.6/docs/ReleaseNotes.html#whatsnew This release is the culmination of a ton of great work by many people in the LLVM community. ... [More] This release cycle has been much longer than any previous release cycle, and reflects that in its content. However, because we think that 3-4 months between releases is ideal, we are aiming for more frequent releases in the future. The main focus of this release has been improving the code generator: we now generate better code, it is now easier to write an LLVM target, and several of the individual targets are more sophisticated. Another major feature of this release is increased maturity of the PowerPC backend and darwin port. Finally, an exciting aspect of the project is that more and more people are using LLVM for a variety of purposes. One of the most visible uses is for academic research projects: groups from across the globe are using LLVM to host their work: http://llvm.org/pubs/ . With 1.6 behind us, work is now starting on LLVM 1.7: we already have several great new features in the works. Stay tuned! Here is more detail on the highlights of the LLVM 1.6 release: Major New Features: 1. Reid added guards to the JIT, enabling it to JIT multithreaded code (on systems with pthreads). Threads support can be disabled by configuring LLVM with the --disable-threads switch. 2. LLVM includes a new optimization to statically evaluate C static variable constructors when they are simple enough. For example, it can now statically initialize "struct X { int a; X() : a(4) {} } g;". 3. The Loop Strength Reduction pass is completely rewritten, far more aggressive and enabled by default on most RISC targets. On PPC, we find that it often speeds up programs from 10-40% depending on the program. 4. LLVM now includes support for auto-generating large portions of the instruction selectors from target descriptions. This allows us to write patterns in the target .td file, instead of writing lots of nasty C code. Most of the PowerPC instruction selector is now generated from the PowerPC target description files and other targets are adding support that will be live for LLVM 1.7. 5. Andrew has dramatically improved the LLVM Alpha backend to the point where it is now considered fully functional and off the 'beta' list. Major Code Generator Changes: 6. Nate wrote a new component for the backend, a DAG Combiner. This allows the backend to take advantage of identities and do low-level peephole-style optimizations on the DAG. 7. Nate added support for a new TargetSubtarget interface, which determines which parts of the target to enable based on the target-triple (e.g., whether to use GAS or Intel asm printers on X86). 8. Jim Laskey extended sub-target support to include -mcpu and -mattr, allowing the target to think about what to do when particular features are enabled, but allowing the end-user to think about what CPU they have. 9. Jim also contributed a new light-weight instruction scheduler, available to targets that use DAG-to-DAG instruction selectors. In this release, the scheduler is fully operational but needs tuning, so it is not enabled by default. 10. The instruction selector framework now supports DAG-to-DAG instruction selection, where the instruction selector does pattern matching but no code emission (necessary for scheduling & .td file autogeneration). Other Code Generator Changes: 11. Duraid contributed many small improvements to the Itanium backend, and is actively moving it to the new isel framework. 12. Andrew Lenharth contributed a major change to the varargs support, allowing LLVM to work with targets whose va_list type is a struct. 13. The instruction selection framework that debuted in LLVM 1.5 is far more mature/robust and knows about many more strange target features. 14. Andrew added initial JIT support to the Alpha backend, which can run some simple programs. It is not fully complete yet, though. 15. Jim Laskey contributed patches to improve the instruction selection in the PowerPC backend, matching more RLWIMI cases, for example. 16. Nate implemented most of the PowerPC DAG-to-DAG instruction selector. 17. The tblgen tool & code generator now have more assertions and checking, which catch errors early, making it easier to work on the backend. 18. The default register allocator is now far faster on some testcases, particularly on targets with a large number of registers (e.g. IA64 and PPC). 19. Jim extended tblgen to allow description of subtarget features in the .td files for the target. 20. There have been several minor improvements to the register allocator to coalesce more aggressively and coalesce spill code with copies more effectively. Miscellaneous Improvements: 21. Andrew added support to the JIT to built a Global Offset Table if needed by a target. 22. Alexander Friedman improved the .ll file parser to be able to read from a text buffer in addition to a file. 23. Bryan Turner tried LLVM with Quest, a random testcase generator, and exposed several bugs (which are now fixed). 24. The llvm-test suite can now use the NAG Fortran to C compiler to compile SPEC FP programs, if available (allowing us to test all of SPEC'95 & 2K). 25. The JIT-debugger mode of bugpoint is now much faster than before. 26. When bugpoint is grinding away and the user hits ctrl-C, it now gracefully stops and gives what it has reduced so far (instead of giving up completely). 27. LLVM now includes Xcode project files. 28. Jim Laskey added bitvector support to the command line option parsing library. See http://llvm.org/docs/CommandLine.html#bits 29. We no longer build two versions of most LLVM libraries, which reduces the time required to build LLVM. 30. Documentation for the code generator is improving, though it is still incomplete: http://llvm.org/docs/CodeGenerator.html 31. The code produced when exception handling is enabled is far more efficient in some cases, particularly on Mac OS/X. 32. LLVM should build faster than before: it only links each library in one configuration (instead of two), and some old code has been removed. Portability Improvements: 33. Nate added support for Mac OS/X on Intel. 34. X86 tail calls now work with the JIT and Jeff Cohen added code to support them under Visual C . 35. Nate contributed a patch to allow LLVM to build with GCC 4.x, and Reid contributed several cleanup patches to silence GCC 4 warnings. 36. The llvm-test suite is now fully compatible with Mac OS/X (non-portabilities in the programs have been fixed). 37. Jeff Cohen contributed portability fixes to build on AMD64. 38. Jeff and Reid improved the Visual C build to not require any GNU utilities like flex, bison, or sed. In addition to the new features and infrastructure we have built, we have also fixed many minor bugs in the C/C front-end, optimizers, and code generator including 63 bugzilla bugs (search for target milestone = 1.6). LLVM 1.6 is by far the best release we've had yet! Also, special thanks to John, Bill and Tanya for organizing the 1.6 release process and testing the prerelease tarballs! As usual, if you have any questions or comments about LLVM or any of the features in this status update, please feel free to contact the LLVMdev mailing list (llvmdev at cs.uiuc.edu)! Finally, here is the previous status report, the LLVM 1.5 announcement: http://lists.cs.uiuc.edu/pipermail/llvm-announce/2005-May/000016.html -Chris [Less]
Posted almost 19 years ago by Chris Lattner
The LLVM 1.5 is out! Get it here: http://llvm.cs.uiuc.edu/releases/ or read about it here: http://llvm.cs.uiuc.edu/releases/1.5/docs/ReleaseNotes.html#whatsnew This release adds several new major features to the LLVM compiler, allows it to be ... [More] used in domains where it couldn't before (e.g. for functional languages), supports new targets, generates faster code, and is much easier to port to a new target than before. Here are some of the biggest changes since the last status update (which also includes new features from 1.4). You can read the previous status update here: http://mail.cs.uiuc.edu/pipermail/llvm-announce/2005-February/000015.html High-Level Changes: 1. Duraid contributed a shiny new IA-64 backend (still beta). 2. Andrew has fixed many bugs in the Alpha backend, it it is making a lot of progress. 3. The new instruction selection framework is complete and in heavy use. Many extensions are still possible, but the basic functionality works well. 4. LLVM now supports per-function calling conventions, allowing us to support targets with multiple cc's (e.g. fastcall/stdcall on X86), and convention changing compiler flags (e.g. GCC's -mregparm). 5. LLVM now supports proper tail calls, as required to implement functional languages (such as Scheme and Haskell) efficiently. For more information, see: http://llvm.cs.uiuc.edu/releases/1.5/docs/ReleaseNotes.html#tailcalls 6. Misha updated the llvm-tv (LLVM Transformation Visualizer) project to work with LLVM CVS. 7. The LLVM_LIB_SEARCH_PATH environment still works, but should not be needed for most people now. llvm-gcc now always includes the libraries in /lib. Optimization Changes: 8. Reid has started a new -simplify-libcalls pass to optimize standard library function calls (e.g. it turns strcat(P, "foo") into memcpy(P+strlen(P), "foo", 4) and has implemented many transforms. 9. The globalsmodref alias analysis generates more precise results. 10. Several bugs in the andersensaa and steensaa passes were fixed, and their alias and mod/ref precision has improved. 11. The optimizer now eliminates simple cases where redundant conditions exist between neighboring blocks. 12. The -prune-eh pass now detects no-return functions in addition to the no-unwind functions it did before. Code Generator Changes: 13. The code generator now tracks function live-in registers explicitly, instead of requiring the target to generate 'implicit defs' at the entry to a function. 14. Nate implemented the integer division by a constant strength reduction algorithm that uses multiplication by a magic constant. 15. Duraid implemented the multiplication by a constant strength reduction algorithm that emits sequences of shift/adds. 16. tblgen now allows lazy resolution of variables, making it easier to write more expressive and compact .td files in some cases. 17. The code generator now compiles fabs/fneg to assembly instructions when possible. 18. Morton Ofstad contributed generic codegen support and X86 backend support for sin/cos/sqrt. 19. Andrew contributed initial patches to track the LLVM pointer that SelectionDAG nodes point to, allowing the code generator to use LLVM alias analysis info (it does not currently use it though). Target Changes: 20. Nate wrote a new PowerPC instruction selector using the new SelectionDAG framework. 21. Nate added several optimizations to the PPC backend, including support for generating FMA instructions and using recording ("dot") forms of various PPC instructions. 22. The X86 backend uses a new SelectionDAG-based instruction selector. 23. The X86 codegen attempts to order code to reduce register pressure. However, the current implementation still has several deficiencies. 24. The C backend should no longer produce code that crashes ICC 8.1. Other Changes: 25. Reid and Andrew enhanced the LLVM configure script to support an --enable-targets= flag which permits building a subset of the targets (instead of all of them all the time). 26. Jeff continued working on the Visual C++ build scripts and portability to native Win32. Most LLVM tools work natively in win32 now, but there is no native C/C++ front-end support yet (must use cygwin). 27. Adam Treat contributed patches to the LLVM linker to handle programs containing combinations of native and bytecode libraries much better. 28. Adam Treat contributed patches to the LLVM linker, allowing it to build shared libraries with 'llvm-gcc -shared' and -Wl,-native or -Wl,-native-cbe. 29. The llvm-test suite works much better on FreeBSD and Darwin. 30. Nightly tester output is now archived on the llvm-testresults mailing list: http://mail.cs.uiuc.edu/pipermail/llvm-testresults/ 31. Evan Jones contributed patches to improve our doxygen output. 32. Misha renamed the llvm 'extract' tool to 'llvm-extract' (makes sense!) 33. Justin Wick contributed support for a new llvm.prefetch intrinsic. llvm-gcc now compiles __builtin_prefetch to it. 34. Andrew added llvm.ctpop,llvm.cttz and llvm.ctlz intrinsics. llvm-gcc now codegens __builtin_popcount, etc to these intrinsics. 35. Duraid contributed patches to build LLVM on HP-UX with the GNU toolchain. He also got it working with aCC, but it requires several work-arounds for the (rather old) STL it provides. Notable Bugs Fixed: PR496: Cannot build llvm without llvm-gcc PR510: [llvmgcc] Field offset miscalculated for some structure fields following bit fields PR513: [llvm-g++] Temporary lifetimes incorrect for short circuit logical operations PR517: [llvm-gcc] Crash compiling bitfield <-> aggregate assignment PR520: [llvm-g++] Error compiling virtual function thunk with an unnamed argument PR522: [llvm-gcc] Crash on certain C99 complex number routines PR529: [llvm-g++] Crash using placement new on an array type PR562: [llvm-gcc] crash on global variable nested union with initializer Finally, here's the previous status update: http://mail.cs.uiuc.edu/pipermail/llvm-announce/2005-February/000015.html As usual, if you have any questions or comments about LLVM or any of the features in this status update, please feel free to contact the LLVMdev mailing list (llvmdev at cs.uiuc.edu)! On a more personal note, I recently finished up my Ph.D. In June, I'll be joining Apple Computer's Compiler and Tools group, where I will continue open-source LLVM development. Stay tuned for good things to come! Oh yeah, if you are interested in some of the nifty things that can be done with LLVM, take a look at my thesis: :) http://llvm.cs.uiuc.edu/pubs/2005-05-04-LattnerPHDThesis.html -Chris [Less]