diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 416bf6386b7..3d1233715a1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2019-09-26 Max Filippov + + * config/xtensa/xtensa.c (hwloop_optimize): Insert zero overhead + loop instruction into new basic block before the loop when basic + block that precedes the loop is empty. + 2019-09-26 Jakub Jelinek * function.c (gimplify_parameters): Use build_clobber function. diff --git a/gcc/config/xtensa/xtensa.c b/gcc/config/xtensa/xtensa.c index 3c129fdca1d..9453f0c162b 100644 --- a/gcc/config/xtensa/xtensa.c +++ b/gcc/config/xtensa/xtensa.c @@ -4230,7 +4230,9 @@ hwloop_optimize (hwloop_info loop) seq = get_insns (); - if (!single_succ_p (entry_bb) || vec_safe_length (loop->incoming) > 1) + entry_after = BB_END (entry_bb); + if (!single_succ_p (entry_bb) || vec_safe_length (loop->incoming) > 1 + || !entry_after) { basic_block new_bb; edge e; @@ -4251,7 +4253,6 @@ hwloop_optimize (hwloop_info loop) } else { - entry_after = BB_END (entry_bb); while (DEBUG_INSN_P (entry_after) || (NOTE_P (entry_after) && NOTE_KIND (entry_after) != NOTE_INSN_BASIC_BLOCK)) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2d78fdde752..7cdc8f0d107 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-09-26 Max Filippov + + * gcc.target/xtensa/pr91880.c: New test case. + * gcc.target/xtensa/xtensa.exp: New test suite. + 2019-09-26 Will Schmidt * gcc.target/powerpc/pure-builtin-redundant-load.c: New. diff --git a/gcc/testsuite/gcc.target/xtensa/pr91880.c b/gcc/testsuite/gcc.target/xtensa/pr91880.c new file mode 100644 index 00000000000..f4895a1bb8e --- /dev/null +++ b/gcc/testsuite/gcc.target/xtensa/pr91880.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -fomit-frame-pointer -fno-tree-vectorize" } */ + +void foo (unsigned int n, char *a, char *b) +{ + int i; + + for (i = 0; i <= n - 1; ++i) + a[i] = b[i]; +} diff --git a/gcc/testsuite/gcc.target/xtensa/xtensa.exp b/gcc/testsuite/gcc.target/xtensa/xtensa.exp new file mode 100644 index 00000000000..8720327f526 --- /dev/null +++ b/gcc/testsuite/gcc.target/xtensa/xtensa.exp @@ -0,0 +1,41 @@ +# Copyright (C) 2019 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# . + +# GCC testsuite that uses the `dg.exp' driver. + +# Exit immediately if this isn't an Xtensa target. +if ![istarget xtensa*-*-*] then { + return +} + +# Load support procs. +load_lib gcc-dg.exp + +# If a testcase doesn't have special options, use these. +global DEFAULT_CFLAGS +if ![info exists DEFAULT_CFLAGS] then { + set DEFAULT_CFLAGS " -ansi -pedantic-errors" +} + +# Initialize `dg'. +dg-init + +# Main loop. +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] \ + "" $DEFAULT_CFLAGS + +# All done. +dg-finish