[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