diff options
author | J"orn Rennecke <joern.rennecke@superh.com> | 2002-07-11 10:32:54 +0000 |
---|---|---|
committer | Joern Rennecke <amylaar@gcc.gnu.org> | 2002-07-11 11:32:54 +0100 |
commit | a06e3c4070d3c6e606cec20b7bb75a30ff02656b (patch) | |
tree | 1600228b687f0973277f1952e5f14849dbbd8053 /gcc/emit-rtl.c | |
parent | b70fc53b64a55140d7a3077b7914002e173ec401 (diff) | |
download | gcc-a06e3c4070d3c6e606cec20b7bb75a30ff02656b.zip gcc-a06e3c4070d3c6e606cec20b7bb75a30ff02656b.tar.gz gcc-a06e3c4070d3c6e606cec20b7bb75a30ff02656b.tar.bz2 |
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
Diffstat (limited to 'gcc/emit-rtl.c')
-rw-r--r-- | gcc/emit-rtl.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index 0ee4f11..eedea4a 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -5188,10 +5188,26 @@ gen_const_vector_0 (mode) for (i = 0; i < units; ++i) RTVEC_ELT (v, i) = CONST0_RTX (inner); - tem = gen_rtx_CONST_VECTOR (mode, v); + tem = gen_rtx_raw_CONST_VECTOR (mode, v); 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. LINE_NUMBERS is nonzero if line numbers are to be generated. */ |