Commit 686d390a by Jakub Jelinek Committed by Jakub Jelinek

re PR rtl-optimization/70174 (ICE at -O1 and above on x86_64-linux-gnu in…

re PR rtl-optimization/70174 (ICE at -O1 and above on x86_64-linux-gnu in gen_lowpart_general, at rtlhooks.c:63)

	PR rtl-optimization/70174
	* expmed.c (store_bit_field_using_insv): Use gen_lowpart_if_possible
	followed by gen_lowpart on force_reg instead of just gen_lowpart.

	* gcc.dg/pr70174.c: New test.

From-SVN: r234137
parent 02d472a2
2016-03-11 Jakub Jelinek <jakub@redhat.com> 2016-03-11 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/70174
* expmed.c (store_bit_field_using_insv): Use gen_lowpart_if_possible
followed by gen_lowpart on force_reg instead of just gen_lowpart.
PR tree-optimization/70169 PR tree-optimization/70169
* tree-ssa-loop.c (gen_lsm_tmp_name): Handle FUNCTION_DECL and * tree-ssa-loop.c (gen_lsm_tmp_name): Handle FUNCTION_DECL and
LABEL_DECL like VAR_DECL. Emit nothing instead of gcc_unreachable LABEL_DECL like VAR_DECL. Emit nothing instead of gcc_unreachable
......
...@@ -658,24 +658,28 @@ store_bit_field_using_insv (const extraction_insn *insv, rtx op0, ...@@ -658,24 +658,28 @@ store_bit_field_using_insv (const extraction_insn *insv, rtx op0,
{ {
if (GET_MODE_BITSIZE (GET_MODE (value)) >= bitsize) if (GET_MODE_BITSIZE (GET_MODE (value)) >= bitsize)
{ {
rtx tmp;
/* Optimization: Don't bother really extending VALUE /* Optimization: Don't bother really extending VALUE
if it has all the bits we will actually use. However, if it has all the bits we will actually use. However,
if we must narrow it, be sure we do it correctly. */ if we must narrow it, be sure we do it correctly. */
if (GET_MODE_SIZE (GET_MODE (value)) < GET_MODE_SIZE (op_mode)) if (GET_MODE_SIZE (GET_MODE (value)) < GET_MODE_SIZE (op_mode))
{ {
rtx tmp;
tmp = simplify_subreg (op_mode, value1, GET_MODE (value), 0); tmp = simplify_subreg (op_mode, value1, GET_MODE (value), 0);
if (! tmp) if (! tmp)
tmp = simplify_gen_subreg (op_mode, tmp = simplify_gen_subreg (op_mode,
force_reg (GET_MODE (value), force_reg (GET_MODE (value),
value1), value1),
GET_MODE (value), 0); GET_MODE (value), 0);
value1 = tmp;
} }
else else
value1 = gen_lowpart (op_mode, value1); {
tmp = gen_lowpart_if_possible (op_mode, value1);
if (! tmp)
tmp = gen_lowpart (op_mode, force_reg (GET_MODE (value),
value1));
}
value1 = tmp;
} }
else if (CONST_INT_P (value)) else if (CONST_INT_P (value))
value1 = gen_int_mode (INTVAL (value), op_mode); value1 = gen_int_mode (INTVAL (value), op_mode);
......
2016-03-11 Jakub Jelinek <jakub@redhat.com> 2016-03-11 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/70174
* gcc.dg/pr70174.c: New test.
PR tree-optimization/70169 PR tree-optimization/70169
* gcc.dg/pr70169.c: New test. * gcc.dg/pr70169.c: New test.
......
/* PR rtl-optimization/70174 */
/* { dg-do compile } */
/* { dg-options "-O2" } */
struct S { int f : 4; } a;
void
foo (void)
{
a.f = foo; /* { dg-warning "assignment makes integer from pointer without a cast" } */
}
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