This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Fix PR50955

This fixes PR50955 - IVOPTs can end up expressing a pointer value
using unrelated pointer bases.  This confuses alias analysis.
The fix is to extend the existing stop-gap we have in place
to cover the case in question.

Bootstrapped and tested on x86_64-unknonw-linux-gnu.

I have also benchmarked the patch on SPEC 2k6 and SPEC 2k (both
64bit and 32bit codegen) with only a single visible regression
at 64bit 191.fma32 at -O2 -ffast-math (-O3 -ffast-math is fine).
The patch shows small consistent wins on 32bit SPEC 2k when using
SSE math.

Committed to trunk.


2012-02-06  Richard Guenther  <>

        PR tree-optimization/50955
        * tree-ssa-loop-ivopts.c (get_computation_cost_at): Artificially
        raise cost of expressions that replace an address with an
        expression based on a different pointer.

Index: gcc/tree-ssa-loop-ivopts.c
--- gcc/tree-ssa-loop-ivopts.c	(revision 183757)
+++ gcc/tree-ssa-loop-ivopts.c	(working copy)
@@ -4048,7 +4048,11 @@ get_computation_cost_at (struct ivopts_d
       return infinite_cost;
-  if (address_p)
+  if (address_p
+      || (use->iv->base_object
+	  && cand->iv->base_object
+	  && POINTER_TYPE_P (TREE_TYPE (use->iv->base_object))
+	  && POINTER_TYPE_P (TREE_TYPE (cand->iv->base_object))))
       /* Do not try to express address of an object with computation based
 	 on address of a different object.  This may cause problems in rtl

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]