aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2017-10-03 11:49:37 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2017-10-03 11:49:37 +0200
commitbb81a576f259256b38d46dd41d3bd5f5a36cfd6f (patch)
tree28c0e11efe709cd4a763c5b39e4964ee54ef7f5f /gcc
parent8398c1dfe24391ee18b6147d22415f30f7b82f2a (diff)
downloadgcc-bb81a576f259256b38d46dd41d3bd5f5a36cfd6f.zip
gcc-bb81a576f259256b38d46dd41d3bd5f5a36cfd6f.tar.gz
gcc-bb81a576f259256b38d46dd41d3bd5f5a36cfd6f.tar.bz2
re PR target/82386 (internal compiler error: Segmentation fault on 32-bit powerpc BE targets)
PR target/82386 * combine.c (combine_instructions): Don't combine in unreachable basic blocks. * gcc.dg/pr82386.c: New test. From-SVN: r253378
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/combine.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr82386.c38
4 files changed, 55 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c0b2f2b..934dd76 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2017-10-03 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/82386
+ * combine.c (combine_instructions): Don't combine in unreachable
+ basic blocks.
+
2017-08-18 Peter Bergner <bergner@vnet.ibm.com>
PR target/80210
diff --git a/gcc/combine.c b/gcc/combine.c
index e502fa1..400cef3 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -1232,6 +1232,12 @@ combine_instructions (rtx_insn *f, unsigned int nregs)
FOR_EACH_BB_FN (this_basic_block, cfun)
{
rtx_insn *last_combined_insn = NULL;
+
+ /* Ignore instruction combination in basic blocks that are going to
+ be removed as unreachable anyway. See PR82386. */
+ if (EDGE_COUNT (this_basic_block->preds) == 0)
+ continue;
+
optimize_this_for_speed_p = optimize_bb_for_speed_p (this_basic_block);
last_call_luid = 0;
mem_last_set = -1;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 004af66..74023ab 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2017-10-03 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/82386
+ * gcc.dg/pr82386.c: New test.
+
2017-10-02 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/70570
diff --git a/gcc/testsuite/gcc.dg/pr82386.c b/gcc/testsuite/gcc.dg/pr82386.c
new file mode 100644
index 0000000..8901f2b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr82386.c
@@ -0,0 +1,38 @@
+/* PR target/82386 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -w" } */
+/* { dg-additional-options "-misel" { target powerpc*-*-* } } */
+
+long long int fs;
+int vm;
+
+void
+sd (void)
+{
+ fs = 1;
+ vm = 2;
+ goto zf;
+
+ if (0)
+ {
+ int y6 = 0;
+ int *uu = &y6;
+ short int he;
+ int of = 0;
+
+ zf:
+ for (;;)
+ {
+ he = of;
+ if (he || (fs |= vm))
+ {
+ *uu = fs;
+ fs += vm;
+ }
+ if (y6 == vm)
+ fs |= he;
+ he = y6 || fs;
+ fs /= 0;
+ }
+ }
+}