[llvm-commits] [llvm] r67139 - in /llvm/trunk: lib/Transforms/IPO/DeadArgumentElimination.cpp test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll

Chris Lattner clattner at apple.com
Wed Mar 18 11:22:16 PDT 2009


On Mar 18, 2009, at 10:46 AM, Bill Wendling wrote:

> Chris,
>
> These were causing XPASSes (on Darwin) in these tests:
>
> Sending        test/FrontendC/2009-03-13-dbg.c
> Sending        test/FrontendC++/2009-02-16-CtorNames-dbg.cpp
> Sending        test/FrontendC++/2009-03-17-dbg.cpp
>
> Is this expected? I modified them to make them passing. Please check
> to see if that's correct.

Are you sure?  I can't imagine how these would be related.

-Chris

>
>
> Thanks!
> -bw
>
> On Tue, Mar 17, 2009 at 5:31 PM, Chris Lattner <sabre at nondot.org>  
> wrote:
>> Author: lattner
>> Date: Tue Mar 17 19:31:45 2009
>> New Revision: 67139
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=67139&view=rev
>> Log:
>> Fix PR3807 by inserting 'insertelement' instructions in the normal  
>> dest of
>> an invoke instead of after the invoke (in its block), which is  
>> invalid.
>>
>> Added:
>>    llvm/trunk/test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll
>> Modified:
>>    llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp
>>
>> Modified: llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp?rev=67139&r1=67138&r2=67139&view=diff
>>
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> =====================================================================
>> --- llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp  
>> (original)
>> +++ llvm/trunk/lib/Transforms/IPO/DeadArgumentElimination.cpp Tue  
>> Mar 17 19:31:45 2009
>> @@ -798,9 +798,13 @@
>>         // Replace by null for now.
>>         Call->replaceAllUsesWith(Constant::getNullValue(Call- 
>> >getType()));
>>       } else {
>> -        assert(isa<StructType>(RetTy) && "Return type changed, but  
>> not into a"
>> -                                         "void. The old return  
>> type must have"
>> -                                         "been a struct!");
>> +        assert(isa<StructType>(RetTy) &&
>> +               "Return type changed, but not into a void. The old  
>> return type"
>> +               " must have been a struct!");
>> +        Instruction *InsertPt = Call;
>> +        if (InvokeInst *II = dyn_cast<InvokeInst>(Call))
>> +          InsertPt = II->getNormalDest()->begin();
>> +
>>         // We used to return a struct. Instead of doing smart stuff  
>> with all the
>>         // uses of this struct, we will just rebuild it using
>>         // extract/insertvalue chaining and let instcombine clean  
>> that up.
>> @@ -813,12 +817,13 @@
>>             if (RetTypes.size() > 1)
>>               // We are still returning a struct, so extract the  
>> value from our
>>               // return value
>> -              V = ExtractValueInst::Create(New, NewRetIdxs[i],  
>> "newret", Call);
>> +              V = ExtractValueInst::Create(New, NewRetIdxs[i],  
>> "newret",
>> +                                           InsertPt);
>>             else
>>               // We are now returning a single element, so just  
>> insert that
>>               V = New;
>>             // Insert the value at the old position
>> -            RetVal = InsertValueInst::Create(RetVal, V, i,  
>> "oldret", Call);
>> +            RetVal = InsertValueInst::Create(RetVal, V, i,  
>> "oldret", InsertPt);
>>           }
>>         // Now, replace all uses of the old call instruction with  
>> the return
>>         // struct we built
>>
>> Added: llvm/trunk/test/Transforms/DeadArgElim/2009-03-17-MRE- 
>> Invoke.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll?rev=67139&view=auto
>>
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> =====================================================================
>> --- llvm/trunk/test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll  
>> (added)
>> +++ llvm/trunk/test/Transforms/DeadArgElim/2009-03-17-MRE-Invoke.ll  
>> Tue Mar 17 19:31:45 2009
>> @@ -0,0 +1,15 @@
>> +; RUN: llvm-as < %s | opt -deadargelim | llvm-dis
>> +; PR3807
>> +
>> +define internal { i32, i32 } @foo() {
>> +  ret {i32,i32} {i32 42, i32 4}
>> +}
>> +
>> +define i32 @bar() {
>> +  %x = invoke {i32,i32} @foo() to label %T unwind label %T2
>> +T:
>> +  %y = extractvalue {i32,i32} %x, 1
>> +  ret i32 %y
>> +T2:
>> +  unreachable
>> +}
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>
> _______________________________________________
> 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