[llvm-commits] [llvm] r84292 - in /llvm/trunk: examples/BrainF/ include/llvm/ lib/AsmParser/ lib/Bitcode/Reader/ lib/Transforms/IPO/ lib/Transforms/Scalar/ lib/VMCore/ test/Transforms/GlobalOpt/ test/Transforms/IndMemRem/ test/Transforms/InstCombine/

Chris Lattner clattner at apple.com
Wed Oct 21 17:38:49 PDT 2009


On Oct 21, 2009, at 12:12 PM, Victor Hernandez wrote:
>> This should use V->replaceAllUsesWith() instead of manually walking  
>> the use list.  Doing this will handle non-call users as well as  
>> call users.  What happens if the prototypes don't agree for these  
>> two functions?  I think you'll get an abort.  Please fix by using a  
>> constantexpr bitcast to the expected type.
>
> Fixed:

Much nicer, thanks.

>>> +    const Type* IntPtrTy = Type::getInt32Ty(Context);
>>> +    const Type* Int8PtrTy =  
>>> PointerType::getUnqual(Type::getInt8Ty(Context));
>>
>> Please use 'const Type *IntPtrTy', watch the * placement.  There is  
>> now a helper function that you can use instead of  
>> 'PointerType::getUnqual(Type::getInt8Ty(Context));', please use it.
>
> Fixed:
>   const Type *IntPtrTy = Type::getInt32Ty(Context);
>   const Type *Int8PtrTy = Type::getInt8PtrTy(Context);

Ok:

+  // Autoupgrade old malloc instruction to malloc call.
+  // FIXME: Remove in LLVM 3.0.
+  const Type *IntPtrTy = Type::getInt32Ty(Context);
+  const Type *Int8PtrTy = Type::getInt8PtrTy(Context);
+  if (!MallocF)
+    // Prototype malloc as "void *(int32)".
+    // This function is renamed as "malloc" in ValidateEndOfModule().
+    MallocF = cast<Function>(M->getOrInsertFunction(NULL, Int8PtrTy,
+                                                    IntPtrTy, NULL));
+  Inst = CallInst::CreateMalloc(BB, IntPtrTy, Ty, Size, MallocF);

It doesn't matter because this is very cold code, but you might as  
well sink the 'get' of Int8PtrTy into the 'if' for tidiness.

>
>>
>>> +    if (!MallocF)
>>> +      // Prototype malloc as "void *autoupgrade_malloc(int32)".
>>> +      MallocF = cast<Function>(M- 
>>> >getOrInsertFunction("autoupgrade_malloc",
>>> +                               Int8PtrTy, IntPtrTy, NULL));
>>
>> Why do you bother naming autoupgrade_malloc?  This is in the user's  
>> namespace, so it can conflict with a function named  
>> autoupgrade_malloc in the user's code.  Please just leave the name  
>> empty, making it impossible for it to conflict.
>
> Fixed.

Thanks.  While passing in NULL to getOrInsertFunction will probably  
work, please pass in "" instead.  This makes it obvious that it is the  
name you are specifying.

>>
>> The old code was correct because it would delete the call to  
>> malloc, so it is safe to assume that the malloc (which never got  
>> run) never ran out of space.  The transformation that does this  
>> should just be removed.
>
> I fixed InstCombine so that the icmp is removed only if the malloc  
> call is removed (which requires explicit removal because the  
> Worklist won't DCE any calls since they can have side-effects).  I  
> also updated the testcase to use FileCheck.

Looks good.

Thanks Victor,

-Chris
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20091021/f178e735/attachment.html>


More information about the llvm-commits mailing list