[LLVMdev] How to lower the intrinsic function 'llvm.objectsize'?

Matt Arsenault Matthew.Arsenault at amd.com
Wed Nov 5 14:24:52 PST 2014


On 11/05/2014 02:04 PM, Dingbao Xie wrote:
>
> The documentation of LLVM says that "The llvm.objectsize intrinsic is 
> lowered to a constant representing the size of the object concerned". 
> I'm attempting to lower this intrinsic function to a constant in a 
> pass. Below is the code snippet that I wrote:
>
Why do you need to handle this yourself? This should already be handled 
for you (see InstCombineCalls.cpp). However, you have a few problems 
with this.

> |for (BasicBlock::iterator i = b.begin(), ie = b.end();
>     (i != ie) && (block_split == false);) {
>   IntrinsicInst *ii = dyn_cast<IntrinsicInst>(&*i);
>   ++i;
>   if(ii) {
>   switch (ii->getIntrinsicID()) {
>    case Intrinsic::objectsize: {
>     IRBuilder<> builder(ii->getParent(), ii);
>     Value *op1 = ii->getArgOperand(0); //i8*
>     uint64_t bit_size = op1->getType()->getPointerElementType()->getPrimitiveSizeInBits();|
First, you can't always determine the size. Just looking at the pointer 
element type isn't enough. This requires finding the object definition, 
which can fail, and the existing handling uses llvm::getObjectSize to 
for. In general when looking at type sizes you don't want to use 
getPrimitiveSizeInBits, and should use the DataLayout for various reasons.

||
> |
>     Value *result = ConstantInt::get(ii->getType(), bit_size);
>     ii->replaceAllUsesWith(result);
>     ii->removeFromParent();
>     delete ii;|
|You shouldn't use delete here. You probably want ii->eraseFromParent().
|
> |
>     break;
>    }
>   }
> }
> |
>
> I'm new to LLVM and not sure whether the implementation is correct. 
> Can anybody tell me whether the implementation is correct?
>
> Thanks in advance.
>
>
>
> -- 
> Dingbao Xie
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20141105/407f8e57/attachment.html>


More information about the llvm-dev mailing list