Commit e7289cb4 by Jakub Jelinek Committed by Jakub Jelinek

re PR rtl-optimization/87065 (combine causes ICE in trunc_int_for_mode)

	PR rtl-optimization/87065
	* combine.c (simplify_if_then_else): Formatting fix.
	(if_then_else_cond): Guard MULT optimization with SCALAR_INT_MODE_P
	check.
	(known_cond): Don't return const_true_rtx for vector modes.  Use
	CONST0_RTX instead of const0_rtx.  Formatting fixes.

	* gcc.target/i386/pr87065.c: New test.

From-SVN: r263872
parent 7a583153
2018-08-27 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/87065
* combine.c (simplify_if_then_else): Formatting fix.
(if_then_else_cond): Guard MULT optimization with SCALAR_INT_MODE_P
check.
(known_cond): Don't return const_true_rtx for vector modes. Use
CONST0_RTX instead of const0_rtx. Formatting fixes.
2018-08-27 Martin Liska <mliska@suse.cz> 2018-08-27 Martin Liska <mliska@suse.cz>
PR gcov-profile/87069 PR gcov-profile/87069
......
...@@ -6495,7 +6495,7 @@ simplify_if_then_else (rtx x) ...@@ -6495,7 +6495,7 @@ simplify_if_then_else (rtx x)
pc_rtx, pc_rtx, 0, 0, 0); pc_rtx, pc_rtx, 0, 0, 0);
if (reg_mentioned_p (from, false_rtx)) if (reg_mentioned_p (from, false_rtx))
false_rtx = subst (known_cond (copy_rtx (false_rtx), false_code, false_rtx = subst (known_cond (copy_rtx (false_rtx), false_code,
from, false_val), from, false_val),
pc_rtx, pc_rtx, 0, 0, 0); pc_rtx, pc_rtx, 0, 0, 0);
SUBST (XEXP (x, 1), swapped ? false_rtx : true_rtx); SUBST (XEXP (x, 1), swapped ? false_rtx : true_rtx);
...@@ -9335,6 +9335,7 @@ if_then_else_cond (rtx x, rtx *ptrue, rtx *pfalse) ...@@ -9335,6 +9335,7 @@ if_then_else_cond (rtx x, rtx *ptrue, rtx *pfalse)
if (COMPARISON_P (cond0) if (COMPARISON_P (cond0)
&& COMPARISON_P (cond1) && COMPARISON_P (cond1)
&& SCALAR_INT_MODE_P (mode)
&& ((GET_CODE (cond0) == reversed_comparison_code (cond1, NULL) && ((GET_CODE (cond0) == reversed_comparison_code (cond1, NULL)
&& rtx_equal_p (XEXP (cond0, 0), XEXP (cond1, 0)) && rtx_equal_p (XEXP (cond0, 0), XEXP (cond1, 0))
&& rtx_equal_p (XEXP (cond0, 1), XEXP (cond1, 1))) && rtx_equal_p (XEXP (cond0, 1), XEXP (cond1, 1)))
...@@ -9515,12 +9516,12 @@ known_cond (rtx x, enum rtx_code cond, rtx reg, rtx val) ...@@ -9515,12 +9516,12 @@ known_cond (rtx x, enum rtx_code cond, rtx reg, rtx val)
if (COMPARISON_P (x)) if (COMPARISON_P (x))
{ {
if (comparison_dominates_p (cond, code)) if (comparison_dominates_p (cond, code))
return const_true_rtx; return VECTOR_MODE_P (GET_MODE (x)) ? x : const_true_rtx;
code = reversed_comparison_code (x, NULL); code = reversed_comparison_code (x, NULL);
if (code != UNKNOWN if (code != UNKNOWN
&& comparison_dominates_p (cond, code)) && comparison_dominates_p (cond, code))
return const0_rtx; return CONST0_RTX (GET_MODE (x));
else else
return x; return x;
} }
...@@ -9563,7 +9564,7 @@ known_cond (rtx x, enum rtx_code cond, rtx reg, rtx val) ...@@ -9563,7 +9564,7 @@ known_cond (rtx x, enum rtx_code cond, rtx reg, rtx val)
/* We must simplify subreg here, before we lose track of the /* We must simplify subreg here, before we lose track of the
original inner_mode. */ original inner_mode. */
new_rtx = simplify_subreg (GET_MODE (x), r, new_rtx = simplify_subreg (GET_MODE (x), r,
inner_mode, SUBREG_BYTE (x)); inner_mode, SUBREG_BYTE (x));
if (new_rtx) if (new_rtx)
return new_rtx; return new_rtx;
else else
...@@ -9588,7 +9589,7 @@ known_cond (rtx x, enum rtx_code cond, rtx reg, rtx val) ...@@ -9588,7 +9589,7 @@ known_cond (rtx x, enum rtx_code cond, rtx reg, rtx val)
/* We must simplify the zero_extend here, before we lose /* We must simplify the zero_extend here, before we lose
track of the original inner_mode. */ track of the original inner_mode. */
new_rtx = simplify_unary_operation (ZERO_EXTEND, GET_MODE (x), new_rtx = simplify_unary_operation (ZERO_EXTEND, GET_MODE (x),
r, inner_mode); r, inner_mode);
if (new_rtx) if (new_rtx)
return new_rtx; return new_rtx;
else else
......
2018-08-27 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/87065
* gcc.target/i386/pr87065.c: New test.
2018-08-26 Marek Polacek <polacek@redhat.com> 2018-08-26 Marek Polacek <polacek@redhat.com>
PR c++/87080 PR c++/87080
......
/* PR rtl-optimization/87065 */
/* { dg-do compile } */
/* { dg-options "-O3 -mxop -mprefer-vector-width=128" } */
int a, c, d, e;
short *b;
void
foo (void)
{
short *g = b;
int h = 1;
unsigned i;
for (; h <= 1; h++)
g = (short *) &c;
for (; c; c++)
{
for (; i <= 1; i++)
;
a ^= (a > 0 <= i) + ((e += d) == 0 ?: (*g = 8));
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment