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

Dingbao Xie xiedingbao at gmail.com
Wed Nov 5 14:04:26 PST 2014


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?

Thanks in advance.


-- 
Dingbao Xie
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20141105/8a7f40e8/attachment.html>


More information about the llvm-dev mailing list