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>
PR gcov-profile/87069
......
......@@ -6495,7 +6495,7 @@ simplify_if_then_else (rtx x)
pc_rtx, pc_rtx, 0, 0, 0);
if (reg_mentioned_p (from, false_rtx))
false_rtx = subst (known_cond (copy_rtx (false_rtx), false_code,
from, false_val),
from, false_val),
pc_rtx, pc_rtx, 0, 0, 0);
SUBST (XEXP (x, 1), swapped ? false_rtx : true_rtx);
......@@ -9335,6 +9335,7 @@ if_then_else_cond (rtx x, rtx *ptrue, rtx *pfalse)
if (COMPARISON_P (cond0)
&& COMPARISON_P (cond1)
&& SCALAR_INT_MODE_P (mode)
&& ((GET_CODE (cond0) == reversed_comparison_code (cond1, NULL)
&& rtx_equal_p (XEXP (cond0, 0), XEXP (cond1, 0))
&& 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)
if (COMPARISON_P (x))
{
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);
if (code != UNKNOWN
&& comparison_dominates_p (cond, code))
return const0_rtx;
return CONST0_RTX (GET_MODE (x));
else
return x;
}
......@@ -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
original inner_mode. */
new_rtx = simplify_subreg (GET_MODE (x), r,
inner_mode, SUBREG_BYTE (x));
inner_mode, SUBREG_BYTE (x));
if (new_rtx)
return new_rtx;
else
......@@ -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
track of the original inner_mode. */
new_rtx = simplify_unary_operation (ZERO_EXTEND, GET_MODE (x),
r, inner_mode);
r, inner_mode);
if (new_rtx)
return new_rtx;
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>
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