diff options
author | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-07-19 11:48:46 +0000 |
---|---|---|
committer | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-07-19 11:48:46 +0000 |
commit | 43c92e0a949c94625c7669e41c18f6dc22d8de27 (patch) | |
tree | cecadf196c7add77fde32a7370d3bee46bd56089 | |
parent | 76db20189df4470410a9e5deb6e0d7e660d91163 (diff) | |
download | gcc-43c92e0a949c94625c7669e41c18f6dc22d8de27.tar.gz |
2012-07-19 Richard Guenther <rguenther@suse.de>
Eric Botcazou <ebotcazou@adacore.com>
* tree-ssa-ccp.c (valid_lattice_transition): Clarify comment
about transition from invariant to known bits.
(likely_value): Addresses with UNDEFINED components are
UNDEFINED.
* gnat.dg/loop_optimization11.adb: New testcase.
* gnat.dg/loop_optimization11_pkg.ads: Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@189650 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/loop_optimization11.adb | 19 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/loop_optimization11_pkg.ads | 11 | ||||
-rw-r--r-- | gcc/tree-ssa-ccp.c | 8 |
5 files changed, 51 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c4b114ef254..4e8816a79e9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,4 +1,12 @@ 2012-07-19 Richard Guenther <rguenther@suse.de> + Eric Botcazou <ebotcazou@adacore.com> + + * tree-ssa-ccp.c (valid_lattice_transition): Clarify comment + about transition from invariant to known bits. + (likely_value): Addresses with UNDEFINED components are + UNDEFINED. + +2012-07-19 Richard Guenther <rguenther@suse.de> PR tree-optimization/53970 * tree-vect-data-refs.c (not_size_aligned): Avoid sign-compare diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 32ed483ca88..dee868fe17e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2012-07-19 Richard Guenther <rguenther@suse.de> + Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/loop_optimization11.adb: New testcase. + * gnat.dg/loop_optimization11_pkg.ads: Likewise. + 2012-07-18 Paolo Carlini <paolo.carlini@oracle.com> Jason Merrill <jason@redhat.com> diff --git a/gcc/testsuite/gnat.dg/loop_optimization11.adb b/gcc/testsuite/gnat.dg/loop_optimization11.adb new file mode 100644 index 00000000000..e4e27d48814 --- /dev/null +++ b/gcc/testsuite/gnat.dg/loop_optimization11.adb @@ -0,0 +1,19 @@ +-- { dg-do compile }
+-- { dg-options "-O" }
+
+with Loop_Optimization11_Pkg; use Loop_Optimization11_Pkg;
+
+procedure Loop_Optimization11 is
+ Arr : array (Prot, Mem) of Integer := (others => (others => 0));
+begin
+ Put_Line (Img (0) & " ");
+ for I in Arr'Range (1) loop
+ for J in Arr'Range (2) loop
+ declare
+ Elem : Integer renames Arr (I, J);
+ begin
+ Put_Line (Img (Elem));
+ end;
+ end loop;
+ end loop;
+end;
diff --git a/gcc/testsuite/gnat.dg/loop_optimization11_pkg.ads b/gcc/testsuite/gnat.dg/loop_optimization11_pkg.ads new file mode 100644 index 00000000000..f4248e55241 --- /dev/null +++ b/gcc/testsuite/gnat.dg/loop_optimization11_pkg.ads @@ -0,0 +1,11 @@ +package Loop_Optimization11_Pkg is
+
+ function Img (X : Integer) return String;
+
+ procedure Put_Line (Data : String);
+
+ type Prot is (Execute, Execute_Read, Execute_Read_Write);
+
+ type Mem is (Mem_Image, Mem_Mapped, Mem_Private, Unknown);
+
+end Loop_Optimization11_Pkg;
diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c index 6dc30e148cd..3f88f39f096 100644 --- a/gcc/tree-ssa-ccp.c +++ b/gcc/tree-ssa-ccp.c @@ -405,7 +405,8 @@ valid_lattice_transition (prop_value_t old_val, prop_value_t new_val) /* Now both lattice values are CONSTANT. */ - /* Allow transitioning from &x to &x & ~3. */ + /* Allow transitioning from PHI <&x, not executable> == &x + to PHI <&x, &y> == common alignment. */ if (TREE_CODE (old_val.value) != INTEGER_CST && TREE_CODE (new_val.value) == INTEGER_CST) return true; @@ -648,6 +649,11 @@ likely_value (gimple stmt) the undefined operand may be promoted. */ return UNDEFINED; + case ADDR_EXPR: + /* If any part of an address is UNDEFINED, like the index + of an ARRAY_EXPR, then treat the result as UNDEFINED. */ + return UNDEFINED; + default: ; } |