<div dir="ltr">John, thanks for your helpful advice. <div><br></div><div>My ultimate goal is to construct a full instruction-level program dependence graph for a given IR file. The hard point is how to establish the correct data dependence edges when some function arguments are multi-level pointers. To solve this problem I hope to check the point-to level for each pointer variable. I think the data dependence through pointers can be described more accurately in this way. Unfortunately i didn't find any available interface to finish this job, so i guess i have to write it by myself.      </div><div><br></div><div>Best regards,</div><div><br></div><div>Shen</div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jul 17, 2015 at 2:22 PM, John Criswell <span dir="ltr"><<a href="mailto:jtcriswel@gmail.com" target="_blank">jtcriswel@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 bgcolor="#FFFFFF" text="#000000"><span class="">
    <div>On 7/17/15 1:06 PM, Shen Liu wrote:<br>
    </div>
    <blockquote type="cite">
      
      <div dir="ltr"> John, thanks for you answer! But as far as I know
        LLVM doesn't provide any interface for finding the pointee of a
        pointer directly, so i have to process a multi-level pointer i
        need to write my own function to check pointers level by level,
        is that right?<br>
      </div>
    </blockquote>
    <br></span>
    I'm not sure what you're trying to do.  If you're trying to
    determine the LLVM pointer type and the LLVM type to which it
    points, what I've said will work.<br>
    <br>
    If you're trying to do something more complicated, then you need to
    explain more clearly what you want to do.  I think it would also
    help if you "jumped up a level" and explained what your end goal is
    so that the community can give you better advice.  Based on your
    previous emails, it seems like you're asking very specific questions
    instead of asking how to best achieve your overall goal.<br>
    <br>
    Regards,<br>
    <br>
    John Criswell<span class=""><br>
    <br>
    <br>
    <blockquote type="cite">
      <div class="gmail_extra"><br>
        <div class="gmail_quote">On Fri, Jul 17, 2015 at 1:47 PM, John
          Criswell <span dir="ltr"><<a href="mailto:jtcriswel@gmail.com" target="_blank">jtcriswel@gmail.com</a>></span>
          wrote:<br>
          <blockquote class="gmail_quote">
            <div><span>
                <div>On 7/17/15 12:38 PM, Shen Liu wrote:<br>
                </div>
                <blockquote type="cite">
                  <div dir="ltr">Hi all, as a LLVM beginner I would like
                    to know how can i check the pointer types with
                    different levels like int 32* and int 32**, int
                    32***? 
                    <div><br>
                    </div>
                    <div>By using value->getType()->isPointerTy()
                      i can just know they are pointers. But the dump
                      results clearly show they are different. Is there
                      a good way to calculate their actual point to
                      levels? Thanks!</div>
                  </div>
                </blockquote>
                <br>
              </span> You will need to use dyn_cast<PointerType>
              to cast the Type * into a PointerType *.  Once you do
              that, you can find the Type * that the PointerType points
              to.<br>
              <br>
              Regards,<br>
              <br>
              John Criswell<br>
              <br>
              <blockquote type="cite">
                <div dir="ltr">
                  <div><br>
                  </div>
                  <div><br>
                  </div>
                  <div>Best regards,</div>
                  <div><br>
                  </div>
                  <div>Shen</div>
                </div>
                <br>
                <fieldset></fieldset>
                <br>
                <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><span>
</span></pre>
                <span> </span></blockquote>
              <span> <br>
                <br>
                <pre cols="72">-- 
John Criswell
Assistant Professor
Department of Computer Science, University of Rochester
<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__www.cs.rochester.edu_u_criswell&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=Mfk2qtn1LTDThVkh6-oGglNfMADXfJdty4_bhmuhMHA&m=b9D3xKTwS8mmCz-JWESxD2SosdH3GAbMr4pEVj5XsEY&s=y_kEP-3vRAdbyA7llY5xP9Am0suX7BA84OQQsS7d3kI&e=" target="_blank">http://www.cs.rochester.edu/u/criswell</a></pre>
              </span></div>
          </blockquote>
        </div>
        <br>
      </div>
    </blockquote>
    <br>
    <br>
    <pre cols="72">-- 
John Criswell
Assistant Professor
Department of Computer Science, University of Rochester
<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__www.cs.rochester.edu_u_criswell&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=Mfk2qtn1LTDThVkh6-oGglNfMADXfJdty4_bhmuhMHA&m=b9D3xKTwS8mmCz-JWESxD2SosdH3GAbMr4pEVj5XsEY&s=y_kEP-3vRAdbyA7llY5xP9Am0suX7BA84OQQsS7d3kI&e=" target="_blank">http://www.cs.rochester.edu/u/criswell</a></pre>
  </span></div>

</blockquote></div><br></div>