From: Eric Botcazou Date: Thu, 31 Mar 2011 20:52:41 +0000 (+0000) Subject: tree-ssa-pre.c (create_component_ref_by_pieces_1): Drop a zero minimum index only... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d4d73ce26b36bdf1b061ab0297ed7d613afec9c5;p=gcc.git tree-ssa-pre.c (create_component_ref_by_pieces_1): Drop a zero minimum index only if it is redundant. * tree-ssa-pre.c (create_component_ref_by_pieces_1) : Drop a zero minimum index only if it is redundant. From-SVN: r171800 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3fe316c943d..045f18fec44 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2011-03-31 Eric Botcazou + + * tree-ssa-pre.c (create_component_ref_by_pieces_1) : Drop + a zero minimum index only if it is redundant. + 2011-03-31 Vladimir Makarov PR rtl-optimization/48381 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 81f9bb2ed92..b9c24411bc5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2011-03-31 Eric Botcazou + + * gnat.dg/opt16.adb: New test. + 2011-03-31 Jason Merrill * g++.dg/cpp0x/defaulted24.C: New. diff --git a/gcc/testsuite/gnat.dg/opt16.adb b/gcc/testsuite/gnat.dg/opt16.adb new file mode 100644 index 00000000000..d8e93bda2a1 --- /dev/null +++ b/gcc/testsuite/gnat.dg/opt16.adb @@ -0,0 +1,33 @@ +-- { dg-do compile } +-- { dg-options "-O2 -gnatws" } + +procedure Opt16 is + + generic + type T (<>) is private; + V, V1 : T; + with function F1 (X : T) return T; + package GP is + R : Boolean := F1 (V) = V1; + end GP; + + type AB is array (Boolean range <>) of Boolean; + +begin + for I1 in Boolean loop + for I2 in Boolean loop + declare + B1 : Boolean := I1; + B2 : Boolean := I2; + AB1 : AB (Boolean) := (I1, I2); + T : AB (B1 .. B2) := (B1 .. B2 => True); + F : AB (B1 .. B2) := (B1 .. B2 => False); + + package P is new GP (AB, AB1, NOT AB1, "NOT"); + + begin + null; + end; + end loop; + end loop; +end; diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index 0a6fa9455de..e59a598348b 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -2874,8 +2874,11 @@ create_component_ref_by_pieces_1 (basic_block block, vn_reference_t ref, return NULL_TREE; if (genop2) { - /* Drop zero minimum index. */ - if (tree_int_cst_equal (genop2, integer_zero_node)) + tree domain_type = TYPE_DOMAIN (TREE_TYPE (genop0)); + /* Drop zero minimum index if redundant. */ + if (integer_zerop (genop2) + && (!domain_type + || integer_zerop (TYPE_MIN_VALUE (domain_type)))) genop2 = NULL_TREE; else {