diff options
author | Jakub Jelinek <jakub@redhat.com> | 2011-01-02 18:09:08 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2011-01-02 18:09:08 +0100 |
commit | 4e9962966450ca52855f92972d87c170137247bb (patch) | |
tree | 473c86d5cf618b6ac14dff6938dcc11a75af711b /gcc | |
parent | bc470c243a8bbecdb92f2a7f4636f92db6fe0120 (diff) | |
download | gcc-4e9962966450ca52855f92972d87c170137247bb.zip gcc-4e9962966450ca52855f92972d87c170137247bb.tar.gz gcc-4e9962966450ca52855f92972d87c170137247bb.tar.bz2 |
re PR tree-optimization/47140 (error: conversion of register to a different size)
PR tree-optimization/47140
* tree-ssa-ccp.c (evaluate_stmt): For binary assignments, use
TREE_TYPE (lhs) instead of TREE_TYPE (rhs1) as second argument
to bit_value_binop.
* gcc.c-torture/compile/pr47140.c: New test.
From-SVN: r168402
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr47140.c | 25 | ||||
-rw-r--r-- | gcc/tree-ssa-ccp.c | 3 |
4 files changed, 35 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 343e510..9b74e07 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2011-01-02 Jakub Jelinek <jakub@redhat.com> + PR tree-optimization/47140 + * tree-ssa-ccp.c (evaluate_stmt): For binary assignments, use + TREE_TYPE (lhs) instead of TREE_TYPE (rhs1) as second argument + to bit_value_binop. + PR rtl-optimization/47028 * cfgexpand.c (gimple_expand_cfg): Insert entry edge insertions after parm_birth_insn instead of at the beginning diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 09e47cf..defb494 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2011-01-02 Jakub Jelinek <jakub@redhat.com> + PR tree-optimization/47140 + * gcc.c-torture/compile/pr47140.c: New test. + PR rtl-optimization/47028 * gcc.dg/pr47028.c: New test. diff --git a/gcc/testsuite/gcc.c-torture/compile/pr47140.c b/gcc/testsuite/gcc.c-torture/compile/pr47140.c new file mode 100644 index 0000000..2adf53c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr47140.c @@ -0,0 +1,25 @@ +/* PR tree-optimization/47140 */ + +static inline int +foo (int x, short y) +{ + return y == 0 ? x : x + y; +} + +static inline unsigned short +bar (unsigned short x, unsigned char y) +{ + return x - y; +} + +int w; + +int baz (void); + +int +test (void) +{ + int i; + for (i = 0; i < 50; i++) + w += foo ((unsigned char) (1 + baz ()) >= bar (0, 1), 0); +} diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c index aea7edf..371620e 100644 --- a/gcc/tree-ssa-ccp.c +++ b/gcc/tree-ssa-ccp.c @@ -2156,9 +2156,10 @@ evaluate_stmt (gimple stmt) if (INTEGRAL_TYPE_P (TREE_TYPE (rhs1)) || POINTER_TYPE_P (TREE_TYPE (rhs1))) { + tree lhs = gimple_assign_lhs (stmt); tree rhs2 = gimple_assign_rhs2 (stmt); val = bit_value_binop (subcode, - TREE_TYPE (rhs1), rhs1, rhs2); + TREE_TYPE (lhs), rhs1, rhs2); } break; |