diff options
author | Richard Biener <rguenther@suse.de> | 2015-04-13 12:42:41 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2015-04-13 12:42:41 +0000 |
commit | c4ef2f8634669376c85304a5ebe181edf4f73a4c (patch) | |
tree | f454e18a763b6ae39cd70081499f44af78a8165f | |
parent | 54a3a620046c47bfda0deb529cf3c4284561ce8a (diff) | |
download | gcc-c4ef2f8634669376c85304a5ebe181edf4f73a4c.zip gcc-c4ef2f8634669376c85304a5ebe181edf4f73a4c.tar.gz gcc-c4ef2f8634669376c85304a5ebe181edf4f73a4c.tar.bz2 |
re PR tree-optimization/65204 (Aligned address optimization not detected)
2015-04-13 Richard Biener <rguenther@suse.de>
PR tree-optimization/65204
* tree-ssa-ccp.c (evaluate_stmt): Always evaluate address
takens for bit-CCP.
* gcc.dg/tree-ssa/ssa-ccp-35.c: New testcase.
From-SVN: r222049
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-35.c | 15 | ||||
-rw-r--r-- | gcc/tree-ssa-ccp.c | 4 |
4 files changed, 29 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e81d6da..641bdff 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2015-04-13 Richard Biener <rguenther@suse.de> + PR tree-optimization/65204 + * tree-ssa-ccp.c (evaluate_stmt): Always evaluate address + takens for bit-CCP. + +2015-04-13 Richard Biener <rguenther@suse.de> + PR target/65660 * config/i386/i386.c (bdver1_cost): Double cond_taken_branch_cost and cond_not_taken_branch_cost to 4 and 2. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5b0cdc3..377f5d9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-04-13 Richard Biener <rguenther@suse.de> + + PR tree-optimization/65204 + * gcc.dg/tree-ssa/ssa-ccp-35.c: New testcase. + 2015-04-13 Terry Guo <terry.guo@arm.com> PR target/65710 diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-35.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-35.c new file mode 100644 index 0000000..7cf3a4c --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-35.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-ccp1" } */ + +typedef char char16[16] __attribute__ ((aligned (16))); +char16 c16[4] __attribute__ ((aligned (4))); + +int f5 (int i) +{ + __SIZE_TYPE__ s = (__SIZE_TYPE__)&c16[i]; + /* 0 */ + return 3 & s; +} + +/* { dg-final { scan-tree-dump "return 0;" "ccp1" } } */ +/* { dg-final { cleanup-tree-dump "ccp1" } } */ diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c index d45a3ff..9fbea3a 100644 --- a/gcc/tree-ssa-ccp.c +++ b/gcc/tree-ssa-ccp.c @@ -1748,7 +1748,9 @@ evaluate_stmt (gimple stmt) /* Resort to simplification for bitwise tracking. */ if (flag_tree_bit_ccp - && (likelyvalue == CONSTANT || is_gimple_call (stmt)) + && (likelyvalue == CONSTANT || is_gimple_call (stmt) + || (gimple_assign_single_p (stmt) + && gimple_assign_rhs_code (stmt) == ADDR_EXPR)) && !is_constant) { enum gimple_code code = gimple_code (stmt); |