Commit f1cb6795 by Joern Rennecke Committed by Joern Rennecke

re PR target/46450 (xstormy16-elf --enable-werror-always build fails)

	PR target/46450
	* config/stormy16/stormy16.c (xstormy16_expand_prologue):
	Use add_reg_note.
	(xstormy16_function_arg): Dereference cum.
	(xstormy16_expand_builtin): Use expand_normal.
	Change type of omode to enum machine_mode.
	(combine_bnp): Rename and to and_insn.

From-SVN: r166665
parent a8ea9484
...@@ -83,6 +83,14 @@ ...@@ -83,6 +83,14 @@
* config/fr30/fr30.md (*movsf_constant_store): Remove duplicated * config/fr30/fr30.md (*movsf_constant_store): Remove duplicated
assignment. assignment.
PR target/46450
* config/stormy16/stormy16.c (xstormy16_expand_prologue):
Use add_reg_note.
(xstormy16_function_arg): Dereference cum.
(xstormy16_expand_builtin): Use expand_normal.
Change type of omode to enum machine_mode.
(combine_bnp): Rename and to and_insn.
2010-11-12 Eric Botcazou <ebotcazou@adacore.com> 2010-11-12 Eric Botcazou <ebotcazou@adacore.com>
PR debug/46375 PR debug/46375
...@@ -1109,9 +1109,7 @@ xstormy16_expand_prologue (void) ...@@ -1109,9 +1109,7 @@ xstormy16_expand_prologue (void)
XVECEXP (dwarf, 0, 1) = gen_rtx_SET (Pmode, stack_pointer_rtx, XVECEXP (dwarf, 0, 1) = gen_rtx_SET (Pmode, stack_pointer_rtx,
plus_constant (stack_pointer_rtx, plus_constant (stack_pointer_rtx,
GET_MODE_SIZE (Pmode))); GET_MODE_SIZE (Pmode)));
REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_FRAME_RELATED_EXPR, add_reg_note (insn, REG_FRAME_RELATED_EXPR, dwarf);
dwarf,
REG_NOTES (insn));
RTX_FRAME_RELATED_P (XVECEXP (dwarf, 0, 0)) = 1; RTX_FRAME_RELATED_P (XVECEXP (dwarf, 0, 0)) = 1;
RTX_FRAME_RELATED_P (XVECEXP (dwarf, 0, 1)) = 1; RTX_FRAME_RELATED_P (XVECEXP (dwarf, 0, 1)) = 1;
} }
...@@ -1134,9 +1132,7 @@ xstormy16_expand_prologue (void) ...@@ -1134,9 +1132,7 @@ xstormy16_expand_prologue (void)
XVECEXP (dwarf, 0, 1) = gen_rtx_SET (Pmode, stack_pointer_rtx, XVECEXP (dwarf, 0, 1) = gen_rtx_SET (Pmode, stack_pointer_rtx,
plus_constant (stack_pointer_rtx, plus_constant (stack_pointer_rtx,
GET_MODE_SIZE (Pmode))); GET_MODE_SIZE (Pmode)));
REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_FRAME_RELATED_EXPR, add_reg_note (insn, REG_FRAME_RELATED_EXPR, dwarf);
dwarf,
REG_NOTES (insn));
RTX_FRAME_RELATED_P (XVECEXP (dwarf, 0, 0)) = 1; RTX_FRAME_RELATED_P (XVECEXP (dwarf, 0, 0)) = 1;
RTX_FRAME_RELATED_P (XVECEXP (dwarf, 0, 1)) = 1; RTX_FRAME_RELATED_P (XVECEXP (dwarf, 0, 1)) = 1;
} }
...@@ -1279,9 +1275,9 @@ xstormy16_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode, ...@@ -1279,9 +1275,9 @@ xstormy16_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
if (mode == VOIDmode) if (mode == VOIDmode)
return const0_rtx; return const0_rtx;
if (targetm.calls.must_pass_in_stack (mode, type) if (targetm.calls.must_pass_in_stack (mode, type)
|| cum + XSTORMY16_WORD_SIZE (type, mode) > NUM_ARGUMENT_REGISTERS) || *cum + XSTORMY16_WORD_SIZE (type, mode) > NUM_ARGUMENT_REGISTERS)
return NULL_RTX; return NULL_RTX;
return gen_rtx_REG (mode, cum + FIRST_ARGUMENT_REGISTER); return gen_rtx_REG (mode, *cum + FIRST_ARGUMENT_REGISTER);
} }
/* Build the va_list type. /* Build the va_list type.
...@@ -2332,7 +2328,7 @@ xstormy16_expand_builtin (tree exp, rtx target, ...@@ -2332,7 +2328,7 @@ xstormy16_expand_builtin (tree exp, rtx target,
for (a = 0; a < 10 && argtree; a++) for (a = 0; a < 10 && argtree; a++)
{ {
args[a] = expand_expr (TREE_VALUE (argtree), NULL_RTX, VOIDmode, 0); args[a] = expand_normal (TREE_VALUE (argtree));
argtree = TREE_CHAIN (argtree); argtree = TREE_CHAIN (argtree);
} }
...@@ -2340,11 +2336,11 @@ xstormy16_expand_builtin (tree exp, rtx target, ...@@ -2340,11 +2336,11 @@ xstormy16_expand_builtin (tree exp, rtx target,
{ {
char ao = s16builtins[i].arg_ops[o]; char ao = s16builtins[i].arg_ops[o];
char c = insn_data[code].operand[o].constraint[0]; char c = insn_data[code].operand[o].constraint[0];
int omode; enum machine_mode omode;
copyto[o] = 0; copyto[o] = 0;
omode = insn_data[code].operand[o].mode; omode = (enum machine_mode) insn_data[code].operand[o].mode;
if (ao == 'r') if (ao == 'r')
op[o] = target ? target : gen_reg_rtx (omode); op[o] = target ? target : gen_reg_rtx (omode);
else if (ao == 't') else if (ao == 't')
...@@ -2391,7 +2387,7 @@ combine_bnp (rtx insn) ...@@ -2391,7 +2387,7 @@ combine_bnp (rtx insn)
{ {
int insn_code, regno, need_extend; int insn_code, regno, need_extend;
unsigned int mask; unsigned int mask;
rtx cond, reg, and, load, qireg, mem; rtx cond, reg, and_insn, load, qireg, mem;
enum machine_mode load_mode = QImode; enum machine_mode load_mode = QImode;
enum machine_mode and_mode = QImode; enum machine_mode and_mode = QImode;
rtx shift = NULL_RTX; rtx shift = NULL_RTX;
...@@ -2432,50 +2428,52 @@ combine_bnp (rtx insn) ...@@ -2432,50 +2428,52 @@ combine_bnp (rtx insn)
{ {
/* LT and GE conditionals should have a sign extend before /* LT and GE conditionals should have a sign extend before
them. */ them. */
for (and = prev_real_insn (insn); and; and = prev_real_insn (and)) for (and_insn = prev_real_insn (insn); and_insn;
and_insn = prev_real_insn (and_insn))
{ {
int and_code = recog_memoized (and); int and_code = recog_memoized (and_insn);
if (and_code == CODE_FOR_extendqihi2 if (and_code == CODE_FOR_extendqihi2
&& rtx_equal_p (SET_DEST (PATTERN (and)), reg) && rtx_equal_p (SET_DEST (PATTERN (and_insn)), reg)
&& rtx_equal_p (XEXP (SET_SRC (PATTERN (and)), 0), qireg)) && rtx_equal_p (XEXP (SET_SRC (PATTERN (and_insn)), 0), qireg))
break; break;
if (and_code == CODE_FOR_movhi_internal if (and_code == CODE_FOR_movhi_internal
&& rtx_equal_p (SET_DEST (PATTERN (and)), reg)) && rtx_equal_p (SET_DEST (PATTERN (and_insn)), reg))
{ {
/* This is for testing bit 15. */ /* This is for testing bit 15. */
and = insn; and_insn = insn;
break; break;
} }
if (reg_mentioned_p (reg, and)) if (reg_mentioned_p (reg, and_insn))
return; return;
if (GET_CODE (and) != NOTE if (GET_CODE (and_insn) != NOTE
&& GET_CODE (and) != INSN) && GET_CODE (and_insn) != INSN)
return; return;
} }
} }
else else
{ {
/* EQ and NE conditionals have an AND before them. */ /* EQ and NE conditionals have an AND before them. */
for (and = prev_real_insn (insn); and; and = prev_real_insn (and)) for (and_insn = prev_real_insn (insn); and_insn;
and_insn = prev_real_insn (and_insn))
{ {
if (recog_memoized (and) == CODE_FOR_andhi3 if (recog_memoized (and_insn) == CODE_FOR_andhi3
&& rtx_equal_p (SET_DEST (PATTERN (and)), reg) && rtx_equal_p (SET_DEST (PATTERN (and_insn)), reg)
&& rtx_equal_p (XEXP (SET_SRC (PATTERN (and)), 0), reg)) && rtx_equal_p (XEXP (SET_SRC (PATTERN (and_insn)), 0), reg))
break; break;
if (reg_mentioned_p (reg, and)) if (reg_mentioned_p (reg, and_insn))
return; return;
if (GET_CODE (and) != NOTE if (GET_CODE (and_insn) != NOTE
&& GET_CODE (and) != INSN) && GET_CODE (and_insn) != INSN)
return; return;
} }
if (and) if (and_insn)
{ {
/* Some mis-optimizations by GCC can generate a RIGHT-SHIFT /* Some mis-optimizations by GCC can generate a RIGHT-SHIFT
followed by an AND like this: followed by an AND like this:
...@@ -2486,7 +2484,8 @@ combine_bnp (rtx insn) ...@@ -2486,7 +2484,8 @@ combine_bnp (rtx insn)
(set (reg:HI r7) (and:HI (reg:HI r7) (const_int 1))) (set (reg:HI r7) (and:HI (reg:HI r7) (const_int 1)))
Attempt to detect this here. */ Attempt to detect this here. */
for (shift = prev_real_insn (and); shift; shift = prev_real_insn (shift)) for (shift = prev_real_insn (and_insn); shift;
shift = prev_real_insn (shift))
{ {
if (recog_memoized (shift) == CODE_FOR_lshrhi3 if (recog_memoized (shift) == CODE_FOR_lshrhi3
&& rtx_equal_p (SET_DEST (XVECEXP (PATTERN (shift), 0, 0)), reg) && rtx_equal_p (SET_DEST (XVECEXP (PATTERN (shift), 0, 0)), reg)
...@@ -2503,10 +2502,10 @@ combine_bnp (rtx insn) ...@@ -2503,10 +2502,10 @@ combine_bnp (rtx insn)
} }
} }
} }
if (!and) if (!and_insn)
return; return;
for (load = shift ? prev_real_insn (shift) : prev_real_insn (and); for (load = shift ? prev_real_insn (shift) : prev_real_insn (and_insn);
load; load;
load = prev_real_insn (load)) load = prev_real_insn (load))
{ {
...@@ -2562,10 +2561,11 @@ combine_bnp (rtx insn) ...@@ -2562,10 +2561,11 @@ combine_bnp (rtx insn)
} }
else else
{ {
if (!xstormy16_onebit_set_operand (XEXP (SET_SRC (PATTERN (and)), 1), load_mode)) if (!xstormy16_onebit_set_operand (XEXP (SET_SRC (PATTERN (and_insn)), 1),
load_mode))
return; return;
mask = (int) INTVAL (XEXP (SET_SRC (PATTERN (and)), 1)); mask = (int) INTVAL (XEXP (SET_SRC (PATTERN (and_insn)), 1));
if (shift) if (shift)
mask <<= INTVAL (XEXP (SET_SRC (XVECEXP (PATTERN (shift), 0, 0)), 1)); mask <<= INTVAL (XEXP (SET_SRC (XVECEXP (PATTERN (shift), 0, 0)), 1));
...@@ -2591,8 +2591,8 @@ combine_bnp (rtx insn) ...@@ -2591,8 +2591,8 @@ combine_bnp (rtx insn)
INSN_CODE (insn) = -1; INSN_CODE (insn) = -1;
delete_insn (load); delete_insn (load);
if (and != insn) if (and_insn != insn)
delete_insn (and); delete_insn (and_insn);
if (shift != NULL_RTX) if (shift != NULL_RTX)
delete_insn (shift); delete_insn (shift);
......
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