aboutsummaryrefslogtreecommitdiff
path: root/gcc/emit-rtl.c
diff options
context:
space:
mode:
authorJ"orn Rennecke <joern.rennecke@superh.com>2002-07-11 10:32:54 +0000
committerJoern Rennecke <amylaar@gcc.gnu.org>2002-07-11 11:32:54 +0100
commita06e3c4070d3c6e606cec20b7bb75a30ff02656b (patch)
tree1600228b687f0973277f1952e5f14849dbbd8053 /gcc/emit-rtl.c
parentb70fc53b64a55140d7a3077b7914002e173ec401 (diff)
downloadgcc-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.c18
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. */