From isanbard at gmail.com Mon Mar 2 01:42:15 2009 From: isanbard at gmail.com (Bill Wendling) Date: Mon, 02 Mar 2009 07:42:15 -0000 Subject: [llvm-commits] [llvm] r65813 - /llvm/trunk/docs/ReleaseNotes.html Message-ID: <200903020742.n227gFbk025952@zion.cs.uiuc.edu> Author: void Date: Mon Mar 2 01:42:15 2009 New Revision: 65813 URL: http://llvm.org/viewvc/llvm-project?rev=65813&view=rev Log: Fix typos. Modified: llvm/trunk/docs/ReleaseNotes.html Modified: llvm/trunk/docs/ReleaseNotes.html URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/ReleaseNotes.html?rev=65813&r1=65812&r2=65813&view=diff ============================================================================== --- llvm/trunk/docs/ReleaseNotes.html (original) +++ llvm/trunk/docs/ReleaseNotes.html Mon Mar 2 01:42:15 2009 @@ -235,7 +235,7 @@
LDC is an implementation of the D Programming Language using the LLVM optimizer and code generator. -LDC project works great with the LLVM 2.5 release. General improvmenets in this +LDC project works great with the LLVM 2.5 release. General improvements in this cycle have included new inline asm constraint handling, better debug info support, general bugfixes, and better x86-64 support. This has allowed some major improvements in LDC, getting us much closer to being as @@ -283,7 +283,7 @@
Things not yet supported:
Following LLVM 2.5, VMKit has its first release that you can find on its +
Following LLVM 2.5, VMKit has its second release that you can find on its webpage. The release includes bug fixes, cleanup and new features. The major changes are:
@@ -189,7 +189,13 @@ gain for exception-intensive applications. For example the jack benchmark in Spec JVM98 is 6x faster (performance gain of 83%). -The set of checks performed by the static analyzer continue to expand, and +
The set of checks performed by the static analyzer continues to expand, and future plans for the tool include full source-level inter-procedural analysis and deeper checks such as buffer overrun detection. There are many opportunities to extend and enhance the static analyzer, and anyone interested in working on @@ -241,7 +241,8 @@
LDC is an implementation of the D Programming Language using the LLVM optimizer and code generator. -LDC project works great with the LLVM 2.5 release. General improvements in this +The LDC project works great with the LLVM 2.5 release. General improvements in +this cycle have included new inline asm constraint handling, better debug info support, general bugfixes, and better x86-64 support. This has allowed some major improvements in LDC, getting us much closer to being as @@ -304,7 +305,7 @@ only supported by the interpreter. Note that the C backend still does not support these. -
In addition to a huge array of bug fixes and minor performance tweaks, this +
In addition to a large array of bug fixes and minor performance tweaks, this release includes a few major enhancements and additions to the optimizers:
Roadsend PHP (rphp) is an open -source compiler for the PHP programming language that uses LLVM for its -optimizer, JIT, and static compiler. This is a reimplementation of an earlier -project that is now based on the LLVM.
+source implementation of the PHP programming +language that uses LLVM for its optimizer, JIT, and static compiler. This is a +reimplementation of an earlier project that is now based on LLVM.Compiling LLVM with GCC succeeds, but the resulting tools do not work, what can be wrong?
+Several versions of GCC have shown a weakness in miscompiling the LLVM codebase. Please +consult your compiler version (gcc --version) to find out whether it is +broken. If so, your only option is to upgrade +GCC to a known good version.
+After Subversion update, rebuilding gives the error "No rule to make target".
This is a bug in GCC, and +
This is a bug in GCC, and affects projects other than LLVM. Try upgrading or downgrading your GCC.
While Clang is not yet production quality, it is progressing very nicely and
-is quite usable for building many C and Objective-C applications. If you are
+and work on templates has recently started. If you are
interested in fast compiles and good diagnostics, we encourage you to try it out
by building from mainline
and reporting any issues you hit to the
This is an overloaded intrinsic. You can use llvm.ctpop on any integer bit width. Not all targets support all bit widths however.
- declare i8 @llvm.ctpop.i8 (i8 <src>) + declare i8 @llvm.ctpop.i8(i8 <src>) declare i16 @llvm.ctpop.i16(i16 <src>) declare i32 @llvm.ctpop.i32(i32 <src>) declare i64 @llvm.ctpop.i64(i64 <src>) @@ -5753,8 +5762,8 @@ with the replaced bits.Arguments:
-The first argument, %val and the result may be integer types of -any bit width but they must have the same bit width. %val is the value +
The first argument, %val, and the result may be integer types of +any bit width, but they must have the same bit width. %val is the value whose bits will be replaced. The second argument, %repl may be an integer of any bit width. The third and fourth arguments must be i32 type since they specify only a bit index.
@@ -5764,17 +5773,22 @@ of operation: forwards and reverse. If %lo is greater than %hi then the intrinsic operates in reverse mode. Otherwise it operates in forward mode. +For both modes, the %repl value is prepared for use by either truncating it down to the size of the replacement area or zero extending it up to that size.
+In forward mode, the bits between %lo and %hi (inclusive) are replaced with corresponding bits from %repl. That is the 0th bit in %repl replaces the %loth bit in %val and etc. up to the %hith bit.
+In reverse mode, a similar computation is made except that the bits are reversed. That is, the 0th bit in %repl replaces the %hi bit in %val and etc. down to the %loth bit.
+Examples:
+llvm.part.set(0xFFFF, 0, 4, 7) -> 0xFF0F llvm.part.set(0xFFFF, 0, 7, 4) -> 0xFF0F @@ -5782,6 +5796,248 @@ llvm.part.set(0xFFFF, F, 8, 3) -> 0xFFE7 llvm.part.set(0xFFFF, 0, 3, 8) -> 0xFE07+ + + + + + ++ ++ + + + +Syntax:
+ +This is an overloaded intrinsic. You can use llvm.sadd.with.overflow +on any integer bit width. However, not all targets support all bit widths.
+ ++ declare {i16, i1} @llvm.sadd.with.overflow.i16(i16 %a, i16 %b) + declare {i32, i1} @llvm.sadd.with.overflow.i32(i32 %a, i32 %b) + declare {i64, i1} @llvm.sadd.with.overflow.i64(i64 %a, i64 %b) ++ +Overview:
+ +The 'llvm.sadd.with.overflow' family of intrinsic functions perform +a signed addition of the two arguments, and indicate whether an overflow +occurred during the signed summation.
+ +Arguments:
+ +The arguments (%a and %b) and the first element of the result structure may +be of integer types of any bit width, but they must have the same bit width. The +second element of the result structure must be of type i1. %a +and %b are the two values that will undergo signed addition.
+ +Semantics:
+ +The 'llvm.sadd.with.overflow' family of intrinsic functions perform +a signed addition of the two variables. They return a structure — the +first element of which is the signed summation, and the second element of which +is a bit specifying if the signed summation resulted in an overflow.
+ +Examples:
++ %res = call {i32, i1} @llvm.sadd.with.overflow.i32(i32 %a, i32 %b) + %sum = extractvalue {i32, i1} %res, 0 + %obit = extractvalue {i32, i1} %res, 1 + br i1 %obit, label %overflow, label %normal ++ ++ ++ + + + +Syntax:
+ +This is an overloaded intrinsic. You can use llvm.uadd.with.overflow +on any integer bit width. However, not all targets support all bit widths.
+ ++ declare {i16, i1} @llvm.uadd.with.overflow.i16(i16 %a, i16 %b) + declare {i32, i1} @llvm.uadd.with.overflow.i32(i32 %a, i32 %b) + declare {i64, i1} @llvm.uadd.with.overflow.i64(i64 %a, i64 %b) ++ +Overview:
+ +The 'llvm.uadd.with.overflow' family of intrinsic functions perform +an unsigned addition of the two arguments, and indicate whether a carry occurred +during the unsigned summation.
+ +Arguments:
+ +The arguments (%a and %b) and the first element of the result structure may +be of integer types of any bit width, but they must have the same bit width. The +second element of the result structure must be of type i1. %a +and %b are the two values that will undergo unsigned addition.
+ +Semantics:
+ +The 'llvm.uadd.with.overflow' family of intrinsic functions perform +an unsigned addition of the two arguments. They return a structure — the +first element of which is the sum, and the second element of which is a bit +specifying if the unsigned summation resulted in a carry.
+ +Examples:
++ %res = call {i32, i1} @llvm.uadd.with.overflow.i32(i32 %a, i32 %b) + %sum = extractvalue {i32, i1} %res, 0 + %obit = extractvalue {i32, i1} %res, 1 + br i1 %obit, label %carry, label %normal ++ ++ ++ + + + +Syntax:
+ +This is an overloaded intrinsic. You can use llvm.ssub.with.overflow +on any integer bit width. However, not all targets support all bit widths.
+ ++ declare {i16, i1} @llvm.ssub.with.overflow.i16(i16 %a, i16 %b) + declare {i32, i1} @llvm.ssub.with.overflow.i32(i32 %a, i32 %b) + declare {i64, i1} @llvm.ssub.with.overflow.i64(i64 %a, i64 %b) ++ +Overview:
+ +The 'llvm.ssub.with.overflow' family of intrinsic functions perform +a signed subtraction of the two arguments, and indicate whether an overflow +occurred during the signed subtraction.
+ +Arguments:
+ +The arguments (%a and %b) and the first element of the result structure may +be of integer types of any bit width, but they must have the same bit width. The +second element of the result structure must be of type i1. %a +and %b are the two values that will undergo signed subtraction.
+ +Semantics:
+ +The 'llvm.ssub.with.overflow' family of intrinsic functions perform +a signed subtraction of the two arguments. They return a structure — the +first element of which is the subtraction, and the second element of which is a bit +specifying if the signed subtraction resulted in an overflow.
+ +Examples:
++ %res = call {i32, i1} @llvm.ssub.with.overflow.i32(i32 %a, i32 %b) + %sum = extractvalue {i32, i1} %res, 0 + %obit = extractvalue {i32, i1} %res, 1 + br i1 %obit, label %overflow, label %normal ++ ++ ++ + + + +Syntax:
+ +This is an overloaded intrinsic. You can use llvm.usub.with.overflow +on any integer bit width. However, not all targets support all bit widths.
+ ++ declare {i16, i1} @llvm.usub.with.overflow.i16(i16 %a, i16 %b) + declare {i32, i1} @llvm.usub.with.overflow.i32(i32 %a, i32 %b) + declare {i64, i1} @llvm.usub.with.overflow.i64(i64 %a, i64 %b) ++ +Overview:
+ +The 'llvm.usub.with.overflow' family of intrinsic functions perform +an unsigned subtraction of the two arguments, and indicate whether an overflow +occurred during the unsigned subtraction.
+ +Arguments:
+ +The arguments (%a and %b) and the first element of the result structure may +be of integer types of any bit width, but they must have the same bit width. The +second element of the result structure must be of type i1. %a +and %b are the two values that will undergo unsigned subtraction.
+ +Semantics:
+ +The 'llvm.usub.with.overflow' family of intrinsic functions perform +an unsigned subtraction of the two arguments. They return a structure — the +first element of which is the subtraction, and the second element of which is a bit +specifying if the unsigned subtraction resulted in an overflow.
+ +Examples:
++ %res = call {i32, i1} @llvm.usub.with.overflow.i32(i32 %a, i32 %b) + %sum = extractvalue {i32, i1} %res, 0 + %obit = extractvalue {i32, i1} %res, 1 + br i1 %obit, label %overflow, label %normal ++ ++ +From gohman at apple.com Mon Mar 2 20:55:14 2009 From: gohman at apple.com (Dan Gohman) Date: Tue, 03 Mar 2009 02:55:14 -0000 Subject: [llvm-commits] [llvm] r65920 - in /llvm/trunk: include/llvm/ include/llvm/CodeGen/ include/llvm/System/ include/llvm/Target/ lib/Target/ARM/AsmPrinter/ lib/Target/CellSPU/AsmPrinter/ lib/Target/PowerPC/ lib/Target/PowerPC/AsmPrinter/ lib/Target/X86/AsmPrinter/ lib/Transforms/Scalar/ lib/Transforms/Utils/ lib/VMCore/ Message-ID: <200903030255.n232tFI8015741@zion.cs.uiuc.edu> Author: djg Date: Mon Mar 2 20:55:14 2009 New Revision: 65920 URL: http://llvm.org/viewvc/llvm-project?rev=65920&view=rev Log: Fix a bunch of Doxygen syntax issues. Escape special characters, and put @file directives on their own comment line. Modified: llvm/trunk/include/llvm/CodeGen/MachineConstantPool.h llvm/trunk/include/llvm/CodeGen/MachineFrameInfo.h llvm/trunk/include/llvm/CodeGen/RegisterCoalescer.h llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h llvm/trunk/include/llvm/Constants.h llvm/trunk/include/llvm/Module.h llvm/trunk/include/llvm/System/IncludeFile.h llvm/trunk/include/llvm/Target/TargetLowering.h llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp llvm/trunk/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp llvm/trunk/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.cpp llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp llvm/trunk/lib/Transforms/Utils/BasicBlockUtils.cpp llvm/trunk/lib/VMCore/Constants.cpp Modified: llvm/trunk/include/llvm/CodeGen/MachineConstantPool.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineConstantPool.h?rev=65920&r1=65919&r2=65920&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/MachineConstantPool.h (original) +++ llvm/trunk/include/llvm/CodeGen/MachineConstantPool.h Mon Mar 2 20:55:14 2009 @@ -7,7 +7,8 @@ // //===----------------------------------------------------------------------===// // -/// @file This file declares the MachineConstantPool class which is an abstract +/// @file +/// This file declares the MachineConstantPool class which is an abstract /// constant pool to keep track of constants referenced by a function. // //===----------------------------------------------------------------------===// Modified: llvm/trunk/include/llvm/CodeGen/MachineFrameInfo.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineFrameInfo.h?rev=65920&r1=65919&r2=65920&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/MachineFrameInfo.h (original) +++ llvm/trunk/include/llvm/CodeGen/MachineFrameInfo.h Mon Mar 2 20:55:14 2009 @@ -119,7 +119,7 @@ bool HasVarSizedObjects; /// FrameAddressTaken - This boolean keeps track of whether there is a call - /// to builtin @llvm.frameaddress. + /// to builtin \@llvm.frameaddress. bool FrameAddressTaken; /// StackSize - The prolog/epilog code inserter calculates the final stack @@ -207,7 +207,7 @@ /// isFrameAddressTaken - This method may be called any time after instruction /// selection is complete to determine if there is a call to - /// @llvm.frameaddress in this function. + /// \@llvm.frameaddress in this function. bool isFrameAddressTaken() const { return FrameAddressTaken; } void setFrameAddressIsTaken(bool T) { FrameAddressTaken = T; } Modified: llvm/trunk/include/llvm/CodeGen/RegisterCoalescer.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/RegisterCoalescer.h?rev=65920&r1=65919&r2=65920&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/RegisterCoalescer.h (original) +++ llvm/trunk/include/llvm/CodeGen/RegisterCoalescer.h Mon Mar 2 20:55:14 2009 @@ -64,7 +64,7 @@ /// /// class LinearScanRegallocQuery : public RegallocQuery { /// private: - /// const LiveIntervals &li; + /// const LiveIntervals \&li; /// /// public: /// LinearScanRegallocQuery(LiveIntervals &intervals) Modified: llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h?rev=65920&r1=65919&r2=65920&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h (original) +++ llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h Mon Mar 2 20:55:14 2009 @@ -1125,7 +1125,7 @@ unsigned getOpcode() const { return (unsigned short)NodeType; } /// isTargetOpcode - Test if this node has a target-specific opcode (in the - ///Syntax:
+ +This is an overloaded intrinsic. You can use llvm.smul.with.overflow +on any integer bit width. However, not all targets support all bit widths.
+ ++ declare {i16, i1} @llvm.smul.with.overflow.i16(i16 %a, i16 %b) + declare {i32, i1} @llvm.smul.with.overflow.i32(i32 %a, i32 %b) + declare {i64, i1} @llvm.smul.with.overflow.i64(i64 %a, i64 %b) ++ +Overview:
+ +The 'llvm.smul.with.overflow' family of intrinsic functions perform +a signed multiplication of the two arguments, and indicate whether an overflow +occurred during the signed multiplication.
+ +Arguments:
+ +The arguments (%a and %b) and the first element of the result structure may +be of integer types of any bit width, but they must have the same bit width. The +second element of the result structure must be of type i1. %a +and %b are the two values that will undergo signed multiplication.
+ +Semantics:
+ +The 'llvm.smul.with.overflow' family of intrinsic functions perform +a signed multiplication of the two arguments. They return a structure — +the first element of which is the multiplication, and the second element of +which is a bit specifying if the signed multiplication resulted in an +overflow.
+ +Examples:
++ %res = call {i32, i1} @llvm.smul.with.overflow.i32(i32 %a, i32 %b) + %sum = extractvalue {i32, i1} %res, 0 + %obit = extractvalue {i32, i1} %res, 1 + br i1 %obit, label %overflow, label %normal ++ISD namespace). + /// \ ISD namespace). bool isTargetOpcode() const { return NodeType >= ISD::BUILTIN_OP_END; } /// isMachineOpcode - Test if this node has a post-isel opcode, directly Modified: llvm/trunk/include/llvm/Constants.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Constants.h?rev=65920&r1=65919&r2=65920&view=diff ============================================================================== --- llvm/trunk/include/llvm/Constants.h (original) +++ llvm/trunk/include/llvm/Constants.h Mon Mar 2 20:55:14 2009 @@ -7,7 +7,8 @@ // //===----------------------------------------------------------------------===// // -/// @file This file contains the declarations for the subclasses of Constant, +/// @file +/// This file contains the declarations for the subclasses of Constant, /// which represent the different flavors of constant values that live in LLVM. /// Note that Constants are immutable (once created they never change) and are /// fully shared by structural equivalence. This means that two structurally Modified: llvm/trunk/include/llvm/Module.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Module.h?rev=65920&r1=65919&r2=65920&view=diff ============================================================================== --- llvm/trunk/include/llvm/Module.h (original) +++ llvm/trunk/include/llvm/Module.h Mon Mar 2 20:55:14 2009 @@ -7,7 +7,8 @@ // //===----------------------------------------------------------------------===// // -/// @file This file contains the declarations for the Module class. +/// @file +/// Module.h This file contains the declarations for the Module class. // //===----------------------------------------------------------------------===// Modified: llvm/trunk/include/llvm/System/IncludeFile.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/System/IncludeFile.h?rev=65920&r1=65919&r2=65920&view=diff ============================================================================== --- llvm/trunk/include/llvm/System/IncludeFile.h (original) +++ llvm/trunk/include/llvm/System/IncludeFile.h Mon Mar 2 20:55:14 2009 @@ -64,7 +64,8 @@ /// helps to resolve that problem. The basic strategy is to use this class in /// a header file and pass the address of a variable to the constructor. If the /// variable is defined in the header file's corresponding .cpp file then all -/// tools/libraries that #include the header file will require the .cpp as well. +/// tools/libraries that \#include the header file will require the .cpp as +/// well. /// For example:
/// extern int LinkMyCodeStub;
/// static IncludeFile LinkMyModule(&LinkMyCodeStub);
Modified: llvm/trunk/include/llvm/Target/TargetLowering.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetLowering.h?rev=65920&r1=65919&r2=65920&view=diff ============================================================================== --- llvm/trunk/include/llvm/Target/TargetLowering.h (original) +++ llvm/trunk/include/llvm/Target/TargetLowering.h Mon Mar 2 20:55:14 2009 @@ -1597,7 +1597,7 @@ ISD::CondCode CmpLibcallCCs[RTLIB::UNKNOWN_LIBCALL]; protected: - /// When lowering @llvm.memset this field specifies the maximum number of + /// When lowering \@llvm.memset this field specifies the maximum number of /// store operations that may be substituted for the call to memset. Targets /// must set this value based on the cost threshold for that target. Targets /// should assume that the memset will be done using as many of the largest @@ -1608,7 +1608,7 @@ /// @brief Specify maximum number of store instructions per memset call. unsigned maxStoresPerMemset; - /// When lowering @llvm.memcpy this field specifies the maximum number of + /// When lowering \@llvm.memcpy this field specifies the maximum number of /// store operations that may be substituted for a call to memcpy. Targets /// must set this value based on the cost threshold for that target. Targets /// should assume that the memcpy will be done using as many of the largest @@ -1620,7 +1620,7 @@ /// @brief Specify maximum bytes of store instructions per memcpy call. unsigned maxStoresPerMemcpy; - /// When lowering @llvm.memmove this field specifies the maximum number of + /// When lowering \@llvm.memmove this field specifies the maximum number of /// store instructions that may be substituted for a call to memmove. Targets /// must set this value based on the cost threshold for that target. Targets /// should assume that the memmove will be done using as many of the largest Modified: llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp?rev=65920&r1=65919&r2=65920&view=diff ============================================================================== --- llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp (original) +++ llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp Mon Mar 2 20:55:14 2009 @@ -799,7 +799,7 @@ } /// PrintUnmangledNameSafely - Print out the printable characters in the name. -/// Don't print things like \n or \0. +/// Don't print things like \\n or \\0. static void PrintUnmangledNameSafely(const Value *V, raw_ostream &OS) { for (const char *Name = V->getNameStart(), *E = Name+V->getNameLen(); Name != E; ++Name) Modified: llvm/trunk/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp?rev=65920&r1=65919&r2=65920&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp (original) +++ llvm/trunk/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp Mon Mar 2 20:55:14 2009 @@ -496,7 +496,7 @@ } /// PrintUnmangledNameSafely - Print out the printable characters in the name. -/// Don't print things like \n or \0. +/// Don't print things like \\n or \\0. static void PrintUnmangledNameSafely(const Value *V, raw_ostream &OS) { for (const char *Name = V->getNameStart(), *E = Name+V->getNameLen(); Name != E; ++Name) Modified: llvm/trunk/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp?rev=65920&r1=65919&r2=65920&view=diff ============================================================================== --- llvm/trunk/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp (original) +++ llvm/trunk/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp Mon Mar 2 20:55:14 2009 @@ -657,7 +657,7 @@ } /// PrintUnmangledNameSafely - Print out the printable characters in the name. -/// Don't print things like \n or \0. +/// Don't print things like \\n or \\0. static void PrintUnmangledNameSafely(const Value *V, raw_ostream &OS) { for (const char *Name = V->getNameStart(), *E = Name+V->getNameLen(); Name != E; ++Name) Modified: llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.cpp?rev=65920&r1=65919&r2=65920&view=diff ============================================================================== --- llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.cpp (original) +++ llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.cpp Mon Mar 2 20:55:14 2009 @@ -467,9 +467,9 @@ /// lowerDynamicAlloc - Generate the code for allocating an object in the /// current frame. The sequence of code with be in the general form /// -/// addi R0, SP, #frameSize ; get the address of the previous frame +/// addi R0, SP, \#frameSize ; get the address of the previous frame /// stwxu R0, SP, Rnegsize ; add and update the SP with the negated size -/// addi Rnew, SP, #maxCalFrameSize ; get the top of the allocation +/// addi Rnew, SP, \#maxCalFrameSize ; get the top of the allocation /// void PPCRegisterInfo::lowerDynamicAlloc(MachineBasicBlock::iterator II, int SPAdj, RegScavenger *RS) const { Modified: llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp?rev=65920&r1=65919&r2=65920&view=diff ============================================================================== --- llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp (original) +++ llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp Mon Mar 2 20:55:14 2009 @@ -85,7 +85,7 @@ } /// PrintUnmangledNameSafely - Print out the printable characters in the name. -/// Don't print things like \n or \0. +/// Don't print things like \\n or \\0. static void PrintUnmangledNameSafely(const Value *V, raw_ostream &OS) { for (const char *Name = V->getNameStart(), *E = Name+V->getNameLen(); Name != E; ++Name) Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp?rev=65920&r1=65919&r2=65920&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Mon Mar 2 20:55:14 2009 @@ -11381,9 +11381,9 @@ /// equivalentAddressValues - Test if A and B will obviously have the same /// value. This includes recognizing that %t0 and %t1 will have the same /// value in code like this: -/// %t0 = getelementptr @a, 0, 3 +/// %t0 = getelementptr \@a, 0, 3 /// store i32 0, i32* %t0 -/// %t1 = getelementptr @a, 0, 3 +/// %t1 = getelementptr \@a, 0, 3 /// %t2 = load i32* %t1 /// static bool equivalentAddressValues(Value *A, Value *B) { Modified: llvm/trunk/lib/Transforms/Utils/BasicBlockUtils.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/BasicBlockUtils.cpp?rev=65920&r1=65919&r2=65920&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Utils/BasicBlockUtils.cpp (original) +++ llvm/trunk/lib/Transforms/Utils/BasicBlockUtils.cpp Mon Mar 2 20:55:14 2009 @@ -425,9 +425,9 @@ /// AreEquivalentAddressValues - Test if A and B will obviously have the same /// value. This includes recognizing that %t0 and %t1 will have the same /// value in code like this: -/// %t0 = getelementptr @a, 0, 3 +/// %t0 = getelementptr \@a, 0, 3 /// store i32 0, i32* %t0 -/// %t1 = getelementptr @a, 0, 3 +/// %t1 = getelementptr \@a, 0, 3 /// %t2 = load i32* %t1 /// static bool AreEquivalentAddressValues(const Value *A, const Value *B) { Modified: llvm/trunk/lib/VMCore/Constants.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Constants.cpp?rev=65920&r1=65919&r2=65920&view=diff ============================================================================== --- llvm/trunk/lib/VMCore/Constants.cpp (original) +++ llvm/trunk/lib/VMCore/Constants.cpp Mon Mar 2 20:55:14 2009 @@ -1277,8 +1277,8 @@ return AggZeroConstants->getOrCreate(Ty, 0); } -// destroyConstant - Remove the constant from the constant table... -// +/// destroyConstant - Remove the constant from the constant table... +/// void ConstantAggregateZero::destroyConstant() { AggZeroConstants->remove(this); destroyConstantImpl(); @@ -1328,8 +1328,8 @@ return ConstantAggregateZero::get(Ty); } -// destroyConstant - Remove the constant from the constant table... -// +/// destroyConstant - Remove the constant from the constant table... +/// void ConstantArray::destroyConstant() { ArrayConstants->remove(this); destroyConstantImpl(); @@ -1370,7 +1370,7 @@ } /// isCString - This method returns true if the array is a string (see -/// isString) and it ends in a null byte \0 and does not contains any other +/// isString) and it ends in a null byte \\0 and does not contains any other /// null bytes except its terminator. bool ConstantArray::isCString() const { // Check the element type for i8... @@ -1391,10 +1391,10 @@ } -// getAsString - If the sub-element type of this array is i8 -// then this method converts the array to an std::string and returns it. -// Otherwise, it asserts out. -// +/// getAsString - If the sub-element type of this array is i8 +/// then this method converts the array to an std::string and returns it. +/// Otherwise, it asserts out. +/// std::string ConstantArray::getAsString() const { assert(isString() && "Not a string!"); std::string Result; From nicholas at mxc.ca Mon Mar 2 21:14:53 2009 From: nicholas at mxc.ca (Nick Lewycky) Date: Mon, 02 Mar 2009 19:14:53 -0800 Subject: [llvm-commits] [llvm] r65846 - /llvm/trunk/docs/ReleaseNotes.html In-Reply-To: <200903021658.n22Gw3Qe023616@zion.cs.uiuc.edu> References: <200903021658.n22Gw3Qe023616@zion.cs.uiuc.edu> Message-ID: <49ACA0AD.9040900@mxc.ca> Duncan Sands wrote: > Author: baldrick > Date: Mon Mar 2 10:58:00 2009 > New Revision: 65846 > > URL: http://llvm.org/viewvc/llvm-project?rev=65846&view=rev > Log: > Try to make the meaning of 'nocapture' a bit clearer. I > commented out the line about simplifylibcalls because I > think this doesn't work in the release (it was fixed in > svn after the release branched). Yes, I think that's right also. > > Modified: > llvm/trunk/docs/ReleaseNotes.html > > Modified: llvm/trunk/docs/ReleaseNotes.html > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/ReleaseNotes.html?rev=65846&r1=65845&r2=65846&view=diff > > ============================================================================== > --- llvm/trunk/docs/ReleaseNotes.html (original) > +++ llvm/trunk/docs/ReleaseNotes.html Mon Mar 2 10:58:00 2009 > @@ -368,13 +368,16 @@ >LLVM IR supports two new attributes for better alias analysis. The href="LangRef.html#paramattrs">noalias attribute can now be used on the > return value of a function to indicate that it returns new memory (e.g. > -'malloc', 'calloc', etc). > - > -The new nocapture attribute can be > -used on pointer arguments to functions that access through but do not return the > -pointer in a data structure that out lives the call (e.g. 'strlen', 'memcpy', > -and many others). The simplifylibcalls pass applies these attributes to > -standard libc functions. > +'malloc', 'calloc', etc). > +The new nocapture attribute can be used > +on pointer arguments to indicate that the function does not return the pointer, > +store it in an object that outlives the call, or let the value of the pointer > +escape from the function in any other way. > +Note that it is the pointer itself that must not escape, not the value it > +points to: loading a value out of the pointer is perfectly fine. > +Many standard library functions (e.g. 'strlen', 'memcpy') have this property. Does this note really belong in the release notes? Perhaps the link to the LangRef is enough? Nick > + > +
This document contains the release notes for the LLVM Compiler -Infrastructure, release 2.4. Here we describe the status of LLVM, including +Infrastructure, release 2.5. Here we describe the status of LLVM, including major improvements from the previous release and significant known problems. -All LLVM releases may be downloaded from the LLVM releases web site.
For more information about LLVM, including information about the latest @@ -51,18 +52,25 @@
-The LLVM 2.4 distribution currently consists of code from the core LLVM -repository (which roughly includes the LLVM optimizers, code generators and -supporting tools) and the llvm-gcc repository. In addition to this code, the -LLVM Project includes other sub-projects that are in development. The two which -are the most actively developed are the Clang Project and -the VMKit Project. +The LLVM 2.5 distribution currently consists of code from the core LLVM +repository —which roughly includes the LLVM optimizers, code generators +and supporting tools — and the llvm-gcc repository. In addition to this +code, the LLVM Project includes other sub-projects that are in development. The +two which are the most actively developed are the Clang +Project and the VMKit Project.
The Clang project is an effort to build -a set of new 'LLVM native' front-end technologies for the LLVM optimizer -and code generator. Clang is continuing to make major strides forward in all -areas. Its C and Objective-C parsing support is very solid, and the code -generation support is far enough along to build many C applications. While not -yet production quality, it is progressing very nicely. In addition, C++ -front-end work has started to make significant progress.
- -Clang, in conjunction with the ccc driver, is now usable as a -replacement for gcc for building some small- to medium-sized C applications. -Additionally, Clang now has code generation support for Objective-C on Mac OS X -platform. Major highlights include:
- -Clang code generation still needs considerable testing and development, -however. Some areas under active development include:
- -In the LLVM 2.5 time-frame, the Clang team has made many improvements:
+ +The Clang project also includes an early stage static source code analysis -tool for automatically -finding bugs in C and Objective-C programs. The tool performs a growing set -of checks to find bugs that occur on a specific path within a program. Examples -of bugs the tool finds include logic errors such as null dereferences, -violations of various API rules, dead code, and potential memory leaks in -Objective-C programs. Since its inception, public feedback on the tool has been -extremely positive, and conservative estimates put the number of real bugs it -has found in industrial-quality software on the order of thousands.
- -The tool also provides a simple web GUI to inspect potential bugs found by -the tool. While still early in development, the GUI illustrates some of the key -features of Clang: accurate source location information, which is used by the -GUI to highlight specific code expressions that relate to a bug (including those -that span multiple lines); and built-in knowledge of macros, which is used to -perform inline expansion of macros within the GUI itself.
- -The set of checks performed by the static analyzer is gradually expanding, -and future plans for the tool include full source-level inter-procedural -analysis and deeper checks such as buffer overrun detection. There are many -opportunities to extend and enhance the static analyzer, and anyone interested -in working on this project is encouraged to get involved!
+Previously announced in the last LLVM release, the Clang project also +includes an early stage static source code analysis tool for automatically finding bugs +in C and Objective-C programs. The tool performs a growing set of checks to find +bugs that occur on a specific path within a program.
+ +In the LLVM 2.5 time-frame there have been many significant improvements to +the analyzer's core path simulation engine and machinery for generating +path-based bug reports to end-users. Particularly noteworthy improvements +include experimental support for full field-sensitivity and reasoning about heap +objects as well as an improved value-constraints subengine that does a much +better job of reasoning about inequality relationships (e.g., x > 2) +between variables and constants. + +
The set of checks performed by the static analyzer continues to expand, and +future plans for the tool include full source-level inter-procedural analysis +and deeper checks such as buffer overrun detection. There are many opportunities +to extend and enhance the static analyzer, and anyone interested in working on +this project is encouraged to get involved!
Following LLVM 2.4, VMKit has its first release 0.24 that you can find on its +
Following LLVM 2.5, VMKit has its second release that you can find on its webpage. The release includes bug fixes, cleanup and new features. The major changes are:
+Pure +is an algebraic/functional programming language based on term rewriting. +Programs are collections of equations which are used to evaluate expressions in +a symbolic fashion. Pure offers dynamic typing, eager and lazy evaluation, +lexical closures, a hygienic macro system (also based on term rewriting), +built-in list and matrix support (including list and matrix comprehensions) and +an easy-to-use C interface. The interpreter uses LLVM as a backend to + JIT-compile Pure programs to fast native code.
+ +In addition to the usual algebraic data structures, Pure also has +MATLAB-style matrices in order to support numeric computations and signal +processing in an efficient way. Pure is mainly aimed at mathematical +applications right now, but it has been designed as a general purpose language. +The dynamic interpreter environment and the C interface make it possible to use +it as a kind of functional scripting language for many application areas. +
++LDC is an implementation of +the D Programming Language using the LLVM optimizer and code generator. +The LDC project works great with the LLVM 2.5 release. General improvements in +this +cycle have included new inline asm constraint handling, better debug info +support, general bugfixes, and better x86-64 support. This has allowed +some major improvements in LDC, getting us much closer to being as +fully featured as the original DMD compiler from DigitalMars. +
+Roadsend PHP (rphp) is an open +source implementation of the PHP programming +language that uses LLVM for its optimizer, JIT, and static compiler. This is a +reimplementation of an earlier project that is now based on LLVM.
+LLVM 2.4 includes several major new capabilities:
+LLVM 2.5 includes several major new capabilities:
The most visible end-user change in LLVM 2.4 is that it includes many -optimizations and changes to make -O0 compile times much faster. You should see -improvements in speed on the order of 30% (or more) than in LLVM 2.3. There are -many pieces to this change described in more detail below. The speedups and new -components can also be used for JIT compilers that want fast -compilation.
The biggest change to the LLVM IR is that Multiple Return Values (which -were introduced in LLVM 2.3) have been generalized to full support for "First -Class Aggregate" values in LLVM 2.4. This means that LLVM IR supports using -structs and arrays as values in a function. This capability is mostly useful -for front-end authors, who prefer to treat things like complex numbers, simple -tuples, dope vectors, etc., as Value*'s instead of as a tuple of Value*'s or as -memory values. Bitcode files from LLVM 2.3 will automatically migrate to the -general representation.
LLVM 2.4 also includes an initial port for the PIC16 microprocessor. This -target only has support for 8 bit registers, and a number of other crazy -constraints. While the port is still in early development stages, it shows some -interesting things you can do with LLVM.
New features include:
+LLVM IR has several new features that are used by our existing front-ends and +can be useful if you are writing a front-end for LLVM:
In addition to a huge array of bug fixes and minor performance tweaks, this +
In addition to a large array of bug fixes and minor performance tweaks, this release includes a few major enhancements and additions to the optimizers:
We have put a significant amount of work into the code generator infrastructure, -which allows us to implement more aggressive algorithms and make it run -faster:
+We have put a significant amount of work into the code generator +infrastructure, which allows us to implement more aggressive algorithms and make +it run faster:
New features of the X86 target include: +
-New target-specific features include: +
New features of the PIC16 target include:
Things not yet supported:
+ +New features include: -
+New features include:
If you're already an LLVM user or developer with out-of-tree changes based -on LLVM 2.3, this section lists some "gotchas" that you may run into upgrading +on LLVM 2.4, this section lists some "gotchas" that you may run into upgrading from the previous release.
LLVM is known to work on the following platforms:
This section contains significant known problems with the LLVM system, +
This section contains significant known problems with the LLVM system, listed by component. If you run into a problem, please check the LLVM bug database and submit a bug if there isn't already one.
@@ -630,8 +688,8 @@These documents are HTML versions of the man pages + for all of the LLVM tools. These pages describe how to use the LLVM commands + and what their options are. Note that these pages do not describe all of the + options available for all tools. To get a complete listing, pass the + --help (general options) or --help-hidden (general+debugging + options) arguments to the tool you are interested in.
+ +(quick + update) operations, the archive will be reconstructed in LLVM format. This + means that the string table will be dropped (in deference to BSD 4.4 long names) + and an LLVM symbol table will be added (by default). The system symbol table + will be retained. + + Here's where Bdeparts from previous C implementations: + + =over + + =item I + + Since B is intended to archive bitcode files, the symbol table + won't make much sense to anything but LLVM. Consequently, the symbol table's + format has been simplified. It consists simply of a sequence of pairs + of a file member index number as an LSB 4byte integer and a null-terminated + string. + + =item I + + Some C implementations (SVR4) use a separate file member to record long + path names (> 15 characters). B takes the BSD 4.4 and Mac OS X + approach which is to simply store the full path name immediately preceding + the data for the file. The path name is null terminated and may contain the + slash (/) character. + + =item I + + B can compress the members of an archive to save space. The + compression used depends on what's available on the platform and what choices + the LLVM Compressor utility makes. It generally favors bzip2 but will select + between "no compression" or bzip2 depending on what makes sense for the + file's content. + + =item I + + Most C implementations do not recurse through directories but simply + ignore directories if they are presented to the program in the F + option. B