<div dir="ltr"><div><div><div><div><div>Thanks for your reply.<br></div>I'm attempting to expand KLEE to support this intrinsic function.<br></div>That's why I need to handle this myself.<br></div>According to the reply, the correct implementation should first find the definition of the object and then determine the <br></div>size of the object. <br></div>BTW, can I just refer to the implementation in InstCombineCalls.cpp.<div><div><div><div><div><div><br></div></div></div></div></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Nov 5, 2014 at 2:24 PM, Matt Arsenault <span dir="ltr"><<a href="mailto:Matthew.Arsenault@amd.com" target="_blank">Matthew.Arsenault@amd.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div bgcolor="#FFFFFF" text="#000000"><span class="">
    <div>On 11/05/2014 02:04 PM, Dingbao Xie
      wrote:<br>
    </div>
    <blockquote type="cite">
      
      <div dir="ltr">
        <div>
          <p>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:</p>
        </div>
      </div>
    </blockquote></span>
    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.<span class=""><br>
    <br>
    <blockquote type="cite">
      <div dir="ltr">
        <div>
          <pre><code>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();</code></pre>
        </div>
      </div>
    </blockquote></span>
    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.<span class=""><br>
    <br>
    <code></code>
    <blockquote type="cite">
      <div dir="ltr">
        <div>
          <pre><code>
   Value *result = ConstantInt::get(ii->getType(), bit_size);
   ii->replaceAllUsesWith(result);
   ii->removeFromParent();
   delete ii;</code></pre>
        </div>
      </div>
    </blockquote>
    </span><code>You shouldn't use delete here. You probably want
      ii->eraseFromParent().<br>
    </code>
    <blockquote type="cite"><span class="">
      <div dir="ltr">
        <div>
          <pre><code>
   break;
  }
 }
}
</code></pre>
          <p>I'm new to LLVM and not sure whether the implementation is
            correct.
            Can anybody tell me whether the implementation is correct?</p>
          <p>
            Thanks in advance.</p>
        </div>
        <br clear="all">
        <br>
        -- <br>
        <div>
          <div dir="ltr">
            <div>Dingbao Xie<br>
            </div>
          </div>
        </div>
      </div>
      <br>
      <fieldset></fieldset>
      <br>
      </span><pre>_______________________________________________
LLVM Developers mailing list
<a href="mailto:LLVMdev@cs.uiuc.edu" target="_blank">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a>
</pre>
    </blockquote>
    <br>
  </div>

</blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature"><div dir="ltr"><div>Dingbao Xie<br></div></div></div>
</div>