public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: 易会战 <huizhanyi@foxmail.com>
To: "Richard Biener" <richard.guenther@gmail.com>
Cc: gcc <gcc@gcc.gnu.org>
Subject: Re: how to find variable related to a virtual ssa name
Date: Wed, 13 May 2020 17:13:26 +0800	[thread overview]
Message-ID: <tencent_4B29EF5897F177F22DF6B7EE48E7DB4AC809@qq.com> (raw)

Which pass computes the points-to info, maybe There are some details? Do you know it?



---Original---
From: "Richard Biener"<richard.guenther@gmail.com&gt;
Date: Wed, May 13, 2020 15:00 PM
To: "易会战"<huizhanyi@foxmail.com&gt;;
Cc: "gcc"<gcc@gcc.gnu.org&gt;;
Subject: Re: how to find variable related to a virtual ssa name


On Wed, May 13, 2020 at 6:03 AM 易会战 <huizhanyi@foxmail.com&gt; wrote:
&gt;
&gt; It seems the function ptr_deref_may_alias_global_p cannot give right result.
&gt; For example,
&gt; int func(int size, int i)
&gt; {
&gt; int * sum;
&gt; sum = malloc()
&gt; ....here some code access sum pointing to memory
&gt; return sum[i]
&gt; }
&gt; ptr_deref_may_alias_global_p tell me it is a local memory access. indeed sum is a local variable, but the pointer point to heap memory.
&gt; In fact there is a similiar function ref_may_alias_global_p, and it give similiar result.

GCC can be clever and notice your malloc() result does not escape the function
which means stores to it are dead once you leave it.&nbsp; For this reason
it does not
mark the memory global.&nbsp; So make sure the allocated pointer escapes
and try again.

&gt;
&gt;
&gt; ---Original---
&gt; From: "Richard Biener"<richard.guenther@gmail.com&gt;
&gt; Date: Tue, May 12, 2020 22:20 PM
&gt; To: "易会战"<huizhanyi@foxmail.com&gt;;
&gt; Cc: "gcc"<gcc@gcc.gnu.org&gt;;
&gt; Subject: Re: how to find variable related to a virtual ssa name
&gt;
&gt; On Tue, May 12, 2020 at 4:16 PM 易会战 <huizhanyi@foxmail.com&gt; wrote:
&gt; &gt;
&gt; &gt; thanks a lot. I will check your advice.
&gt; &gt; Can you give some explaination about memory ssa, and how to use it. I check internal, cannot get it. Maybe you know some examples or some more materials.
&gt;
&gt; memory SSA in GCC is simply a SSA chain of all memory statements local
&gt; to a function
&gt; with a _single_ underlying variable (.MEM) and thus only one SSA name
&gt; live at the same
&gt; time.&nbsp; It can be used to quickly traverse stores via use-&gt;def chains
&gt; and loads inbetween
&gt; two stores via immediate uses.
&gt;
&gt; Richard.
&gt;
&gt; &gt; ---Original---
&gt; &gt; From: "Richard Biener"<richard.guenther@gmail.com&gt;
&gt; &gt; Date: Tue, May 12, 2020 22:02 PM
&gt; &gt; To: "易会战"<huizhanyi@foxmail.com&gt;;
&gt; &gt; Cc: "gcc"<gcc@gcc.gnu.org&gt;;
&gt; &gt; Subject: Re: how to find variable related to a virtual ssa name
&gt; &gt;
&gt; &gt; On Tue, May 12, 2020 at 2:44 PM 易会战 via Gcc <gcc@gcc.gnu.org&gt; wrote:
&gt; &gt; &gt;
&gt; &gt; &gt; hi, I am working on gcc ssa name. For each function, we can traverse all defined ssa name by macro FOR_EACH_SSA_NAME. If a ssa name is default definition for a symbol (check SSA_NAME_IS_DEFAULT_DEF) , I can get the symbol by SSA_NAME_VAR. But for a virtual DEFAULT DEF, I cannot get it, SSA_NAME_VAR return a identifier named .MEM. I cannot find which variable related to the default definition. Why and how I should find the related variable?
&gt; &gt; &gt;
&gt; &gt; &gt;
&gt; &gt; &gt; By the way , I give my current work,&amp;nbsp; I wish find a MEM_REF refer to global/heap memory or local stack. I try my best to get a correct memory type. Since MEM_REF have a base address, which is often a ssa name. Athough it is not virtual ssa name. But I find just check ssa name data flow is not enough to get the info.
&gt; &gt; &gt; For example, a malloc function allocate some heap memory and record the address in a global ptr. On gimple ssa IR, the malloc function return a address assigned to a ssa name , then ssa name assign the value to the global ptr. When i check ssa name defined by the global ptr, I donot know if the ptr point to global memory or local memory.
&gt; &gt; &gt; Please see the gimple code:
&gt; &gt; &gt; _2 = malloc()
&gt; &gt; &gt; ptr = _2
&gt; &gt; &gt; _3 = ptr
&gt; &gt; &gt; MEM_REF[BASE _3]
&gt; &gt; &gt; I wish get _3&amp;nbsp; is a address pointing to global memory. But just from _3=ptr, cannot judge it.&amp;nbsp;
&gt; &gt; &gt; I wish memory SSA can help solve the problem.
&gt; &gt;
&gt; &gt; memory SSA will not solve this problem.&nbsp; You can instead query
&gt; &gt; points-to information
&gt; &gt; on _3 for example by calling ptr_deref_may_alias_global_p (_3) which internally
&gt; &gt; looks at SSA_NAME_PTR_INFO which contains the solution of the
&gt; &gt; points-to computation.
&gt; &gt;
&gt; &gt; Richard.
&gt; &gt;
&gt; &gt; &gt;
&gt; &gt; &gt; Or gcc gives the info at other pass? wish get some advice. Thanks a lot.

             reply	other threads:[~2020-05-13  9:13 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-13  9:13 易会战 [this message]
  -- strict thread matches above, loose matches on Subject: below --
2020-05-14  3:55 易会战
2020-05-14  8:04 ` Richard Biener
2020-05-14  1:37 易会战
2020-05-13  9:33 易会战
2020-05-13 11:10 ` Richard Biener
     [not found] <tencent_FCD65B7C8AFC977DFABBFEF99F1206CA5E07@qq.com>
2020-05-13  9:28 ` Richard Biener
2020-05-12 11:51 易会战
2020-05-12 14:02 ` Richard Biener
2020-05-12 14:16   ` 易会战
2020-05-12 14:20     ` Richard Biener
     [not found]       ` <tencent_2DD5153F34FF6F5FF02E78FEBF848CB29D05@qq.com>
2020-05-13  6:59         ` Richard Biener

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=tencent_4B29EF5897F177F22DF6B7EE48E7DB4AC809@qq.com \
    --to=huizhanyi@foxmail.com \
    --cc=gcc@gcc.gnu.org \
    --cc=richard.guenther@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).