[LLVMdev] How to lower the intrinsic function 'llvm.objectsize'?
Ahmed Bougacha
ahmed.bougacha at gmail.com
Wed Nov 5 14:28:15 PST 2014
On Wed, Nov 5, 2014 at 2:04 PM, Dingbao Xie <xiedingbao at gmail.com> 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:
>
> 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();
> Value *result = ConstantInt::get(ii->getType(), bit_size);
> ii->replaceAllUsesWith(result);
> ii->removeFromParent();
> delete ii;
> break;
> }
> }
> }
>
> I'm new to LLVM and not sure whether the implementation is correct. Can
> anybody tell me whether the implementation is correct?
If you don't want to do it yourself you can probably just use
getObjectSize, declared in include/llvm/Analysis/MemoryBuiltins.h.
Also, two things regarding your implementation:
- the intrinsic returns the size in bytes, not bits; generally, when
dealing with memory, bytes are the relevant unit anyway.
- llvm.objectsize returns the size of the "object", not just the
pointee type. So for instance, if you have an i8* pointer to a 10 byte
array, it would return 10, not 1. Before what you quoted, the
documentation says "An object in this context means an allocation of a
specific class, structure, array, or other object.".
Good luck,
- Ahmed
> 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
>
More information about the llvm-dev
mailing list