From 7f2f5ec0b5b775c66df9456f8782721eab64f5a5 Mon Sep 17 00:00:00 2001 From: rth Date: Mon, 7 Mar 2016 11:48:57 +0000 Subject: [PATCH] PR rtl-opt/70061 * tree-outofssa.c (emit_partition_copy): Flush pending stack adjust. (insert_value_copy_on_edge): Likewise. * gcc.c-torture/compile/pr70061.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@234025 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.c-torture/compile/pr70061.c | 10 ++++++++++ gcc/tree-outof-ssa.c | 4 ++++ 4 files changed, 24 insertions(+) create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr70061.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index dac4a19..0fe90a6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-03-07 Richard Henderson + + PR rtl-opt/70061 + * tree-outofssa.c (emit_partition_copy): Flush pending stack adjust. + (insert_value_copy_on_edge): Likewise. + 2016-03-07 Kyrylo Tkachov * config/arm/arm_neon.h: Show error if using with soft-float ABI. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e3ed862..952bfeb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2016-03-07 Richard Henderson + + * gcc.c-torture/compile/pr70061.c: New test. + 2016-03-07 Richard Biener PR testsuite/70109 diff --git a/gcc/testsuite/gcc.c-torture/compile/pr70061.c b/gcc/testsuite/gcc.c-torture/compile/pr70061.c new file mode 100644 index 0000000..a7ebcfc --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr70061.c @@ -0,0 +1,10 @@ +typedef int v8si __attribute__ ((vector_size (32))); + +int +foo(v8si c, v8si d) +{ +l0: + if (c[2]) + d ^= c; + return d[3]; +} diff --git a/gcc/tree-outof-ssa.c b/gcc/tree-outof-ssa.c index 25286a2..4125529 100644 --- a/gcc/tree-outof-ssa.c +++ b/gcc/tree-outof-ssa.c @@ -41,6 +41,7 @@ along with GCC; see the file COPYING3. If not see #include "tree-ssa-ter.h" #include "tree-ssa-coalesce.h" #include "tree-outof-ssa.h" +#include "dojump.h" /* FIXME: A lot of code here deals with expanding to RTL. All that code should be in cfgexpand.c. */ @@ -220,6 +221,7 @@ emit_partition_copy (rtx dest, rtx src, int unsignedsrcp, tree sizeexp) } else emit_move_insn (dest, src); + do_pending_stack_adjust (); rtx_insn *seq = get_insns (); end_sequence (); @@ -312,6 +314,8 @@ insert_value_copy_on_edge (edge e, int dest, tree src, source_location locus) if (x != dest_rtx) emit_move_insn (dest_rtx, x); + do_pending_stack_adjust (); + seq = get_insns (); end_sequence (); -- 2.7.4