Commit e967cc2f by David Malcolm Committed by David Malcolm

lower-subreg.c: Use rtx_insn

gcc/
	* lower-subreg.c (simple_move): Strengthen param "insn" from rtx
	to rtx_insn *.
	(resolve_reg_notes): Likewise.
	(resolve_simple_move): Likewise for return type, param "insn", and
	locals "insns", "minsn".
	(resolve_clobber): Strengthen param "insn" from rtx to rtx_insn *.
	(resolve_use): Likewise.
	(resolve_debug): Likewise.
	(find_decomposable_shift_zext): Likewise.
	(resolve_shift_zext): Likewise for return type, param "insn", and
	locals "insns", "in".  Eliminate use of NULL_RTX in favor of NULL.
	(decompose_multiword_subregs): Likewise for local "insn",
	"orig_insn", "decomposed_shift", "end".

From-SVN: r214346
parent 95ecfb26
2014-08-22 David Malcolm <dmalcolm@redhat.com> 2014-08-22 David Malcolm <dmalcolm@redhat.com>
* lower-subreg.c (simple_move): Strengthen param "insn" from rtx
to rtx_insn *.
(resolve_reg_notes): Likewise.
(resolve_simple_move): Likewise for return type, param "insn", and
locals "insns", "minsn".
(resolve_clobber): Strengthen param "insn" from rtx to rtx_insn *.
(resolve_use): Likewise.
(resolve_debug): Likewise.
(find_decomposable_shift_zext): Likewise.
(resolve_shift_zext): Likewise for return type, param "insn", and
locals "insns", "in". Eliminate use of NULL_RTX in favor of NULL.
(decompose_multiword_subregs): Likewise for local "insn",
"orig_insn", "decomposed_shift", "end".
2014-08-22 David Malcolm <dmalcolm@redhat.com>
* basic-block.h (basic_block split_edge_and_insert): Strengthen * basic-block.h (basic_block split_edge_and_insert): Strengthen
param "insns" from rtx to rtx_insn *. param "insns" from rtx to rtx_insn *.
......
...@@ -321,7 +321,7 @@ simple_move_operand (rtx x) ...@@ -321,7 +321,7 @@ simple_move_operand (rtx x)
is called. */ is called. */
static rtx static rtx
simple_move (rtx insn, bool speed_p) simple_move (rtx_insn *insn, bool speed_p)
{ {
rtx x; rtx x;
rtx set; rtx set;
...@@ -800,7 +800,7 @@ adjust_decomposed_uses (rtx *px, void *data ATTRIBUTE_UNUSED) ...@@ -800,7 +800,7 @@ adjust_decomposed_uses (rtx *px, void *data ATTRIBUTE_UNUSED)
INSN. */ INSN. */
static void static void
resolve_reg_notes (rtx insn) resolve_reg_notes (rtx_insn *insn)
{ {
rtx *pnote, note; rtx *pnote, note;
...@@ -870,10 +870,11 @@ can_decompose_p (rtx x) ...@@ -870,10 +870,11 @@ can_decompose_p (rtx x)
we don't change anything, return INSN, otherwise return the start we don't change anything, return INSN, otherwise return the start
of the sequence of moves. */ of the sequence of moves. */
static rtx static rtx_insn *
resolve_simple_move (rtx set, rtx insn) resolve_simple_move (rtx set, rtx_insn *insn)
{ {
rtx src, dest, real_dest, insns; rtx src, dest, real_dest;
rtx_insn *insns;
enum machine_mode orig_mode, dest_mode; enum machine_mode orig_mode, dest_mode;
unsigned int words; unsigned int words;
bool pushing; bool pushing;
...@@ -915,7 +916,8 @@ resolve_simple_move (rtx set, rtx insn) ...@@ -915,7 +916,8 @@ resolve_simple_move (rtx set, rtx insn)
|| (GET_MODE_SIZE (orig_mode) || (GET_MODE_SIZE (orig_mode)
!= GET_MODE_SIZE (GET_MODE (SUBREG_REG (dest)))))) != GET_MODE_SIZE (GET_MODE (SUBREG_REG (dest))))))
{ {
rtx reg, minsn, smove; rtx reg, smove;
rtx_insn *minsn;
reg = gen_reg_rtx (orig_mode); reg = gen_reg_rtx (orig_mode);
minsn = emit_move_insn (reg, src); minsn = emit_move_insn (reg, src);
...@@ -1062,7 +1064,8 @@ resolve_simple_move (rtx set, rtx insn) ...@@ -1062,7 +1064,8 @@ resolve_simple_move (rtx set, rtx insn)
if (real_dest != NULL_RTX) if (real_dest != NULL_RTX)
{ {
rtx mdest, minsn, smove; rtx mdest, smove;
rtx_insn *minsn;
if (dest_mode == orig_mode) if (dest_mode == orig_mode)
mdest = dest; mdest = dest;
...@@ -1108,7 +1111,7 @@ resolve_simple_move (rtx set, rtx insn) ...@@ -1108,7 +1111,7 @@ resolve_simple_move (rtx set, rtx insn)
component registers. Return whether we changed something. */ component registers. Return whether we changed something. */
static bool static bool
resolve_clobber (rtx pat, rtx insn) resolve_clobber (rtx pat, rtx_insn *insn)
{ {
rtx reg; rtx reg;
enum machine_mode orig_mode; enum machine_mode orig_mode;
...@@ -1149,7 +1152,7 @@ resolve_clobber (rtx pat, rtx insn) ...@@ -1149,7 +1152,7 @@ resolve_clobber (rtx pat, rtx insn)
whether we changed something. */ whether we changed something. */
static bool static bool
resolve_use (rtx pat, rtx insn) resolve_use (rtx pat, rtx_insn *insn)
{ {
if (resolve_reg_p (XEXP (pat, 0)) || resolve_subreg_p (XEXP (pat, 0))) if (resolve_reg_p (XEXP (pat, 0)) || resolve_subreg_p (XEXP (pat, 0)))
{ {
...@@ -1165,7 +1168,7 @@ resolve_use (rtx pat, rtx insn) ...@@ -1165,7 +1168,7 @@ resolve_use (rtx pat, rtx insn)
/* A VAR_LOCATION can be simplified. */ /* A VAR_LOCATION can be simplified. */
static void static void
resolve_debug (rtx insn) resolve_debug (rtx_insn *insn)
{ {
for_each_rtx (&PATTERN (insn), adjust_decomposed_uses, NULL_RTX); for_each_rtx (&PATTERN (insn), adjust_decomposed_uses, NULL_RTX);
...@@ -1180,7 +1183,7 @@ resolve_debug (rtx insn) ...@@ -1180,7 +1183,7 @@ resolve_debug (rtx insn)
if INSN is decomposable. */ if INSN is decomposable. */
static bool static bool
find_decomposable_shift_zext (rtx insn, bool speed_p) find_decomposable_shift_zext (rtx_insn *insn, bool speed_p)
{ {
rtx set; rtx set;
rtx op; rtx op;
...@@ -1236,33 +1239,33 @@ find_decomposable_shift_zext (rtx insn, bool speed_p) ...@@ -1236,33 +1239,33 @@ find_decomposable_shift_zext (rtx insn, bool speed_p)
and 'set to zero' insn. Return a pointer to the new insn when a and 'set to zero' insn. Return a pointer to the new insn when a
replacement was done. */ replacement was done. */
static rtx static rtx_insn *
resolve_shift_zext (rtx insn) resolve_shift_zext (rtx_insn *insn)
{ {
rtx set; rtx set;
rtx op; rtx op;
rtx op_operand; rtx op_operand;
rtx insns; rtx_insn *insns;
rtx src_reg, dest_reg, dest_upper, upper_src = NULL_RTX; rtx src_reg, dest_reg, dest_upper, upper_src = NULL_RTX;
int src_reg_num, dest_reg_num, offset1, offset2, src_offset; int src_reg_num, dest_reg_num, offset1, offset2, src_offset;
set = single_set (insn); set = single_set (insn);
if (!set) if (!set)
return NULL_RTX; return NULL;
op = SET_SRC (set); op = SET_SRC (set);
if (GET_CODE (op) != ASHIFT if (GET_CODE (op) != ASHIFT
&& GET_CODE (op) != LSHIFTRT && GET_CODE (op) != LSHIFTRT
&& GET_CODE (op) != ASHIFTRT && GET_CODE (op) != ASHIFTRT
&& GET_CODE (op) != ZERO_EXTEND) && GET_CODE (op) != ZERO_EXTEND)
return NULL_RTX; return NULL;
op_operand = XEXP (op, 0); op_operand = XEXP (op, 0);
/* We can tear this operation apart only if the regs were already /* We can tear this operation apart only if the regs were already
torn apart. */ torn apart. */
if (!resolve_reg_p (SET_DEST (set)) && !resolve_reg_p (op_operand)) if (!resolve_reg_p (SET_DEST (set)) && !resolve_reg_p (op_operand))
return NULL_RTX; return NULL;
/* src_reg_num is the number of the word mode register which we /* src_reg_num is the number of the word mode register which we
are operating on. For a left shift and a zero_extend on little are operating on. For a left shift and a zero_extend on little
...@@ -1326,7 +1329,7 @@ resolve_shift_zext (rtx insn) ...@@ -1326,7 +1329,7 @@ resolve_shift_zext (rtx insn)
if (dump_file) if (dump_file)
{ {
rtx in; rtx_insn *in;
fprintf (dump_file, "; Replacing insn: %d with insns: ", INSN_UID (insn)); fprintf (dump_file, "; Replacing insn: %d with insns: ", INSN_UID (insn));
for (in = insns; in != insn; in = NEXT_INSN (in)) for (in = insns; in != insn; in = NEXT_INSN (in))
fprintf (dump_file, "%d ", INSN_UID (in)); fprintf (dump_file, "%d ", INSN_UID (in));
...@@ -1465,7 +1468,7 @@ decompose_multiword_subregs (bool decompose_copies) ...@@ -1465,7 +1468,7 @@ decompose_multiword_subregs (bool decompose_copies)
speed_p = optimize_function_for_speed_p (cfun); speed_p = optimize_function_for_speed_p (cfun);
FOR_EACH_BB_FN (bb, cfun) FOR_EACH_BB_FN (bb, cfun)
{ {
rtx insn; rtx_insn *insn;
FOR_BB_INSNS (bb, insn) FOR_BB_INSNS (bb, insn)
{ {
...@@ -1545,7 +1548,7 @@ decompose_multiword_subregs (bool decompose_copies) ...@@ -1545,7 +1548,7 @@ decompose_multiword_subregs (bool decompose_copies)
FOR_EACH_BB_FN (bb, cfun) FOR_EACH_BB_FN (bb, cfun)
{ {
rtx insn; rtx_insn *insn;
FOR_BB_INSNS (bb, insn) FOR_BB_INSNS (bb, insn)
{ {
...@@ -1572,7 +1575,7 @@ decompose_multiword_subregs (bool decompose_copies) ...@@ -1572,7 +1575,7 @@ decompose_multiword_subregs (bool decompose_copies)
set = simple_move (insn, speed_p); set = simple_move (insn, speed_p);
if (set) if (set)
{ {
rtx orig_insn = insn; rtx_insn *orig_insn = insn;
bool cfi = control_flow_insn_p (insn); bool cfi = control_flow_insn_p (insn);
/* We can end up splitting loads to multi-word pseudos /* We can end up splitting loads to multi-word pseudos
...@@ -1602,7 +1605,7 @@ decompose_multiword_subregs (bool decompose_copies) ...@@ -1602,7 +1605,7 @@ decompose_multiword_subregs (bool decompose_copies)
} }
else else
{ {
rtx decomposed_shift; rtx_insn *decomposed_shift;
decomposed_shift = resolve_shift_zext (insn); decomposed_shift = resolve_shift_zext (insn);
if (decomposed_shift != NULL_RTX) if (decomposed_shift != NULL_RTX)
...@@ -1644,7 +1647,7 @@ decompose_multiword_subregs (bool decompose_copies) ...@@ -1644,7 +1647,7 @@ decompose_multiword_subregs (bool decompose_copies)
loads to appear. */ loads to appear. */
EXECUTE_IF_SET_IN_BITMAP (sub_blocks, 0, i, sbi) EXECUTE_IF_SET_IN_BITMAP (sub_blocks, 0, i, sbi)
{ {
rtx insn, end; rtx_insn *insn, *end;
edge fallthru; edge fallthru;
bb = BASIC_BLOCK_FOR_FN (cfun, i); bb = BASIC_BLOCK_FOR_FN (cfun, i);
......
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