From f25a65f5d1c160e8e90bd8b4bfdc30437d00b482 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 28 Mar 2012 16:47:45 +0200 Subject: [PATCH] re PR middle-end/52691 (va_start to builtin_next_arg optimization lost) PR middle-end/52691 * tree-ssa-ccp.c (optimize_stdarg_builtin): Optimize __builtin_va_start to __builtin_next_arg if the latter is builtin_decl_explicit_p rather than when it is not. * gcc.dg/pr52691.c: New test. From-SVN: r185917 --- gcc/ChangeLog | 5 +++++ gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/gcc.dg/pr52691.c | 24 ++++++++++++++++++++++++ gcc/tree-ssa-ccp.c | 2 +- 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/pr52691.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a33cac30620..6a7605ef18a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2012-03-28 Jakub Jelinek + PR middle-end/52691 + * tree-ssa-ccp.c (optimize_stdarg_builtin): Optimize + __builtin_va_start to __builtin_next_arg if the latter is + builtin_decl_explicit_p rather than when it is not. + PR middle-end/52750 * tree-vect-generic.c (vector_element): Perform multiplication for pos in bitsizetype type instead of idx type. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d3344759cda..b965221b1b1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2012-03-28 Jakub Jelinek + PR middle-end/52691 + * gcc.dg/pr52691.c: New test. + PR middle-end/52750 * gcc.c-torture/compile/pr52750.c: New test. diff --git a/gcc/testsuite/gcc.dg/pr52691.c b/gcc/testsuite/gcc.dg/pr52691.c new file mode 100644 index 00000000000..7a2d7d8ebb1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr52691.c @@ -0,0 +1,24 @@ +/* PR middle-end/52691 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ + +#include + +int +foo (int a, ...) +{ + int b = 0, c = 0; + va_list ap; + va_start (ap, a); + if (a > 1) + b = va_arg (ap, double); + if (a > 2) + c = va_arg (ap, long long); + va_end (ap); + return a + b + c; +} + +/* { dg-final { scan-tree-dump "__builtin_next_arg" "optimized" { target { { i?86-*-* x86_64-*-* } && ia32 } } } } */ +/* { dg-final { scan-tree-dump "__builtin_next_arg" "optimized" { target { powerpc*-*-darwin* powerpc*-*-aix* } } } } */ +/* { dg-final { scan-tree-dump "__builtin_next_arg" "optimized" { target { powerpc*-*-linux* && lp64 } } } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c index 2080c06cce6..c28006a9132 100644 --- a/gcc/tree-ssa-ccp.c +++ b/gcc/tree-ssa-ccp.c @@ -2288,7 +2288,7 @@ optimize_stdarg_builtin (gimple call) case BUILT_IN_VA_START: if (!va_list_simple_ptr || targetm.expand_builtin_va_start != NULL - || builtin_decl_explicit_p (BUILT_IN_NEXT_ARG)) + || !builtin_decl_explicit_p (BUILT_IN_NEXT_ARG)) return NULL_TREE; if (gimple_call_num_args (call) != 2) -- 2.30.2