Commit 8deccbb7 by Richard Sandiford Committed by Richard Sandiford

rtl.h (PUT_MODE_RAW): New macro.

gcc/
	* rtl.h (PUT_MODE_RAW): New macro.
	(PUT_REG_NOTE_KIND): Use it.
	(set_mode_and_regno): Declare.
	(gen_raw_REG): Change regno to "unsigned int".
	(gen_rtx_REG): Change "unsigned" to "unsigned int".
	(PUT_MODE): Forward to PUT_MODE_RAW for generators, otherwise
	use set_mode_and_regno to change the mode of registers.
	* gengenrtl.c (gendef): Use PUT_MODE_RAW.
	* emit-rtl.c (set_mode_and_regno): New function.
	(gen_raw_REG): Change regno to unsigned int.  Use set_mode_and_regno.
	* caller-save.c (reg_save_code): Use set_mode_and_regno.
	* expr.c (init_expr_target): Likewise.
	* ira.c (setup_prohibited_mode_move_regs): Likewise.
	* postreload.c (reload_cse_simplify_operands): Likewise.

From-SVN: r223341
parent 5d2446b1
2015-05-19 Richard Sandiford <richard.sandiford@arm.com> 2015-05-19 Richard Sandiford <richard.sandiford@arm.com>
* rtl.h (PUT_MODE_RAW): New macro.
(PUT_REG_NOTE_KIND): Use it.
(set_mode_and_regno): Declare.
(gen_raw_REG): Change regno to "unsigned int".
(gen_rtx_REG): Change "unsigned" to "unsigned int".
(PUT_MODE): Forward to PUT_MODE_RAW for generators, otherwise
use set_mode_and_regno to change the mode of registers.
* gengenrtl.c (gendef): Use PUT_MODE_RAW.
* emit-rtl.c (set_mode_and_regno): New function.
(gen_raw_REG): Change regno to unsigned int. Use set_mode_and_regno.
* caller-save.c (reg_save_code): Use set_mode_and_regno.
* expr.c (init_expr_target): Likewise.
* ira.c (setup_prohibited_mode_move_regs): Likewise.
* postreload.c (reload_cse_simplify_operands): Likewise.
2015-05-19 Richard Sandiford <richard.sandiford@arm.com>
* caller-save.c (init_caller_save): Use word_mode and * caller-save.c (init_caller_save): Use word_mode and
FIRST_PSEUDO_REGISTER when creating temporary rtxes. FIRST_PSEUDO_REGISTER when creating temporary rtxes.
* expr.c (init_expr_target): Likewise. * expr.c (init_expr_target): Likewise.
......
...@@ -150,8 +150,7 @@ reg_save_code (int reg, machine_mode mode) ...@@ -150,8 +150,7 @@ reg_save_code (int reg, machine_mode mode)
/* Update the register number and modes of the register /* Update the register number and modes of the register
and memory operand. */ and memory operand. */
SET_REGNO_RAW (test_reg, reg); set_mode_and_regno (test_reg, mode, reg);
PUT_MODE (test_reg, mode);
PUT_MODE (test_mem, mode); PUT_MODE (test_mem, mode);
/* Force re-recognition of the modified insns. */ /* Force re-recognition of the modified insns. */
......
...@@ -430,16 +430,24 @@ gen_blockage (void) ...@@ -430,16 +430,24 @@ gen_blockage (void)
#endif #endif
/* Set the mode and register number of X to MODE and REGNO. */
void
set_mode_and_regno (rtx x, machine_mode mode, unsigned int regno)
{
PUT_MODE_RAW (x, mode);
SET_REGNO_RAW (x, regno);
}
/* Generate a new REG rtx. Make sure ORIGINAL_REGNO is set properly, and /* Generate a new REG rtx. Make sure ORIGINAL_REGNO is set properly, and
don't attempt to share with the various global pieces of rtl (such as don't attempt to share with the various global pieces of rtl (such as
frame_pointer_rtx). */ frame_pointer_rtx). */
rtx rtx
gen_raw_REG (machine_mode mode, int regno) gen_raw_REG (machine_mode mode, unsigned int regno)
{ {
rtx x = rtx_alloc_stat (REG PASS_MEM_STAT); rtx x = rtx_alloc_stat (REG PASS_MEM_STAT);
PUT_MODE (x, mode); set_mode_and_regno (x, mode, regno);
SET_REGNO_RAW (x, regno);
REG_ATTRS (x) = NULL; REG_ATTRS (x) = NULL;
ORIGINAL_REGNO (x) = regno; ORIGINAL_REGNO (x) = regno;
return x; return x;
......
...@@ -221,7 +221,6 @@ init_expr_target (void) ...@@ -221,7 +221,6 @@ init_expr_target (void)
direct_load[(int) mode] = direct_store[(int) mode] = 0; direct_load[(int) mode] = direct_store[(int) mode] = 0;
PUT_MODE (mem, mode); PUT_MODE (mem, mode);
PUT_MODE (mem1, mode); PUT_MODE (mem1, mode);
PUT_MODE (reg, mode);
/* See if there is some register that can be used in this mode and /* See if there is some register that can be used in this mode and
directly loaded or stored from memory. */ directly loaded or stored from memory. */
...@@ -234,7 +233,7 @@ init_expr_target (void) ...@@ -234,7 +233,7 @@ init_expr_target (void)
if (! HARD_REGNO_MODE_OK (regno, mode)) if (! HARD_REGNO_MODE_OK (regno, mode))
continue; continue;
SET_REGNO (reg, regno); set_mode_and_regno (reg, mode, regno);
SET_SRC (pat) = mem; SET_SRC (pat) = mem;
SET_DEST (pat) = reg; SET_DEST (pat) = reg;
......
...@@ -252,7 +252,7 @@ gendef (const char *format) ...@@ -252,7 +252,7 @@ gendef (const char *format)
puts (" rtx rt;"); puts (" rtx rt;");
puts (" rt = rtx_alloc_stat (code PASS_MEM_STAT);\n"); puts (" rt = rtx_alloc_stat (code PASS_MEM_STAT);\n");
puts (" PUT_MODE (rt, mode);"); puts (" PUT_MODE_RAW (rt, mode);");
for (p = format, i = j = 0; *p ; ++p, ++i) for (p = format, i = j = 0; *p ; ++p, ++i)
if (*p != '0') if (*p != '0')
......
...@@ -1778,10 +1778,8 @@ setup_prohibited_mode_move_regs (void) ...@@ -1778,10 +1778,8 @@ setup_prohibited_mode_move_regs (void)
{ {
if (! HARD_REGNO_MODE_OK (j, (machine_mode) i)) if (! HARD_REGNO_MODE_OK (j, (machine_mode) i))
continue; continue;
SET_REGNO_RAW (test_reg1, j); set_mode_and_regno (test_reg1, (machine_mode) i, j);
PUT_MODE (test_reg1, (machine_mode) i); set_mode_and_regno (test_reg2, (machine_mode) i, j);
SET_REGNO_RAW (test_reg2, j);
PUT_MODE (test_reg2, (machine_mode) i);
INSN_CODE (move_insn) = -1; INSN_CODE (move_insn) = -1;
recog_memoized (move_insn); recog_memoized (move_insn);
if (INSN_CODE (move_insn) < 0) if (INSN_CODE (move_insn) < 0)
......
...@@ -562,8 +562,7 @@ reload_cse_simplify_operands (rtx_insn *insn, rtx testreg) ...@@ -562,8 +562,7 @@ reload_cse_simplify_operands (rtx_insn *insn, rtx testreg)
if (! TEST_HARD_REG_BIT (equiv_regs[i], regno)) if (! TEST_HARD_REG_BIT (equiv_regs[i], regno))
continue; continue;
SET_REGNO_RAW (testreg, regno); set_mode_and_regno (testreg, mode, regno);
PUT_MODE (testreg, mode);
/* We found a register equal to this operand. Now look for all /* We found a register equal to this operand. Now look for all
alternatives that can accept this register and have not been alternatives that can accept this register and have not been
......
...@@ -668,8 +668,8 @@ class GTY(()) rtx_note : public rtx_insn ...@@ -668,8 +668,8 @@ class GTY(()) rtx_note : public rtx_insn
#define GET_CODE(RTX) ((enum rtx_code) (RTX)->code) #define GET_CODE(RTX) ((enum rtx_code) (RTX)->code)
#define PUT_CODE(RTX, CODE) ((RTX)->code = (CODE)) #define PUT_CODE(RTX, CODE) ((RTX)->code = (CODE))
#define GET_MODE(RTX) ((machine_mode) (RTX)->mode) #define GET_MODE(RTX) ((machine_mode) (RTX)->mode)
#define PUT_MODE(RTX, MODE) ((RTX)->mode = (MODE)) #define PUT_MODE_RAW(RTX, MODE) ((RTX)->mode = (MODE))
/* RTL vector. These appear inside RTX's when there is a need /* RTL vector. These appear inside RTX's when there is a need
for a variable number of things. The principle use is inside for a variable number of things. The principle use is inside
...@@ -1509,7 +1509,7 @@ enum reg_note ...@@ -1509,7 +1509,7 @@ enum reg_note
/* Define macros to extract and insert the reg-note kind in an EXPR_LIST. */ /* Define macros to extract and insert the reg-note kind in an EXPR_LIST. */
#define REG_NOTE_KIND(LINK) ((enum reg_note) GET_MODE (LINK)) #define REG_NOTE_KIND(LINK) ((enum reg_note) GET_MODE (LINK))
#define PUT_REG_NOTE_KIND(LINK, KIND) \ #define PUT_REG_NOTE_KIND(LINK, KIND) \
PUT_MODE (LINK, (machine_mode) (KIND)) PUT_MODE_RAW (LINK, (machine_mode) (KIND))
/* Names for REG_NOTE's in EXPR_LIST insn's. */ /* Names for REG_NOTE's in EXPR_LIST insn's. */
...@@ -3216,13 +3216,27 @@ gen_rtx_INSN (machine_mode mode, rtx_insn *prev_insn, rtx_insn *next_insn, ...@@ -3216,13 +3216,27 @@ gen_rtx_INSN (machine_mode mode, rtx_insn *prev_insn, rtx_insn *next_insn,
rtx reg_notes); rtx reg_notes);
extern rtx gen_rtx_CONST_INT (machine_mode, HOST_WIDE_INT); extern rtx gen_rtx_CONST_INT (machine_mode, HOST_WIDE_INT);
extern rtx gen_rtx_CONST_VECTOR (machine_mode, rtvec); extern rtx gen_rtx_CONST_VECTOR (machine_mode, rtvec);
extern rtx gen_raw_REG (machine_mode, int); extern void set_mode_and_regno (rtx, machine_mode, unsigned int);
extern rtx gen_rtx_REG (machine_mode, unsigned); extern rtx gen_raw_REG (machine_mode, unsigned int);
extern rtx gen_rtx_REG (machine_mode, unsigned int);
extern rtx gen_rtx_SUBREG (machine_mode, rtx, int); extern rtx gen_rtx_SUBREG (machine_mode, rtx, int);
extern rtx gen_rtx_MEM (machine_mode, rtx); extern rtx gen_rtx_MEM (machine_mode, rtx);
extern rtx gen_rtx_VAR_LOCATION (machine_mode, tree, rtx, extern rtx gen_rtx_VAR_LOCATION (machine_mode, tree, rtx,
enum var_init_status); enum var_init_status);
#ifdef GENERATOR_FILE
#define PUT_MODE(RTX, MODE) PUT_MODE_RAW (RTX, MODE)
#else
static inline void
PUT_MODE (rtx x, machine_mode mode)
{
if (REG_P (x))
set_mode_and_regno (x, mode, REGNO (x));
else
PUT_MODE_RAW (x, mode);
}
#endif
#define GEN_INT(N) gen_rtx_CONST_INT (VOIDmode, (N)) #define GEN_INT(N) gen_rtx_CONST_INT (VOIDmode, (N))
/* Virtual registers are used during RTL generation to refer to locations into /* Virtual registers are used during RTL generation to refer to locations into
......
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