From 135b982ddc5c8174c57dc9e8f294c7bf476bc9d2 Mon Sep 17 00:00:00 2001 From: rguenth Date: Thu, 30 Jan 2014 18:28:19 +0000 Subject: [PATCH] 2014-01-30 Richard Biener PR tree-optimization/59993 * tree-ssa-forwprop.c (associate_pointerplus): Check we can propagate form the earlier stmt and avoid the transform when the intermediate result is needed. * gcc.dg/torture/pr59993.c: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@207316 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 7 +++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/torture/pr59993.c | 13 +++++++++++++ gcc/tree-ssa-forwprop.c | 6 ++++-- 4 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/torture/pr59993.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 62ac6dfd3ff..0184dbd5553 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2014-01-30 Richard Biener + + PR tree-optimization/59993 + * tree-ssa-forwprop.c (associate_pointerplus): Check we + can propagate form the earlier stmt and avoid the transform + when the intermediate result is needed. + 2014-01-30 Alangi Derick * README.Portability: Fix typo. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 18b2171fd5d..6c22615181a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-01-30 Richard Biener + + PR tree-optimization/59993 + * gcc.dg/torture/pr59993.c: New testcase. + 2014-01-30 Richard Sandiford * g++.dg/vect/pr33426-ivdep.cc, g++.dg/vect/pr33426-ivdep-2.cc, diff --git a/gcc/testsuite/gcc.dg/torture/pr59993.c b/gcc/testsuite/gcc.dg/torture/pr59993.c new file mode 100644 index 00000000000..be55a10b9fd --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr59993.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ + +#include + +extern int optind; +jmp_buf jump_buf; +int +main (int argc, char **argv) +{ + foo (jump_buf, setjmp(jump_buf)); + argv += optind; + bar(argv[1]); +} diff --git a/gcc/tree-ssa-forwprop.c b/gcc/tree-ssa-forwprop.c index ebdd8f546f2..b2294290077 100644 --- a/gcc/tree-ssa-forwprop.c +++ b/gcc/tree-ssa-forwprop.c @@ -2926,11 +2926,13 @@ associate_pointerplus (gimple_stmt_iterator *gsi) /* Associate (p +p off1) +p off2 as (p +p (off1 + off2)). */ ptr = gimple_assign_rhs1 (stmt); off1 = gimple_assign_rhs2 (stmt); - if (TREE_CODE (ptr) != SSA_NAME) + if (TREE_CODE (ptr) != SSA_NAME + || !has_single_use (ptr)) return false; def_stmt = SSA_NAME_DEF_STMT (ptr); if (!is_gimple_assign (def_stmt) - || gimple_assign_rhs_code (def_stmt) != POINTER_PLUS_EXPR) + || gimple_assign_rhs_code (def_stmt) != POINTER_PLUS_EXPR + || !can_propagate_from (def_stmt)) return false; ptr = gimple_assign_rhs1 (def_stmt); off2 = gimple_assign_rhs2 (def_stmt); -- 2.11.4.GIT