Commit 68578d6e by Richard Biener Committed by Richard Biener

re PR tree-optimization/92645 (Hand written vector code is 450 times slower when…

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
parent 78307657
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.
2019-11-28 Richard Biener <rguenther@suse.de>
PR tree-optimization/92645
* tree-ssa-forwprop.c (get_bit_field_ref_def): Also handle
conversions inside a mode class. Remove restriction on
preserving the element size.
2019-11-28 Richard Biener <rguenther@suse.de>
PR tree-optimization/92645
* gcc.dg/tree-ssa/inline-12.c: New testcase.
2019-11-28 Richard Biener <rguenther@suse.de>
PR tree-optimization/92645
* gcc.target/i386/pr92645-4.c: New testcase.
2019-11-28 Christophe Lyon <christophe.lyon@linaro.org>
......
/* { dg-do compile } */
/* { dg-options "-O -fdump-tree-einline" } */
void *foo (void *, int);
static inline void *mcp (void *src, int i)
{
return foo (src, i);
}
void bar()
{
int i;
mcp (&i, 0);
}
/* There should be exactly two assignments, one for both
the original foo call and the inlined copy (plus a clobber
that doesn't match here). In particular bar should look like
<bb 2> :
_4 = foo (&i, 0);
i ={v} {CLOBBER};
return; */
/* { dg-final { scan-tree-dump-times " = " 2 "einline" } } */
......@@ -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)))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment