Commit 35979cc2 by Jakub Jelinek Committed by Jakub Jelinek

re PR rtl-optimization/49235 (ICE: in int_mode_for_mode, at stor-layout.c:424…

re PR rtl-optimization/49235 (ICE: in int_mode_for_mode, at stor-layout.c:424 with -O -fno-delete-null-pointer-checks -fno-tree-scev-cprop -ftree-vectorize -fno-vect-cost-model)

	PR rtl-optimization/49235
	* tree-ssa-address.c (gen_addr_rtx): Ignore base if it is const0_rtx.
	(create_mem_ref_raw): Create MEM_REF even if base is INTEGER_CST.

	* gcc.dg/pr49235.c: New test.

From-SVN: r174478
parent 8f7de592
2011-05-31 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/49235
* tree-ssa-address.c (gen_addr_rtx): Ignore base if it is const0_rtx.
(create_mem_ref_raw): Create MEM_REF even if base is INTEGER_CST.
2011-05-31 Ira Rosen <ira.rosen@linaro.org> 2011-05-31 Ira Rosen <ira.rosen@linaro.org>
PR tree-optimization/49093 PR tree-optimization/49093
......
2011-05-31 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/49235
* gcc.dg/pr49235.c: New test.
2011-05-31 Ira Rosen <ira.rosen@linaro.org> 2011-05-31 Ira Rosen <ira.rosen@linaro.org>
PR tree-optimization/49093 PR tree-optimization/49093
......
/* PR rtl-optimization/49235 */
/* { dg-do compile { target { int32plus } } } */
/* { dg-options "-O -fno-delete-null-pointer-checks -fno-tree-scev-cprop -ftree-vectorize -fno-vect-cost-model -w" } */
void
foo (void)
{
unsigned i;
unsigned *p = 0;
for (i = 0; i < 4; ++i)
*p++ = 0;
for (i = 0; i < 4; ++i)
*p++ = 0;
}
void
bar (void)
{
unsigned i;
unsigned *p = (unsigned *) (__UINTPTR_TYPE__) 0x12340000;
for (i = 0; i < 4; ++i)
*p++ = 0;
for (i = 0; i < 4; ++i)
*p++ = 0;
}
/* Memory address lowering and addressing mode selection. /* Memory address lowering and addressing mode selection.
Copyright (C) 2004, 2006, 2007, 2008, 2009, 2010 Copyright (C) 2004, 2006, 2007, 2008, 2009, 2010, 2011
Free Software Foundation, Inc. Free Software Foundation, Inc.
This file is part of GCC. This file is part of GCC.
...@@ -129,7 +129,7 @@ gen_addr_rtx (enum machine_mode address_mode, ...@@ -129,7 +129,7 @@ gen_addr_rtx (enum machine_mode address_mode,
*addr = act_elem; *addr = act_elem;
} }
if (base) if (base && base != const0_rtx)
{ {
if (*addr) if (*addr)
*addr = simplify_gen_binary (PLUS, address_mode, base, *addr); *addr = simplify_gen_binary (PLUS, address_mode, base, *addr);
...@@ -365,7 +365,7 @@ create_mem_ref_raw (tree type, tree alias_ptr_type, struct mem_address *addr, ...@@ -365,7 +365,7 @@ create_mem_ref_raw (tree type, tree alias_ptr_type, struct mem_address *addr,
??? As IVOPTs does not follow restrictions to where the base ??? As IVOPTs does not follow restrictions to where the base
pointer may point to create a MEM_REF only if we know that pointer may point to create a MEM_REF only if we know that
base is valid. */ base is valid. */
if (TREE_CODE (base) == ADDR_EXPR if ((TREE_CODE (base) == ADDR_EXPR || TREE_CODE (base) == INTEGER_CST)
&& (!index2 || integer_zerop (index2)) && (!index2 || integer_zerop (index2))
&& (!addr->index || integer_zerop (addr->index))) && (!addr->index || integer_zerop (addr->index)))
return fold_build2 (MEM_REF, type, base, addr->offset); return fold_build2 (MEM_REF, type, base, addr->offset);
......
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