[llvm-commits] [llvm] r95269 - in /llvm/trunk: lib/Bitcode/Writer/ValueEnumerator.cpp test/Assembler/functionlocal-metadata.ll
Victor Hernandez
vhernandez at apple.com
Thu Feb 4 13:51:55 PST 2010
I just tried the "lli fib.bc" example in that bug, and it works:
[marcie:tot/llvm/src] hernande% lli fib.bc
fib(40) == 165580141
But I have no idea if I am responsible. In fact, since that crash was occuring in metadata attachments and complaining about non-function-local metadata, I would guess that I am not responsible.
Victor
On Feb 4, 2010, at 12:11 PM, Nick Lewycky wrote:
> Victor Hernandez wrote:
>> Author: hernande
>> Date: Wed Feb 3 19:13:08 2010
>> New Revision: 95269
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=95269&view=rev
>> Log:
>> Fix (and test) function-local metadata that occurs before the instruction that it refers to; fix is to not enumerate operands of function-local metadata until after all instructions have been enumerated
>
> Does this fix PR5278?
>
> Nick
>
>> Modified:
>> llvm/trunk/lib/Bitcode/Writer/ValueEnumerator.cpp
>> llvm/trunk/test/Assembler/functionlocal-metadata.ll
>>
>> Modified: llvm/trunk/lib/Bitcode/Writer/ValueEnumerator.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Writer/ValueEnumerator.cpp?rev=95269&r1=95268&r2=95269&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/Bitcode/Writer/ValueEnumerator.cpp (original)
>> +++ llvm/trunk/lib/Bitcode/Writer/ValueEnumerator.cpp Wed Feb 3 19:13:08 2010
>> @@ -408,21 +408,25 @@
>>
>> FirstInstID = Values.size();
>>
>> + SmallVector<MDNode *, 8> FunctionLocalMDs;
>> // Add all of the instructions.
>> for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB) {
>> for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I!=E; ++I) {
>> for (User::const_op_iterator OI = I->op_begin(), E = I->op_end();
>> OI != E; ++OI) {
>> if (MDNode *MD = dyn_cast<MDNode>(*OI))
>> - if (!MD->isFunctionLocal())
>> - // These were already enumerated during ValueEnumerator creation.
>> - continue;
>> - EnumerateOperandType(*OI);
>> + if (MD->isFunctionLocal())
>> + // Enumerate metadata after the instructions they might refer to.
>> + FunctionLocalMDs.push_back(MD);
>> }
>> if (!I->getType()->isVoidTy())
>> EnumerateValue(I);
>> }
>> }
>> +
>> + // Add all of the function-local metadata.
>> + for (unsigned i = 0, e = FunctionLocalMDs.size(); i != e; ++i)
>> + EnumerateOperandType(FunctionLocalMDs[i]);
>> }
>>
>> void ValueEnumerator::purgeFunction() {
>>
>> Modified: llvm/trunk/test/Assembler/functionlocal-metadata.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assembler/functionlocal-metadata.ll?rev=95269&r1=95268&r2=95269&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/test/Assembler/functionlocal-metadata.ll (original)
>> +++ llvm/trunk/test/Assembler/functionlocal-metadata.ll Wed Feb 3 19:13:08 2010
>> @@ -2,6 +2,8 @@
>>
>> define void @Foo(i32 %a, i32 %b) {
>> entry:
>> + call void @llvm.dbg.value(metadata !{ i32* %1 }, i64 16, metadata !"bar")
>> +; CHECK: call void @llvm.dbg.value(metadata !{i32* %1}, i64 16, metadata !"bar")
>> %0 = add i32 %a, 1 ;<i32> [#uses=1]
>> %two = add i32 %b, %0 ;<i32> [#uses=0]
>> %1 = alloca i32 ;<i32*> [#uses=1]
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>
More information about the llvm-commits
mailing list