aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRubin Gerritsen <rubin.gerritsen@gmail.com>2024-07-16 21:11:24 +0200
committerRichard Biener <rguenth@gcc.gnu.org>2024-07-18 09:44:29 +0200
commitcee56fe0ba757cae17dcc4be216cea88be76e740 (patch)
tree5c242b1a68d98606eb38b5423c8e36c3454f155c
parent8c67dc40459e3d72e8169b099cc8c5dbdb759da3 (diff)
downloadgcc-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.cc22
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;
}