From e4f81565ce768256ff3f7acc368c38fa450098cc Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Thu, 17 May 2018 10:52:58 +0000 Subject: Gimple FE support for internal functions This patch gets the gimple FE to parse calls to internal functions. The only non-obvious thing was how the functions should be written to avoid clashes with real function names. One option would be to go the magic number of underscores route, but we already do that for built-in functions, and it would be good to keep them visually distinct. In the end I borrowed the local/internal label convention from asm and used: x = .SQRT (y); 2018-05-17 Richard Sandiford gcc/ * internal-fn.h (lookup_internal_fn): Declare * internal-fn.c (lookup_internal_fn): New function. * gimple.c (gimple_build_call_from_tree): Handle calls to internal functions. * gimple-pretty-print.c (dump_gimple_call): Print "." before internal function names. * tree-pretty-print.c (dump_generic_node): Likewise. * tree-ssa-scopedtables.c (expr_hash_elt::print): Likewise. gcc/c/ * gimple-parser.c: Include internal-fn.h. (c_parser_gimple_statement): Treat a leading CPP_DOT as a call. (c_parser_gimple_call_internal): New function. (c_parser_gimple_postfix_expression): Use it to handle CPP_DOT. Fix typos in comment. gcc/testsuite/ * gcc.dg/gimplefe-28.c: New test. * gcc.dg/asan/use-after-scope-9.c: Adjust expected output for internal function calls. * gcc.dg/goacc/loop-processing-1.c: Likewise. From-SVN: r260316 --- gcc/gimple-pretty-print.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'gcc/gimple-pretty-print.c') diff --git a/gcc/gimple-pretty-print.c b/gcc/gimple-pretty-print.c index 6695526..afe0147 100644 --- a/gcc/gimple-pretty-print.c +++ b/gcc/gimple-pretty-print.c @@ -874,7 +874,7 @@ dump_gimple_call (pretty_printer *buffer, gcall *gs, int spc, if (flags & TDF_RAW) { if (gimple_call_internal_p (gs)) - dump_gimple_fmt (buffer, spc, flags, "%G <%s, %T", gs, + dump_gimple_fmt (buffer, spc, flags, "%G <.%s, %T", gs, internal_fn_name (gimple_call_internal_fn (gs)), lhs); else dump_gimple_fmt (buffer, spc, flags, "%G <%T, %T", gs, fn, lhs); @@ -898,7 +898,10 @@ dump_gimple_call (pretty_printer *buffer, gcall *gs, int spc, pp_space (buffer); } if (gimple_call_internal_p (gs)) - pp_string (buffer, internal_fn_name (gimple_call_internal_fn (gs))); + { + pp_dot (buffer); + pp_string (buffer, internal_fn_name (gimple_call_internal_fn (gs))); + } else print_call_name (buffer, fn, flags); pp_string (buffer, " ("); -- cgit v1.1