summaryrefslogtreecommitdiff
path: root/gcc/tree-inline.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2019-11-28 12:26:50 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2019-11-28 12:26:50 +0000
commit68578d6efa09a5e5d3e7eca4de48f03b21f701c0 (patch)
tree4a1bdee96188de03b1806cdaee39d144f5802f3a /gcc/tree-inline.c
parent78307657cf9675bc4aa2e77561c823834714b4c8 (diff)
re PR tree-optimization/92645 (Hand written vector code is 450 times slower when compiled with GCC compared to Clang)
2019-11-28 Richard Biener <rguenther@suse.de> PR tree-optimization/92645 * tree-inline.c (remap_gimple_stmt): When the return value is not wanted, elide GIMPLE_RETURN. * gcc.dg/tree-ssa/inline-12.c: New testcase. From-SVN: r278807
Diffstat (limited to 'gcc/tree-inline.c')
-rw-r--r--gcc/tree-inline.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c
index eecf5c6cf1c..720f50eefec 100644
--- a/gcc/tree-inline.c
+++ b/gcc/tree-inline.c
@@ -1541,9 +1541,12 @@ remap_gimple_stmt (gimple *stmt, copy_body_data *id)
assignment to the equivalent of the original RESULT_DECL.
If RETVAL is just the result decl, the result decl has
already been set (e.g. a recent "foo (&result_decl, ...)");
- just toss the entire GIMPLE_RETURN. */
+ just toss the entire GIMPLE_RETURN. Likewise for when the
+ call doesn't want the return value. */
if (retval
&& (TREE_CODE (retval) != RESULT_DECL
+ && (!id->call_stmt
+ || gimple_call_lhs (id->call_stmt) != NULL_TREE)
&& (TREE_CODE (retval) != SSA_NAME
|| ! SSA_NAME_VAR (retval)
|| TREE_CODE (SSA_NAME_VAR (retval)) != RESULT_DECL)))