Got it. But in that sense, given a `op1` satisfies the
"is_gimple_addressable" predicate (e.g., the _17 in my sample code), how
can I find its def statement? Thank you very much.

Shuai

On Tue, Jun 16, 2020 at 3:19 AM Richard Biener <richard.guent...@gmail.com>
wrote:

> On June 15, 2020 6:58:27 PM GMT+02:00, Shuai Wang <wangshuai...@gmail.com>
> wrote:
> >Thank you very much for your prompt response, Rchard. Sorry I was kinda
> >"learning by doing". I am familiar with LLVM stuff but newbie to GCC
> >specifications.
> >
> >Just want to make sure I got it right; _17 and _16 in the IR code are
> >SSA
> >variables. They are initialized for once and used once. Could you
> >please
> >shed some light on where "non-ssa name" comes in this scenario, and how
> >exactly can I get  _17 = (signed char *) _16 printed out? Thank you
> >very
> >much.
> >
> >Best,
> >Shuai
> >
> >On Tue, Jun 16, 2020 at 12:52 AM Richard Biener
> ><richard.guent...@gmail.com>
> >wrote:
> >
> >> On June 15, 2020 6:31:38 PM GMT+02:00, Shuai Wang via Gcc
> ><gcc@gcc.gnu.org>
> >> wrote:
> >> >Hello,
> >> >
> >> >Suppose given the following SSA statement generated by the `sanopt`
> >> >pass:
> >> >
> >> >   _17 = (signed char *) _16;
> >> >   _18 = *_17;
> >> >
> >> >I am using the following code to identify that _17 depends on _16:
> >> >
> >> >// def_stmt refers to _18 = &_17;
> >> >for (unsigned i = 1; i < gimple_num_ops(def_stmt); i++) {
> >> >         op1 = gimple_assign_rhs1(def_stmt);
>
> op1 is not an SSA name here.
>
> >> >         if (is_gimple_addressable(op1))
>
> That predicate does not make sense on SSA names
>
>  {
> >> >              gimple* def_stmt = SSA_NAME_DEF_STMT(op1);
> >> >          print_gimple_stmt(stderr, def_stmt, 0, TDF_SLIM); // crash
> >at
> >> >this point
> >> >         }
> >> >
> >> >It crashes with the following call stack:
> >> >
> >> >0xb5cd5f crash_signal
> >> >        ../../gcc-10.1.0/gcc/toplev.c:328
> >> >0x1452134 pp_format(pretty_printer*, text_info*)
> >> >        ../../gcc-10.1.0/gcc/pretty-print.c:1828
> >> >0x14533e4 pp_printf(pretty_printer*, char const*, ...)
> >> >        ../../gcc-10.1.0/gcc/pretty-print.c:1773
> >> >0x8dcc81 print_gimple_stmt(_IO_FILE*, gimple*, int, dump_flag)
> >> >        ../../gcc-10.1.0/gcc/gimple-pretty-print.c:157
> >> >
> >> >I tried hard but just cannot understand why this would crash.
> >Indeed,
> >> >this
> >> >code works pretty well when printing out other dependency
> >statements,
> >> >but
> >> >just gets stuck in front of pointer dereference like _18 = *_17.
> >> >
> >> >Any suggestion would be appreciated. Thank you!
> >>
> >> Build your compiler with - - enable-checking and you'll figure you
> >> reference SSA_NAME_DEF_STMT of a NON-SSA_NAME. I suggest you learn to
> >use a
> >> debugger.
> >>
> >> Richard.
> >>
> >> >Best,
> >> >Shuai
> >>
> >>
>
>

Reply via email to