[Bug tree-optimization/68238] Vector cost model overestimates prologue cost for SLPed code
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Nov 9 09:36:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68238
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2015-11-09
Ever confirmed|0 |1
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Interesting. The trunk patch wasn't supposed to change behavior ;)
Btw, confirmed on x86_64 for the 5 branch:
slp-costs.c:7:3: note: Cost model analysis:
Vector inside of loop cost: 32
Vector prologue cost: 1033
Vector epilogue cost: 0
Scalar iteration cost: 64
Scalar outside cost: 1
Vector outside cost: 1033
prologue iterations: 0
epilogue iterations: 0
Calculated minimum iters for profitability: 33
Ah, the fix that sneaked in and to be backported is
* tree-vect-loop.c (new_loop_vec_info):
...
(vect_estimate_min_profitable_iters): Use LOOP_VINFO_COMP_ALIAS_DDRS
to estimate alias versioning cost.
which is very simple.
Breakpoint 5, vect_estimate_min_profitable_iters (loop_vinfo=0x22847b0,
ret_min_profitable_niters=0x7fffffffd7f0,
ret_min_profitable_estimate=0x7fffffffd7ec)
at /space/rguenther/src/svn/gcc-5-branch/gcc/tree-vect-loop.c:2828
2828 unsigned len = LOOP_VINFO_MAY_ALIAS_DDRS (loop_vinfo).length ();
(gdb) n
2830 vect_prologue);
(gdb) p len
$1 = 1024
(gdb) p loop_vinfo->comp_alias_ddrs.m_vec->m_vecpfx
$3 = {m_alloc = 1024, m_using_auto_storage = 0, m_num = 1}
so only one check is actually added but we account for 1024...
Index: gcc/tree-vect-loop.c
===================================================================
--- gcc/tree-vect-loop.c (revision 229701)
+++ gcc/tree-vect-loop.c (working copy)
@@ -2825,7 +2825,7 @@ vect_estimate_min_profitable_iters (loop
if (LOOP_REQUIRES_VERSIONING_FOR_ALIAS (loop_vinfo))
{
/* FIXME: Make cost depend on complexity of individual check. */
- unsigned len = LOOP_VINFO_MAY_ALIAS_DDRS (loop_vinfo).length ();
+ unsigned len = LOOP_VINFO_COMP_ALIAS_DDRS (loop_vinfo).length ();
(void) add_stmt_cost (target_cost_data, len, vector_stmt, NULL, 0,
vect_prologue);
dump_printf (MSG_NOTE,
backport pre-approved. With the above patch:
slp-costs.c:7:3: note: Cost model analysis:
Vector inside of loop cost: 32
Vector prologue cost: 10
Vector epilogue cost: 0
Scalar iteration cost: 64
Scalar outside cost: 1
Vector outside cost: 10
prologue iterations: 0
epilogue iterations: 0
Calculated minimum iters for profitability: 1
More information about the Gcc-bugs
mailing list