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>
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>
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.
Copyright (C) 2004, 2006, 2007, 2008, 2009, 2010
Copyright (C) 2004, 2006, 2007, 2008, 2009, 2010, 2011
Free Software Foundation, Inc.
This file is part of GCC.
......@@ -129,7 +129,7 @@ gen_addr_rtx (enum machine_mode address_mode,
*addr = act_elem;
}
if (base)
if (base && base != const0_rtx)
{
if (*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,
??? As IVOPTs does not follow restrictions to where the base
pointer may point to create a MEM_REF only if we know that
base is valid. */
if (TREE_CODE (base) == ADDR_EXPR
if ((TREE_CODE (base) == ADDR_EXPR || TREE_CODE (base) == INTEGER_CST)
&& (!index2 || integer_zerop (index2))
&& (!addr->index || integer_zerop (addr->index)))
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