[llvm-commits] [llvm] r51207 -	/llvm/trunk/lib/Transforms/IPO/PruneEH.cpp
    Dale Johannesen 
    dalej at apple.com
       
    Fri May 16 16:02:04 PDT 2008
    
    
  
On May 16, 2008, at 3:15 PM, Duncan Sands wrote:
> Hi Dale,
>
>> -    if (F == 0) {
>> +    if (F == 0 || (F->hasWeakLinkage() && !F->doesNotThrow())) {
>>       SCCMightUnwind = true;
>>       SCCMightReturn = true;
>>     } else if (F->isDeclaration()) {
>
> this is pessimistic for functions that have the noreturn attribute
> but not the nounwind attribute.  In fact the noreturn and nounwind
> cases are exactly analogous.  How about the following instead:
>
>    if (F == 0) {
>      SCCMightUnwind = true;
>      SCCMightReturn = true;
>    } else if (F->isDeclaration() || F->hasWeakLinkage()) {
>      SCCMightUnwind |= !F->doesNotThrow();
>      SCCMightReturn |= !F->doesNotReturn();
>    } else {
Looks reasonable, will check it out.
> PS: Mightn't there be a similar problem with any IPO analysis or
> transform that looks at bodies of functions?  Deductions made
> from a body with weak linkage would be wrong...  I'm thinking of
> Andersen's for example, but there might be many others...
Indeed there might.  I haven't done a full audio, fixing things as  
they show up...
    
    
More information about the llvm-commits
mailing list