From 4dee97188f81ded9083171093ec08484f0ddd594 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Thu, 18 Aug 2011 16:13:48 +0200 Subject: [PATCH] re PR debug/50017 (-fcompare-debug failure) PR debug/50017 * tree-vect-stmts.c (vect_finish_stmt_generation): If gsi_stmt (*gsi) is a debug stmt, use location of the first non-debug stmt after it. * gcc.dg/pr50017.c: New test. From-SVN: r177857 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/gcc.dg/pr50017.c | 20 ++++++++++++++++++++ gcc/tree-vect-stmts.c | 11 +++++++++-- 4 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/pr50017.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 314efcdfdb4..d7df6315d18 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-08-18 Jakub Jelinek + + PR debug/50017 + * tree-vect-stmts.c (vect_finish_stmt_generation): If gsi_stmt (*gsi) + is a debug stmt, use location of the first non-debug stmt after it. + 2011-08-18 Richard Sandiford * config/arm/arm.c (arm_rtx_costs_1): Don't modify the costs of SET. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d47caaf9e08..0b09a0cca24 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -2,6 +2,9 @@ * g++.dg/plugin/decl_plugin.c: Include diagnostic.h. + PR debug/50017 + * gcc.dg/pr50017.c: New test. + 2011-08-18 Dodji Seketeli PR c++/45625 diff --git a/gcc/testsuite/gcc.dg/pr50017.c b/gcc/testsuite/gcc.dg/pr50017.c new file mode 100644 index 00000000000..66bef007da1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr50017.c @@ -0,0 +1,20 @@ +/* PR debug/50017 */ +/* { dg-do compile } */ +/* { dg-options "-O3 -fcompare-debug" } */ + +struct S { int r, i; }; + +void +foo (struct S *x, int y) +{ + int i; + for (i = 1; i < y; i++) + { + struct S a, b, c; + a = x[0]; + b = x[i]; + c.r = a.r * b.r - a.i * b.i; + c.i = a.r * b.i + a.i * b.r; + x[i] = c; + } +} diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index e00822b7ea4..c0ca2af8e80 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -1,5 +1,5 @@ /* Statement Analysis and Transformation for Vectorization - Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 + Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. Contributed by Dorit Naishlos and Ira Rosen @@ -1419,6 +1419,7 @@ vect_finish_stmt_generation (gimple stmt, gimple vec_stmt, stmt_vec_info stmt_info = vinfo_for_stmt (stmt); loop_vec_info loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_info); bb_vec_info bb_vinfo = STMT_VINFO_BB_VINFO (stmt_info); + gimple_stmt_iterator si; gcc_assert (gimple_code (stmt) != GIMPLE_LABEL); @@ -1433,7 +1434,13 @@ vect_finish_stmt_generation (gimple stmt, gimple vec_stmt, print_gimple_stmt (vect_dump, vec_stmt, 0, TDF_SLIM); } - gimple_set_location (vec_stmt, gimple_location (gsi_stmt (*gsi))); + si = *gsi; + if (is_gimple_debug (gsi_stmt (si))) + { + gsi_next_nondebug (&si); + gcc_assert (!gsi_end_p (si)); + } + gimple_set_location (vec_stmt, gimple_location (gsi_stmt (si))); } /* Checks if CALL can be vectorized in type VECTYPE. Returns -- 2.30.2