This is the mail archive of the gcc-patches@gcc.gnu.org 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]

Strip NOP_EXPR before building MEM


Hi,
I have noticed that ivopts build MEM_REF (NOP_EXPR (address))
where NOP_EXPR converts one pointer type to another.  Later it tries
to expand it that on strict alignment targets punt on determining
the alignment and winds expensive memory reference.

It seems to make no sense to have NOP_EXPR here, but in addition
I think we want to somehow preserve alignment from original MEM_REF?

Honza

	* tree-ssa-lop-ivopts.c (get_computation_cost_at):
	strip nops before building mem ref
diff --git a/gcc/tree-ssa-loop-ivopts.c b/gcc/tree-ssa-loop-ivopts.c
index 62ba71b..bd92031 100644
--- a/gcc/tree-ssa-loop-ivopts.c
+++ b/gcc/tree-ssa-loop-ivopts.c
@@ -5058,7 +5058,10 @@ fallback:
     return infinite_cost;
 
   if (address_p)
-    comp = build_simple_mem_ref (comp);
+    {
+      STRIP_NOPS (comp);
+      comp = build_simple_mem_ref (comp);
+    }
 
   cost = comp_cost (computation_cost (comp, speed), 0);
 


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