diff options
author | Rubin Gerritsen <rubin.gerritsen@gmail.com> | 2024-07-16 21:11:24 +0200 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2024-07-18 09:44:29 +0200 |
commit | cee56fe0ba757cae17dcc4be216cea88be76e740 (patch) | |
tree | 5c242b1a68d98606eb38b5423c8e36c3454f155c | |
parent | 8c67dc40459e3d72e8169b099cc8c5dbdb759da3 (diff) | |
download | gcc-cee56fe0ba757cae17dcc4be216cea88be76e740.zip gcc-cee56fe0ba757cae17dcc4be216cea88be76e740.tar.gz gcc-cee56fe0ba757cae17dcc4be216cea88be76e740.tar.bz2 |
gimple-fold: consistent dump of builtin call simplifications
Previously only simplifications of the `__st[xrp]cpy_chk`
were dumped. Now all call replacement simplifications are
dumped.
Examples of statements with corresponding dumpfile entries:
`printf("mystr\n");`:
optimized: simplified printf to __builtin_puts
`printf("%c", 'a');`:
optimized: simplified printf to __builtin_putchar
`printf("%s\n", "mystr");`:
optimized: simplified printf to __builtin_puts
The below test suites passed for this patch
* The x86 bootstrap test.
* Manual testing with some small example code manually
examining dump logs, outputting the lines mentioned above.
gcc/ChangeLog:
* gimple-fold.cc (dump_transformation): Moved definition.
(replace_call_with_call_and_fold): Calls dump_transformation.
(gimple_fold_builtin_stxcpy_chk): Removes call to
dump_transformation, now in replace_call_with_call_and_fold.
(gimple_fold_builtin_stxncpy_chk): Removes call to
dump_transformation, now in replace_call_with_call_and_fold.
Signed-off-by: Rubin Gerritsen <rubin.gerritsen@gmail.com>
-rw-r--r-- | gcc/gimple-fold.cc | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/gcc/gimple-fold.cc b/gcc/gimple-fold.cc index ed9508e..c20102f 100644 --- a/gcc/gimple-fold.cc +++ b/gcc/gimple-fold.cc @@ -802,6 +802,15 @@ gimplify_and_update_call_from_tree (gimple_stmt_iterator *si_p, tree expr) gsi_replace_with_seq_vops (si_p, stmts); } +/* Print a message in the dump file recording transformation of FROM to TO. */ + +static void +dump_transformation (gcall *from, gcall *to) +{ + if (dump_enabled_p ()) + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, from, "simplified %T to %T\n", + gimple_call_fn (from), gimple_call_fn (to)); +} /* Replace the call at *GSI with the gimple value VAL. */ @@ -835,6 +844,7 @@ static void replace_call_with_call_and_fold (gimple_stmt_iterator *gsi, gimple *repl) { gimple *stmt = gsi_stmt (*gsi); + dump_transformation (as_a <gcall *> (stmt), as_a <gcall *> (repl)); gimple_call_set_lhs (repl, gimple_call_lhs (stmt)); gimple_set_location (repl, gimple_location (stmt)); gimple_move_vops (repl, stmt); @@ -3090,16 +3100,6 @@ gimple_fold_builtin_memory_chk (gimple_stmt_iterator *gsi, return true; } -/* Print a message in the dump file recording transformation of FROM to TO. */ - -static void -dump_transformation (gcall *from, gcall *to) -{ - if (dump_enabled_p ()) - dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, from, "simplified %T to %T\n", - gimple_call_fn (from), gimple_call_fn (to)); -} - /* Fold a call to the __st[rp]cpy_chk builtin. DEST, SRC, and SIZE are the arguments to the call. IGNORE is true if return value can be ignored. FCODE is the BUILT_IN_* @@ -3189,7 +3189,6 @@ gimple_fold_builtin_stxcpy_chk (gimple_stmt_iterator *gsi, return false; gcall *repl = gimple_build_call (fn, 2, dest, src); - dump_transformation (stmt, repl); replace_call_with_call_and_fold (gsi, repl); return true; } @@ -3235,7 +3234,6 @@ gimple_fold_builtin_stxncpy_chk (gimple_stmt_iterator *gsi, return false; gcall *repl = gimple_build_call (fn, 3, dest, src, len); - dump_transformation (stmt, repl); replace_call_with_call_and_fold (gsi, repl); return true; } |