diff options
author | Marek Polacek <polacek@redhat.com> | 2013-08-12 08:46:41 +0000 |
---|---|---|
committer | Marek Polacek <mpolacek@gcc.gnu.org> | 2013-08-12 08:46:41 +0000 |
commit | 4e11510216215d01cd88fa7310703d432c532a0a (patch) | |
tree | 35655666cb958dd39c96812fff1f3bca70d4a3f8 | |
parent | 1f97e193ccf56b36f7b7db1eae732670c5f6c28b (diff) | |
download | gcc-4e11510216215d01cd88fa7310703d432c532a0a.zip gcc-4e11510216215d01cd88fa7310703d432c532a0a.tar.gz gcc-4e11510216215d01cd88fa7310703d432c532a0a.tar.bz2 |
re PR tree-optimization/57980 (gcc 4.8.1 -foptimize-sibling-calls -O1 ICE in build_int_cst_wide, at tree.c:1210)
PR tree-optimization/57980
Co-Authored-By: Marc Glisse <marc.glisse@inria.fr>
From-SVN: r201660
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr57980.c | 19 | ||||
-rw-r--r-- | gcc/tree-tailcall.c | 12 |
4 files changed, 33 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 09899f3..cda36e7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2013-08-12 Marek Polacek <polacek@redhat.com> + Marc Glisse <marc.glisse@inria.fr> + + PR tree-optimization/57980 + * tree-tailcall.c (process_assignment): Call build_minus_one_cst + when creating -1 constant. + 2013-08-10 Jan Hubicka <jh@suse.cz> Workaround binutils PR14342. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3ff0e58..4f0e3f1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-08-12 Marek Polacek <polacek@redhat.com> + + PR tree-optimization/57980 + * gcc.dg/pr57980.c: New test. + 2013-08-12 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/56666 diff --git a/gcc/testsuite/gcc.dg/pr57980.c b/gcc/testsuite/gcc.dg/pr57980.c new file mode 100644 index 0000000..682f0f4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr57980.c @@ -0,0 +1,19 @@ +/* PR tree-optimization/57980 */ +/* { dg-do compile } */ +/* { dg-options "-O -foptimize-sibling-calls" } */ + +typedef int V __attribute__ ((vector_size (sizeof (int)))); +extern V f (void); + +V +bar (void) +{ + return -f (); +} + +V +foo (void) +{ + V v = { }; + return v - f (); +} diff --git a/gcc/tree-tailcall.c b/gcc/tree-tailcall.c index 8cd7255..c9716e70 100644 --- a/gcc/tree-tailcall.c +++ b/gcc/tree-tailcall.c @@ -326,11 +326,7 @@ process_assignment (gimple stmt, gimple_stmt_iterator call, tree *m, return true; case NEGATE_EXPR: - if (FLOAT_TYPE_P (TREE_TYPE (op0))) - *m = build_real (TREE_TYPE (op0), dconstm1); - else - *m = build_int_cst (TREE_TYPE (op0), -1); - + *m = build_minus_one_cst (TREE_TYPE (op0)); *ass_var = dest; return true; @@ -339,11 +335,7 @@ process_assignment (gimple stmt, gimple_stmt_iterator call, tree *m, *a = fold_build1 (NEGATE_EXPR, TREE_TYPE (non_ass_var), non_ass_var); else { - if (FLOAT_TYPE_P (TREE_TYPE (non_ass_var))) - *m = build_real (TREE_TYPE (non_ass_var), dconstm1); - else - *m = build_int_cst (TREE_TYPE (non_ass_var), -1); - + *m = build_minus_one_cst (TREE_TYPE (non_ass_var)); *a = fold_build1 (NEGATE_EXPR, TREE_TYPE (non_ass_var), non_ass_var); } |