[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