[Bug tree-optimization/52272] [4.7 regression] Performance regresswion of 410.bwaves on x86.
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Feb 16 12:52:00 GMT 2012
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52272
Richard Guenther <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |rakdver at gcc dot gnu.org
--- Comment #5 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-02-16 12:41:30 UTC ---
Proposed patch:
Index: gcc/tree-ssa-loop-ivopts.c
===================================================================
--- gcc/tree-ssa-loop-ivopts.c (revision 184304)
+++ gcc/tree-ssa-loop-ivopts.c (working copy)
@@ -2506,6 +2506,15 @@ add_iv_value_candidates (struct ivopts_d
if (offset
|| base != iv->base)
add_candidate (data, base, iv->step, false, use);
+
+ /* Fourth, try removing the base-object for pointer IVs. */
+ if (TREE_CODE (iv->base) == POINTER_PLUS_EXPR)
+ {
+ tree base_object = iv->base_object;
+ STRIP_NOPS (base_object);
+ if (operand_equal_p (TREE_OPERAND (iv->base, 0), base_object, 0))
+ add_candidate (data, TREE_OPERAND (iv->base, 1), iv->step, false, use);
+ }
}
/* Adds candidates based on the uses. */
@@ -4062,7 +4071,13 @@ get_computation_cost_at (struct ivopts_d
if (use->iv->base_object
&& cand->iv->base_object
&& !operand_equal_p (use->iv->base_object, cand->iv->base_object, 0))
- return infinite_cost;
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file, "Not considering candidate %d for use %d "
+ "because they have different pointer bases%s\n",
+ cand->id, use->id, address_p ? "(address_p)" : "");
+ return infinite_cost;
+ }
}
if (TYPE_PRECISION (utype) < TYPE_PRECISION (ctype))
More information about the Gcc-bugs
mailing list