On Mon, Oct 11, 2021 at 2:51 AM David Malcolm <dmalc...@redhat.com> wrote: > > On Sun, 2021-10-10 at 23:04 +0530, Shubham Narlawar via Gcc wrote: > > Hello, > > > > Is there a direct way to print the name of the function call in gimple > > call > > statement? > > > > For example - > > > > void bar() { > > a = foo(); //gimple* stmt > > } > > > > I want to print "foo" from the above gimple*. > > > > I traced debug_gimple_stmt(gimple*) but it seems complex to just print > > "foo". > > Bear in mind that not every gimple call is calling a specific function; > it could be a jump through a function pointer. > > tree fn_ptr = gimple_call_fn (call); > > However, for simple cases like the above, fn_ptr will be an ADDR_EXPR > node, and the zeroth operand of the ADDR_EXPR node will get you the > fndecl (of "foo"). > tree fn_decl = TREE_OPERAND (fn_ptr, 0); > > Given a decl, you can then use: > tree identifier = DECL_NAME (fn_decl); > to get the identifier node for the decl ("foo"). > > Finally, you can use > const char *str = IDENTIFIER_POINTER (identifier) > to get a 0-terminated string from the identifier that you can print. > > Hope this is helpful
This is helpful! Thank you David for the detailed explanation. This is exactly what I was looking for. Now, I am able to get the function name using above checks. Regards, Shubham > Dave >