<div dir="ltr"><div class="gmail_default" style="font-size:small">Thanks all. Finally find a way to do the mapping.</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">In the metadata, each element (member in C++) has the offset field, which is the offset in the new layout. With this field, I can match each index used by GetElementPtr with the original member. </div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">Regards,<div>Hu Hong</div></div></div></div>
<br><div class="gmail_quote">On 29 December 2016 at 11:00, Daniel Berlin <span dir="ltr"><<a href="mailto:dberlin@dberlin.org" target="_blank">dberlin@dberlin.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Yes.<div>LLVM types != C++ types.</div><div>There is no mapping except that produced if you add debug info.</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="h5">On Wed, Dec 28, 2016 at 6:51 PM, Hong Hu via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><div dir="ltr"><div style="font-size:small">Here is an example:</div><div style="font-size:small"><br></div><div style="font-size:small">I can define two classes: A and Apad:</div><div style="font-size:small"><br></div><div><div>class A {</div><div>    bool b1, b2;</div><div>    double d1;</div><div>    int i1;</div><div>}; </div><div><br></div><div>class Apad {</div><div>    bool b1, b2;</div><div>    bool pad1[6];</div><div>    double d1;</div><div>    int i1;</div><div>    bool pad2[4];</div><div>}; </div><div style="font-size:small"><br></div><div style="font-size:small">A and Apad will have the same layout, from the LLVM IR level:</div><div style="font-size:small"><br></div><div>%class.A = type <{ i8, i8, [6 x i8], double, i32, [4 x i8] }><br></div><div>%class.Apad = type { i8, i8, [6 x i8], double, i32, [4 x i8] }<br></div></div><div class="gmail_extra"><br clear="all"><div><div class="m_-4646102309122169485m_2044450614320578474gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">Regards,<div>Hu Hong</div></div></div></div><div><div class="m_-4646102309122169485h5">
<br><div class="gmail_quote">On 29 December 2016 at 10:44, Hong Hu <span dir="ltr"><<a href="mailto:huhong789@gmail.com" target="_blank">huhong789@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div style="font-size:small">Thanks, Eli.</div><div style="font-size:small"><br></div><div style="font-size:small">Next question is how to get the layout of the original C++ class from LLVM IR? </div><div class="gmail_extra"><br clear="all"><div><div class="m_-4646102309122169485m_2044450614320578474m_3927231417433861438gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">Regards,<div>Hu Hong</div></div></div></div><div><div class="m_-4646102309122169485m_2044450614320578474h5">
<br><div class="gmail_quote">On 29 December 2016 at 01:57, Friedman, Eli <span dir="ltr"><<a href="mailto:efriedma@codeaurora.org" target="_blank">efriedma@codeaurora.org</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>
    <div class="m_-4646102309122169485m_2044450614320578474m_3927231417433861438m_8347775751878978904moz-cite-prefix">On 12/28/2016 5:41 AM, Hong Hu via
      llvm-dev wrote:<br>
    </div>
    <blockquote type="cite">
      <div dir="ltr">
        <div style="font-size:small">Hi all,</div>
        <div style="font-size:small"><br>
        </div>
        <div style="font-size:small">I'm writing a
          pass to understand the memory access to C++ class members. For
          each GetElementPtr instruction, I check the second index to
          the class pointer, to figure out which member it is intended
          to access. </div>
        <div style="font-size:small"><br>
        </div>
        <div style="font-size:small">However, due
          to the structure padding, there are some fake members inserted
          into the structure. For example, when GEP works on the 5th
          element of the padded structure, it may in fact works on the
          originally 3rd one, if there are two paddings before the
          original 3rd member. </div>
        <div style="font-size:small"><br>
        </div>
        <div style="font-size:small">Is there any
          way to map this "5th" access to the original "3rd" one? For
          example, some APIs to tell whether one member is a real
          member, or a padded one?</div>
        <br>
      </div>
    </blockquote>
    <br></span>
    I would suggest converting the index of the struct GEP into an
    offset in bytes; see StructLayout::getElementOffset<wbr>.  You can then
    compare that to the layout of the original C++ class.<span class="m_-4646102309122169485m_2044450614320578474m_3927231417433861438HOEnZb"><font color="#888888"><br>
    <br>
    -Eli<br>
    <pre class="m_-4646102309122169485m_2044450614320578474m_3927231417433861438m_8347775751878978904moz-signature" cols="72">-- 
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project</pre>
  </font></span></div>

</blockquote></div><br></div></div></div></div>
</blockquote></div><br></div></div></div></div>
<br></div></div><span class="">______________________________<wbr>_________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-dev</a><br>
<br></span></blockquote></div><br></div>
</blockquote></div><br></div></div>