From brukman at cs.uiuc.edu Tue Mar 23 20:04:02 2004 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Tue Mar 23 20:04:02 2004 Subject: [llvm-commits] CVS: llvm-www/releases/index.html Message-ID: <200403240203.UAA31515@zion.cs.uiuc.edu> Changes in directory llvm-www/releases: index.html updated: 1.14 -> 1.15 --- Log message: Link to the v1.2 of LICENSE.TXT rather than the old one from v1.1 . --- Diffs of the changes: (+2 -2) Index: llvm-www/releases/index.html diff -u llvm-www/releases/index.html:1.14 llvm-www/releases/index.html:1.15 --- llvm-www/releases/index.html:1.14 Fri Mar 19 22:58:08 2004 +++ llvm-www/releases/index.html Tue Mar 23 20:03:22 2004 @@ -28,8 +28,8 @@
-

LLVM is distributed under the University of Illinois -Open Source License, an LLVM is distributed under the University of +Illinois Open Source License, an OSI-approved license.

From brukman at cs.uiuc.edu Tue Mar 23 20:07:00 2004 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Tue Mar 23 20:07:00 2004 Subject: [llvm-commits] CVS: llvm-www/releases/1.2/docs/ReleaseNotes.html Message-ID: <200403240206.UAA05106@zion.cs.uiuc.edu> Changes in directory llvm-www/releases/1.2/docs: ReleaseNotes.html updated: 1.3 -> 1.4 --- Log message: Kill unopened tag. --- Diffs of the changes: (+2 -2) Index: llvm-www/releases/1.2/docs/ReleaseNotes.html diff -u llvm-www/releases/1.2/docs/ReleaseNotes.html:1.3 llvm-www/releases/1.2/docs/ReleaseNotes.html:1.4 --- llvm-www/releases/1.2/docs/ReleaseNotes.html:1.3 Fri Mar 19 16:04:17 2004 +++ llvm-www/releases/1.2/docs/ReleaseNotes.html Tue Mar 23 20:06:20 2004 @@ -148,7 +148,7 @@
  • The C/C++ front-end now supports the GCC __builtin_return_address and __builtin_frame_address extensions. These are also supported by the X86 backend and by the C backend.
  • [X86] Missing cast from ULong -> Double, cast FP -> bool and support for -9223372036854775808
  • The C/C++ front-end now supports -the "labels as values" GCC extension, often used to build "threaded interpreters".
  • +the "labels as values" GCC extension, often used to build "threaded interpreters". @@ -664,7 +664,7 @@ src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" /> The LLVM Compiler Infrastructure
    - Last modified: $Date: 2004/03/19 22:04:17 $ + Last modified: $Date: 2004/03/24 02:06:20 $ From lattner at cs.uiuc.edu Thu Mar 25 14:39:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Mar 25 14:39:01 2004 Subject: [llvm-commits] CVS: llvm/docs/GettingStarted.html Message-ID: <200403252038.OAA02857@zion.cs.uiuc.edu> Changes in directory llvm/docs: GettingStarted.html updated: 1.51 -> 1.52 --- Log message: Add note about setting up linux systems to directly execute LLVM bytecode files Fixes PR303: http://llvm.cs.uiuc.edu/PR303 --- Diffs of the changes: (+35 -5) Index: llvm/docs/GettingStarted.html diff -u llvm/docs/GettingStarted.html:1.51 llvm/docs/GettingStarted.html:1.52 --- llvm/docs/GettingStarted.html:1.51 Fri Mar 12 14:31:37 2004 +++ llvm/docs/GettingStarted.html Thu Mar 25 14:38:40 2004 @@ -30,6 +30,7 @@
  • Local LLVM Configuration
  • Compiling the LLVM Suite Source Code
  • The Location of LLVM Object Files +
  • Optional Configuration Items
  • Program layout @@ -49,11 +50,11 @@

    By: - Guochun Shi, - Chris Lattner, John Criswell, - Misha Brukman, and - Vikram Adve.

    + Chris Lattner, + Misha Brukman, + Vikram Adve, and + Guochun Shi.

    @@ -765,6 +766,35 @@
  • + +
    + Optional Configuration Items +
    + +
    + +

    +If you're running on a linux system that supports the "binfmt_misc" +module, and you have root access on the system, you can set your system up to +execute LLVM bytecode files directly. To do this, use commands like this (the +first command may not be required if you are already using the module):

    + +
    +   $ mount -t binfmt_misc none /proc/sys/fs/binfmt_misc
    +   $ echo ':llvm:M::llvm::/path/to/lli:' > /proc/sys/fs/binfmt_misc/register
    +   $ chmod u+x hello.bc                (if needed)
    +   $ ./hello.bc
    +
    + +

    +This allows you to execute LLVM bytecode files directly. Thanks to Jack +Cummings for pointing this out! +

    + +
    + +
    Program Layout @@ -1170,7 +1200,7 @@ Chris Lattner
    The LLVM Compiler Infrastructure
    - Last modified: $Date: 2004/03/12 20:31:37 $ + Last modified: $Date: 2004/03/25 20:38:40 $ From lattner at cs.uiuc.edu Thu Mar 25 16:57:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Mar 25 16:57:01 2004 Subject: [llvm-commits] CVS: llvm/lib/Analysis/ValueNumbering.cpp Message-ID: <200403252256.QAA10805@zion.cs.uiuc.edu> Changes in directory llvm/lib/Analysis: ValueNumbering.cpp updated: 1.10 -> 1.11 --- Log message: Minor efficiency improvement, finegrainify namespacification --- Diffs of the changes: (+10 -5) Index: llvm/lib/Analysis/ValueNumbering.cpp diff -u llvm/lib/Analysis/ValueNumbering.cpp:1.10 llvm/lib/Analysis/ValueNumbering.cpp:1.11 --- llvm/lib/Analysis/ValueNumbering.cpp:1.10 Tue Feb 10 21:57:16 2004 +++ llvm/lib/Analysis/ValueNumbering.cpp Thu Mar 25 16:56:03 2004 @@ -18,8 +18,7 @@ #include "llvm/Instructions.h" #include "llvm/Pass.h" #include "llvm/Type.h" - -namespace llvm { +using namespace llvm; // Register the ValueNumbering interface, providing a nice name to refer to. static RegisterAnalysisGroup X("Value Numbering"); @@ -177,6 +176,14 @@ void BVNImpl::visitGetElementPtrInst(GetElementPtrInst &I) { Value *Op = I.getOperand(0); + + // Try to pick a local operand if possible instead of a constant or a global + // that might have a lot of uses. + for (unsigned i = 1, e = I.getNumOperands(); i != e; ++i) + if (isa(I.getOperand(i)) || isa(I.getOperand(i))) { + Op = I.getOperand(i); + break; + } for (Value::use_iterator UI = Op->use_begin(), UE = Op->use_end(); UI != UE; ++UI) @@ -188,6 +195,4 @@ } } -void BasicValueNumberingStub() { } - -} // End llvm namespace +void llvm::BasicValueNumberingStub() { } From lattner at cs.uiuc.edu Thu Mar 25 17:00:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Mar 25 17:00:01 2004 Subject: [llvm-commits] CVS: llvm/test/Regression/Transforms/InstCombine/getelementptr_const.ll Message-ID: <200403252259.QAA11277@zion.cs.uiuc.edu> Changes in directory llvm/test/Regression/Transforms/InstCombine: getelementptr_const.ll added (r1.1) --- Log message: New testcase --- Diffs of the changes: (+13 -0) Index: llvm/test/Regression/Transforms/InstCombine/getelementptr_const.ll diff -c /dev/null llvm/test/Regression/Transforms/InstCombine/getelementptr_const.ll:1.1 *** /dev/null Thu Mar 25 16:59:16 2004 --- llvm/test/Regression/Transforms/InstCombine/getelementptr_const.ll Thu Mar 25 16:59:06 2004 *************** *** 0 **** --- 1,13 ---- + ; Test folding of constantexpr geps into normal geps. + ; RUN: llvm-as < %s | opt -instcombine -gcse -instcombine | llvm-dis | not grep getelementptr + + %Array = external global [40 x int] + + int %test(long %X) { + %A = getelementptr int* getelementptr ([40 x int]* %Array, long 0, long 0), long %X + %B = getelementptr [40 x int]* %Array, long 0, long %X + %a = cast int* %A to int + %b = cast int* %B to int + %c = sub int %a, %b + ret int %c + } From lattner at cs.uiuc.edu Thu Mar 25 17:00:04 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Mar 25 17:00:04 2004 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/InstructionCombining.cpp Message-ID: <200403252259.QAA11287@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Scalar: InstructionCombining.cpp updated: 1.173 -> 1.174 --- Log message: Two changes: #1 is to unconditionally strip constantpointerrefs out of instruction operands where they are absolutely pointless and inhibit optimization. GRRR! #2 is to implement InstCombine/getelementptr_const.ll --- Diffs of the changes: (+40 -16) Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.173 llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.174 --- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.173 Fri Mar 19 00:08:10 2004 +++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp Thu Mar 25 16:59:29 2004 @@ -2260,23 +2260,32 @@ // is a getelementptr instruction, combine the indices of the two // getelementptr instructions into a single instruction. // + std::vector SrcGEPOperands; if (GetElementPtrInst *Src = dyn_cast(GEP.getOperand(0))) { + SrcGEPOperands.assign(Src->op_begin(), Src->op_end()); + } else if (ConstantExpr *CE = dyn_cast(GEP.getOperand(0))) { + if (CE->getOpcode() == Instruction::GetElementPtr) + SrcGEPOperands.assign(CE->op_begin(), CE->op_end()); + } + + if (!SrcGEPOperands.empty()) { std::vector Indices; // Can we combine the two pointer arithmetics offsets? - if (Src->getNumOperands() == 2 && isa(Src->getOperand(1)) && + if (SrcGEPOperands.size() == 2 && isa(SrcGEPOperands[1]) && isa(GEP.getOperand(1))) { // Replace: gep (gep %P, long C1), long C2, ... // With: gep %P, long (C1+C2), ... Value *Sum = ConstantExpr::get(Instruction::Add, - cast(Src->getOperand(1)), + cast(SrcGEPOperands[1]), cast(GEP.getOperand(1))); assert(Sum && "Constant folding of longs failed!?"); - GEP.setOperand(0, Src->getOperand(0)); + GEP.setOperand(0, SrcGEPOperands[0]); GEP.setOperand(1, Sum); - AddUsersToWorkList(*Src); // Reduce use count of Src + if (Instruction *I = dyn_cast(GEP.getOperand(0))) + AddUsersToWorkList(*I); // Reduce use count of Src return &GEP; - } else if (Src->getNumOperands() == 2) { + } else if (SrcGEPOperands.size() == 2) { // Replace: gep (gep %P, long B), long A, ... // With: T = long A+B; gep %P, T, ... // @@ -2284,32 +2293,37 @@ // chain to be resolved before we perform this transformation. This // avoids us creating a TON of code in some cases. // - if (isa(Src->getOperand(0)) && - cast(Src->getOperand(0))->getNumOperands() == 2) + if (isa(SrcGEPOperands[0]) && + cast(SrcGEPOperands[0])->getNumOperands() == 2) return 0; // Wait until our source is folded to completion. - Value *Sum = BinaryOperator::create(Instruction::Add, Src->getOperand(1), + Value *Sum = BinaryOperator::create(Instruction::Add, SrcGEPOperands[1], GEP.getOperand(1), - Src->getName()+".sum", &GEP); - GEP.setOperand(0, Src->getOperand(0)); + GEP.getOperand(0)->getName()+".sum", + &GEP); + GEP.setOperand(0, SrcGEPOperands[0]); GEP.setOperand(1, Sum); WorkList.push_back(cast(Sum)); return &GEP; } else if (*GEP.idx_begin() == Constant::getNullValue(Type::LongTy) && - Src->getNumOperands() != 1) { + SrcGEPOperands.size() != 1) { // Otherwise we can do the fold if the first index of the GEP is a zero - Indices.insert(Indices.end(), Src->idx_begin(), Src->idx_end()); + Indices.insert(Indices.end(), SrcGEPOperands.begin()+1, + SrcGEPOperands.end()); Indices.insert(Indices.end(), GEP.idx_begin()+1, GEP.idx_end()); - } else if (Src->getOperand(Src->getNumOperands()-1) == - Constant::getNullValue(Type::LongTy)) { + } else if (SrcGEPOperands.back() == Constant::getNullValue(Type::LongTy)) { + // FIXME: when we allow indices to be non-long values, support this for + // other types! + // If the src gep ends with a constant array index, merge this get into // it, even if we have a non-zero array index. - Indices.insert(Indices.end(), Src->idx_begin(), Src->idx_end()-1); + Indices.insert(Indices.end(), SrcGEPOperands.begin()+1, + SrcGEPOperands.end()-1); Indices.insert(Indices.end(), GEP.idx_begin(), GEP.idx_end()); } if (!Indices.empty()) - return new GetElementPtrInst(Src->getOperand(0), Indices, GEP.getName()); + return new GetElementPtrInst(SrcGEPOperands[0], Indices, GEP.getName()); } else if (GlobalValue *GV = dyn_cast(GEP.getOperand(0))) { // GEP of global variable. If all of the indices for this GEP are @@ -2547,6 +2561,16 @@ removeFromWorkList(I); continue; } + + // Check to see if any of the operands of this instruction are a + // ConstantPointerRef. Since they sneak in all over the place and inhibit + // optimization, we want to strip them out unconditionally! + for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i) + if (ConstantPointerRef *CPR = + dyn_cast(I->getOperand(i))) { + I->setOperand(i, CPR->getValue()); + Changed = true; + } // Now that we have an instruction, try combining it to simplify it... if (Instruction *Result = visit(*I)) { From lattner at cs.uiuc.edu Fri Mar 26 10:12:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri Mar 26 10:12:01 2004 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/InstructionCombining.cpp Message-ID: <200403261611.KAA24087@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Scalar: InstructionCombining.cpp updated: 1.174 -> 1.175 --- Log message: X % -1 == X % 1 == 0 --- Diffs of the changes: (+2 -0) Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.174 llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.175 --- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.174 Thu Mar 25 16:59:29 2004 +++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp Fri Mar 26 10:11:24 2004 @@ -808,6 +808,8 @@ if (ConstantInt *RHS = dyn_cast(I.getOperand(1))) { if (RHS->equalsInt(1)) // X % 1 == 0 return ReplaceInstUsesWith(I, Constant::getNullValue(I.getType())); + if (RHS->isAllOnesValue()) // X % -1 == 0 + return ReplaceInstUsesWith(I, Constant::getNullValue(I.getType())); // Check to see if this is an unsigned remainder with an exact power of 2, // if so, convert to a bitwise and. From lattner at cs.uiuc.edu Fri Mar 26 11:06:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri Mar 26 11:06:01 2004 Subject: [llvm-commits] CVS: llvm/runtime/libpng/Makefile Message-ID: <200403261705.LAA26321@zion.cs.uiuc.edu> Changes in directory llvm/runtime/libpng: Makefile updated: 1.2 -> 1.3 --- Log message: Make sure to get the headers from zlib correctly --- Diffs of the changes: (+1 -0) Index: llvm/runtime/libpng/Makefile diff -u llvm/runtime/libpng/Makefile:1.2 llvm/runtime/libpng/Makefile:1.3 --- llvm/runtime/libpng/Makefile:1.2 Fri Feb 20 15:26:46 2004 +++ llvm/runtime/libpng/Makefile Fri Mar 26 11:04:53 2004 @@ -11,6 +11,7 @@ BUILD_ARCHIVE=1 DONT_BUILD_RELINKED=1 LIBRARYNAME=png +CPPFLAGS += -I../zlib Source = png.c pngset.c pngget.c pngrutil.c pngtrans.c pngwutil.c \ pngread.c pngrio.c pngwio.c pngwrite.c pngrtran.c \ From lattner at cs.uiuc.edu Fri Mar 26 15:44:01 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri Mar 26 15:44:01 2004 Subject: [llvm-commits] CVS: llvm/include/llvm/Type.h Message-ID: <200403262143.PAA03559@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm: Type.h updated: 1.41 -> 1.42 --- Log message: Add two methods which have been needed for a long time: Type::get(Un)signedVersion --- Diffs of the changes: (+10 -1) Index: llvm/include/llvm/Type.h diff -u llvm/include/llvm/Type.h:1.41 llvm/include/llvm/Type.h:1.42 --- llvm/include/llvm/Type.h:1.41 Mon Feb 16 21:03:36 2004 +++ llvm/include/llvm/Type.h Fri Mar 26 15:43:12 2004 @@ -212,9 +212,18 @@ /// unsigned getPrimitiveSize() const; + /// getUnsignedVersion - If this is an integer type, return the unsigned + /// variant of this type. For example int -> uint. + const Type *getUnsignedVersion() const; + + /// getSignedVersion - If this is an integer type, return the signed variant + /// of this type. For example uint -> int. + const Type *getSignedVersion() const; + /// getForwaredType - Return the type that this type has been resolved to if /// it has been resolved to anything. This is used to implement the - /// union-find algorithm for type resolution. + /// union-find algorithm for type resolution, and shouldn't be used by general + /// purpose clients. const Type *getForwardedType() const { if (!ForwardType) return 0; return getForwardedTypeInternal(); From lattner at cs.uiuc.edu Fri Mar 26 15:44:03 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri Mar 26 15:44:03 2004 Subject: [llvm-commits] CVS: llvm/lib/VMCore/Type.cpp Message-ID: <200403262143.PAA03704@zion.cs.uiuc.edu> Changes in directory llvm/lib/VMCore: Type.cpp updated: 1.96 -> 1.97 --- Log message: Add two methods which have been needed for a long time: Type::get(Un)signedVersion --- Diffs of the changes: (+35 -0) Index: llvm/lib/VMCore/Type.cpp diff -u llvm/lib/VMCore/Type.cpp:1.96 llvm/lib/VMCore/Type.cpp:1.97 --- llvm/lib/VMCore/Type.cpp:1.96 Thu Feb 26 01:24:18 2004 +++ llvm/lib/VMCore/Type.cpp Fri Mar 26 15:43:22 2004 @@ -113,6 +113,41 @@ } } +/// getUnsignedVersion - If this is an integer type, return the unsigned +/// variant of this type. For example int -> uint. +const Type *Type::getUnsignedVersion() const { + switch (getPrimitiveID()) { + default: + assert(isInteger()&&"Type::getUnsignedVersion is only valid for integers!"); + case Type::UByteTyID: + case Type::SByteTyID: return Type::UByteTy; + case Type::UShortTyID: + case Type::ShortTyID: return Type::UShortTy; + case Type::UIntTyID: + case Type::IntTyID: return Type::UIntTy; + case Type::ULongTyID: + case Type::LongTyID: return Type::ULongTy; + } +} + +/// getSignedVersion - If this is an integer type, return the signed variant +/// of this type. For example uint -> int. +const Type *Type::getSignedVersion() const { + switch (getPrimitiveID()) { + default: + assert(isInteger() && "Type::getSignedVersion is only valid for integers!"); + case Type::UByteTyID: + case Type::SByteTyID: return Type::SByteTy; + case Type::UShortTyID: + case Type::ShortTyID: return Type::ShortTy; + case Type::UIntTyID: + case Type::IntTyID: return Type::IntTy; + case Type::ULongTyID: + case Type::LongTyID: return Type::LongTy; + } +} + + // getPrimitiveSize - Return the basic size of this type if it is a primitive // type. These are fixed by LLVM and are not target dependent. This will // return zero if the type does not have a size or is not a primitive type. From lattner at cs.uiuc.edu Sun Mar 28 19:03:37 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sun Mar 28 19:03:37 2004 Subject: [llvm-commits] CVS: llvm/lib/VMCore/Verifier.cpp Message-ID: <200403290029.SAA11040@zion.cs.uiuc.edu> Changes in directory llvm/lib/VMCore: Verifier.cpp updated: 1.88 -> 1.89 --- Log message: Add another check --- Diffs of the changes: (+5 -0) Index: llvm/lib/VMCore/Verifier.cpp diff -u llvm/lib/VMCore/Verifier.cpp:1.88 llvm/lib/VMCore/Verifier.cpp:1.89 --- llvm/lib/VMCore/Verifier.cpp:1.88 Sat Mar 13 21:23:54 2004 +++ llvm/lib/VMCore/Verifier.cpp Sun Mar 28 18:29:36 2004 @@ -493,6 +493,11 @@ Assert1(I.getType() != Type::VoidTy || !I.hasName(), "Instruction has a name, but provides a void value!", &I); + // Check that the return value of the instruction is either void or a legal + // value type. + Assert1(I.getType() == Type::VoidTy || I.getType()->isFirstClassType(), + "Instruction returns a non-scalar type!", &I); + // Check that all uses of the instruction, if they are instructions // themselves, actually have parent basic blocks. If the use is not an // instruction, it is an error! From lattner at cs.uiuc.edu Sun Mar 28 19:04:02 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sun Mar 28 19:04:02 2004 Subject: [llvm-commits] CVS: llvm/lib/VMCore/Type.cpp Message-ID: <200403290017.SAA10827@zion.cs.uiuc.edu> Changes in directory llvm/lib/VMCore: Type.cpp updated: 1.97 -> 1.98 --- Log message: Fix an assertion Contributed by Reid Spencer --- Diffs of the changes: (+1 -1) Index: llvm/lib/VMCore/Type.cpp diff -u llvm/lib/VMCore/Type.cpp:1.97 llvm/lib/VMCore/Type.cpp:1.98 --- llvm/lib/VMCore/Type.cpp:1.97 Fri Mar 26 15:43:22 2004 +++ llvm/lib/VMCore/Type.cpp Sun Mar 28 18:17:20 2004 @@ -412,7 +412,7 @@ ContainedTys.reserve(Types.size()); bool isAbstract = false; for (unsigned i = 0; i < Types.size(); ++i) { - assert(Types[i] != Type::VoidTy && "Void type in method prototype!!"); + assert(Types[i] != Type::VoidTy && "Void type for structure field!!"); ContainedTys.push_back(PATypeHandle(Types[i], this)); isAbstract |= Types[i]->isAbstract(); } From lattner at cs.uiuc.edu Sun Mar 28 19:04:04 2004 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sun Mar 28 19:04:04 2004 Subject: [llvm-commits] CVS: llvm/lib/Bytecode/Reader/Reader.cpp Message-ID: <200403290016.SAA10666@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bytecode/Reader: Reader.cpp updated: 1.103 -> 1.104 --- Log message: Make error message a bit nicer. Contributed by Reid Spencer --- Diffs of the changes: (+1 -1) Index: llvm/lib/Bytecode/Reader/Reader.cpp diff -u llvm/lib/Bytecode/Reader/Reader.cpp:1.103 llvm/lib/Bytecode/Reader/Reader.cpp:1.104 --- llvm/lib/Bytecode/Reader/Reader.cpp:1.103 Sun Feb 8 22:13:38 2004 +++ llvm/lib/Bytecode/Reader/Reader.cpp Sun Mar 28 18:16:01 2004 @@ -303,7 +303,7 @@ V = getValue(Typ, slot, false); // Find mapping... } if (V == 0) - throw std::string("Failed value look-up."); + throw "Failed value look-up for name '" + Name + "'"; BCR_TRACE(4, "Map: '" << Name << "' to #" << slot << ":" << *V; if (!isa(V)) std::cerr << "\n"); From reid at x10sys.com Sun Mar 28 19:09:01 2004 From: reid at x10sys.com (Reid Spencer) Date: Sun Mar 28 19:09:01 2004 Subject: [llvm-commits] [Fwd: PATCH: Typo is StructType assert] Message-ID: <1080503041.25793.78.camel@bashful.x10sys.com> The message below hasn't posted to LLVMdev after several hours so I thought I'd try it here. Reid. -----Forwarded Message----- > From: Reid Spencer > To: LLVMdev List > Subject: PATCH: Typo is StructType assert > Date: Sun, 28 Mar 2004 09:37:46 -0800 > > If you put a VoidTy as a field of a StructType, you get: > > /proj/work/llvm/llvm/lib/VMCore/Type.cpp:380: > llvm::StructType::StructType(const std::vector std::allocator >&): Assertion `Types[i] != > Type::VoidTy && "Void type in method prototype!!"' failed. > > I believe "method prototype" should be "structure field" so the > attached patch fixes this assertion's comment. > > Reid. _______________________ Reid Spencer President & CTO eXtensible Systems, Inc. rspencer at x10sys.com -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20040328/ae316545/attachment.html -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 189 bytes Desc: This is a digitally signed message part Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20040328/ae316545/attachment.bin From sabre at nondot.org Sun Mar 28 19:12:01 2004 From: sabre at nondot.org (Chris Lattner) Date: Sun Mar 28 19:12:01 2004 Subject: [llvm-commits] [Fwd: PATCH: Typo is StructType assert] In-Reply-To: <1080503041.25793.78.camel@bashful.x10sys.com> Message-ID: On Sun, 28 Mar 2004, Reid Spencer wrote: > The message below hasn't posted to LLVMdev after several hours so I > thought I'd try it here. Thanks, applied! In the future, I think that sending patches to the llvm-commits list directly would be better than sending them to llvmdev, unless there is some discussion needed or something. At least it looks like the mail server is waking up :) -Chris > -----Forwarded Message----- > > > From: Reid Spencer > > To: LLVMdev List > > Subject: PATCH: Typo is StructType assert > > Date: Sun, 28 Mar 2004 09:37:46 -0800 > > > > If you put a VoidTy as a field of a StructType, you get: > > > > /proj/work/llvm/llvm/lib/VMCore/Type.cpp:380: > > llvm::StructType::StructType(const std::vector > std::allocator >&): Assertion `Types[i] != > > Type::VoidTy && "Void type in method prototype!!"' failed. > > > > I believe "method prototype" should be "structure field" so the > > attached patch fixes this assertion's comment. > > > > Reid. > > > > _______________________ > Reid Spencer > President & CTO > eXtensible Systems, Inc. > rspencer at x10sys.com > -Chris -- http://llvm.cs.uiuc.edu/ http://www.nondot.org/~sabre/Projects/