Commit b15b6fc5 by Jakub Jelinek Committed by Jakub Jelinek

re PR middle-end/85414 (ICE: in ix86_expand_prologue, at config/i386/i386.c:13810 with -Og -fgcse)

	PR middle-end/85414
	* simplify-rtx.c (simplify_unary_operation_1) <case SIGN_EXTEND,
	case ZERO_EXTEND>: Pass SUBREG_REG (op) rather than op to
	gen_lowpart_no_emit.

From-SVN: r259649
parent be3830f8
2018-04-25 Jakub Jelinek <jakub@redhat.com>
PR middle-end/85414
* simplify-rtx.c (simplify_unary_operation_1) <case SIGN_EXTEND,
case ZERO_EXTEND>: Pass SUBREG_REG (op) rather than op to
gen_lowpart_no_emit.
2018-04-25 Sebastian Peryt <sebastian.peryt@intel.com> 2018-04-25 Sebastian Peryt <sebastian.peryt@intel.com>
PR target/85473 PR target/85473
......
...@@ -233,7 +233,10 @@ convert_move (rtx to, rtx from, int unsignedp) ...@@ -233,7 +233,10 @@ convert_move (rtx to, rtx from, int unsignedp)
&& (GET_MODE_PRECISION (subreg_promoted_mode (from)) && (GET_MODE_PRECISION (subreg_promoted_mode (from))
>= GET_MODE_PRECISION (to_int_mode)) >= GET_MODE_PRECISION (to_int_mode))
&& SUBREG_CHECK_PROMOTED_SIGN (from, unsignedp)) && SUBREG_CHECK_PROMOTED_SIGN (from, unsignedp))
from = gen_lowpart (to_int_mode, from), from_mode = to_int_mode; {
from = gen_lowpart (to_int_mode, SUBREG_REG (from));
from_mode = to_int_mode;
}
gcc_assert (GET_CODE (to) != SUBREG || !SUBREG_PROMOTED_VAR_P (to)); gcc_assert (GET_CODE (to) != SUBREG || !SUBREG_PROMOTED_VAR_P (to));
......
...@@ -1484,7 +1484,7 @@ simplify_unary_operation_1 (enum rtx_code code, machine_mode mode, rtx op) ...@@ -1484,7 +1484,7 @@ simplify_unary_operation_1 (enum rtx_code code, machine_mode mode, rtx op)
&& SUBREG_PROMOTED_SIGNED_P (op) && SUBREG_PROMOTED_SIGNED_P (op)
&& !paradoxical_subreg_p (mode, GET_MODE (SUBREG_REG (op)))) && !paradoxical_subreg_p (mode, GET_MODE (SUBREG_REG (op))))
{ {
temp = rtl_hooks.gen_lowpart_no_emit (mode, op); temp = rtl_hooks.gen_lowpart_no_emit (mode, SUBREG_REG (op));
if (temp) if (temp)
return temp; return temp;
} }
...@@ -1567,7 +1567,7 @@ simplify_unary_operation_1 (enum rtx_code code, machine_mode mode, rtx op) ...@@ -1567,7 +1567,7 @@ simplify_unary_operation_1 (enum rtx_code code, machine_mode mode, rtx op)
&& SUBREG_PROMOTED_UNSIGNED_P (op) && SUBREG_PROMOTED_UNSIGNED_P (op)
&& !paradoxical_subreg_p (mode, GET_MODE (SUBREG_REG (op)))) && !paradoxical_subreg_p (mode, GET_MODE (SUBREG_REG (op))))
{ {
temp = rtl_hooks.gen_lowpart_no_emit (mode, op); temp = rtl_hooks.gen_lowpart_no_emit (mode, SUBREG_REG (op));
if (temp) if (temp)
return temp; return temp;
} }
......
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