Commit a06e3c40 by J"orn Rennecke Committed by Joern Rennecke

rtl.h (gen_rtx_CONST_VECTOR): Declare.

	* rtl.h (gen_rtx_CONST_VECTOR): Declare.
	* gengenrtl.c (special_rtx): Check for CONST_VECTOR.
	* emit-rtl.c (gen_rtx_CONST_VECTOR): New function.
	(gen_const_vector_0): Use it.

From-SVN: r55395
parent b70fc53b
Thu Jul 11 11:31:12 2002 J"orn Rennecke <joern.rennecke@superh.com>
* rtl.h (gen_rtx_CONST_VECTOR): Declare.
* gengenrtl.c (special_rtx): Check for CONST_VECTOR.
* emit-rtl.c (gen_rtx_CONST_VECTOR): New function.
(gen_const_vector_0): Use it.
2002-07-11 John David Anglin <dave@hiauly1.hia.nrc.ca> 2002-07-11 John David Anglin <dave@hiauly1.hia.nrc.ca>
* pa.md (adddi3): For 32-bit targets, force constants to a register * pa.md (adddi3): For 32-bit targets, force constants to a register
......
...@@ -5188,10 +5188,26 @@ gen_const_vector_0 (mode) ...@@ -5188,10 +5188,26 @@ gen_const_vector_0 (mode)
for (i = 0; i < units; ++i) for (i = 0; i < units; ++i)
RTVEC_ELT (v, i) = CONST0_RTX (inner); RTVEC_ELT (v, i) = CONST0_RTX (inner);
tem = gen_rtx_CONST_VECTOR (mode, v); tem = gen_rtx_raw_CONST_VECTOR (mode, v);
return tem; return tem;
} }
/* Generate a vector like gen_rtx_raw_CONST_VEC, but use the zero vector when
all elements are zero. */
rtx
gen_rtx_CONST_VECTOR (mode, v)
enum machine_mode mode;
rtvec v;
{
rtx inner_zero = CONST0_RTX (GET_MODE_INNER (mode));
int i;
for (i = GET_MODE_NUNITS (mode) - 1; i >= 0; i--)
if (RTVEC_ELT (v, i) != inner_zero)
return gen_rtx_raw_CONST_VECTOR (mode, v);
return CONST0_RTX (mode);
}
/* Create some permanent unique rtl objects shared between all functions. /* Create some permanent unique rtl objects shared between all functions.
LINE_NUMBERS is nonzero if line numbers are to be generated. */ LINE_NUMBERS is nonzero if line numbers are to be generated. */
......
...@@ -149,7 +149,8 @@ special_rtx (idx) ...@@ -149,7 +149,8 @@ special_rtx (idx)
return (strcmp (defs[idx].enumname, "CONST_INT") == 0 return (strcmp (defs[idx].enumname, "CONST_INT") == 0
|| strcmp (defs[idx].enumname, "REG") == 0 || strcmp (defs[idx].enumname, "REG") == 0
|| strcmp (defs[idx].enumname, "SUBREG") == 0 || strcmp (defs[idx].enumname, "SUBREG") == 0
|| strcmp (defs[idx].enumname, "MEM") == 0); || strcmp (defs[idx].enumname, "MEM") == 0
|| strcmp (defs[idx].enumname, "CONST_VECTOR") == 0);
} }
/* Return nonzero if the RTL code given by index IDX is one that we should /* Return nonzero if the RTL code given by index IDX is one that we should
......
...@@ -1712,6 +1712,7 @@ extern GTY(()) rtx return_address_pointer_rtx; ...@@ -1712,6 +1712,7 @@ extern GTY(()) rtx return_address_pointer_rtx;
should also modify gen_rtx to use the special function. */ should also modify gen_rtx to use the special function. */
extern rtx gen_rtx_CONST_INT PARAMS ((enum machine_mode, HOST_WIDE_INT)); extern rtx gen_rtx_CONST_INT PARAMS ((enum machine_mode, HOST_WIDE_INT));
extern rtx gen_rtx_CONST_VECTOR PARAMS ((enum machine_mode, rtvec));
extern rtx gen_raw_REG PARAMS ((enum machine_mode, int)); extern rtx gen_raw_REG PARAMS ((enum machine_mode, int));
extern rtx gen_rtx_REG PARAMS ((enum machine_mode, unsigned)); extern rtx gen_rtx_REG PARAMS ((enum machine_mode, unsigned));
extern rtx gen_rtx_SUBREG PARAMS ((enum machine_mode, rtx, int)); extern rtx gen_rtx_SUBREG PARAMS ((enum machine_mode, rtx, int));
......
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