[llvm-commits] [llvm] r159876 - in /llvm/trunk:	lib/Transforms/InstCombine/InstructionCombining.cpp	test/Transforms/InstCombine/badmalloc.ll	test/Transforms/InstCombine/invoke.ll	test/Transforms/InstCombine/malloc-free-delete.ll	test/Transforms/InstCom
    Nuno Lopes 
    nunoplopes at sapo.pt
       
    Sun Jul  8 13:01:04 PDT 2012
    
    
  
>> --- llvm/trunk/lib/Transforms/InstCombine/InstructionCombining.cpp 
>> (original)
>> +++ llvm/trunk/lib/Transforms/InstCombine/InstructionCombining.cpp Fri 
>> Jul  6 18:09:25 2012
>> @@ -1137,12 +1137,29 @@
>>         }
>>       }
>>       if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(U)) {
>> -      if (II->getIntrinsicID() == Intrinsic::lifetime_start ||
>> -          II->getIntrinsicID() == Intrinsic::lifetime_end) {
>> +      switch (II->getIntrinsicID()) {
>> +      default: return false;
>> +      case Intrinsic::memmove:
>> +      case Intrinsic::memcpy:
>> +      case Intrinsic::memset: {
>> +        MemIntrinsic *MI = cast<MemIntrinsic>(II);
>> +        if (MI->isVolatile() || MI->getRawDest() != V)
>
> why exclude volatile stores?  If all that is being done to the allocated 
> memory
> is doing a bunch of volatile stores to it, I don't see why you can't 
> discard
> them and the allocation too.
I thought about that, but.. I guess it's better not to mess around with 
volatiles. And I don't even think it's legal (C standard wise) to remove it.
Nuno 
    
    
More information about the llvm-commits
mailing list