From 6374236845ef64d1b986472e5adf41341ae6df92 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Mon, 25 Jun 2018 19:27:47 +0200 Subject: [PATCH] backport: re PR target/84700 (ICE on 32-bit BE powerpc targets w/ -misel -O1) Backported from mainline 2018-03-05 Jakub Jelinek PR target/84700 * combine.c (combine_simplify_rtx): Don't try to simplify if if_then_else_cond returned non-NULL, but either true_rtx or false_rtx are equal to x. * gcc.target/powerpc/pr84700.c: New test. From-SVN: r262070 --- gcc/ChangeLog | 7 +++++++ gcc/combine.c | 6 +++++- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.target/powerpc/pr84700.c | 12 ++++++++++++ 4 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/powerpc/pr84700.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 350caf5d9382..05359d44f500 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,13 @@ 2018-06-25 Jakub Jelinek Backported from mainline + 2018-03-05 Jakub Jelinek + + PR target/84700 + * combine.c (combine_simplify_rtx): Don't try to simplify if + if_then_else_cond returned non-NULL, but either true_rtx or false_rtx + are equal to x. + 2018-03-02 Jakub Jelinek PR inline-asm/84625 diff --git a/gcc/combine.c b/gcc/combine.c index c38b57dd38e2..8ffb21dc10a8 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -5581,7 +5581,11 @@ combine_simplify_rtx (rtx x, machine_mode op0_mode, int in_dest, /* If everything is a comparison, what we have is highly unlikely to be simpler, so don't use it. */ && ! (COMPARISON_P (x) - && (COMPARISON_P (true_rtx) || COMPARISON_P (false_rtx)))) + && (COMPARISON_P (true_rtx) || COMPARISON_P (false_rtx))) + /* Similarly, if we end up with one of the expressions the same + as the original, it is certainly not simpler. */ + && ! rtx_equal_p (x, true_rtx) + && ! rtx_equal_p (x, false_rtx)) { rtx cop1 = const0_rtx; enum rtx_code cond_code = simplify_comparison (NE, &cond, &cop1); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 22893b53d0fa..9da363f67f17 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,11 @@ 2018-06-25 Jakub Jelinek Backported from mainline + 2018-03-05 Jakub Jelinek + + PR target/84700 + * gcc.target/powerpc/pr84700.c: New test. + 2018-03-02 Jakub Jelinek PR c++/84662 diff --git a/gcc/testsuite/gcc.target/powerpc/pr84700.c b/gcc/testsuite/gcc.target/powerpc/pr84700.c new file mode 100644 index 000000000000..c89094a56d39 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr84700.c @@ -0,0 +1,12 @@ +/* PR target/84700 */ +/* { dg-do compile } */ +/* { dg-options "-O1 -misel" } */ + +long long int +foo (long long int x) +{ + long long int a = x < 2; + int b = a >= 0; + + return a + ((x == 0) ? a : b); +} -- 2.47.2