From 734dfb474fd01decb6f36def5cd7ff229677123c Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Fri, 26 Aug 2011 22:53:38 +0200 Subject: [PATCH] i386.c (ix86_build_const_vector): Rewrite using loop with RTVEC_ELT accessor. * config/i386/i386.c (ix86_build_const_vector): Rewrite using loop with RTVEC_ELT accessor. From-SVN: r178124 --- gcc/ChangeLog | 10 ++++++++++ gcc/config/i386/i386.c | 49 +++++++++++++------------------------------------ 2 files changed, 23 insertions(+), 36 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a067e2e..14aaee7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,15 @@ 2011-08-26 Uros Bizjak + * config/i386/i386.md (round2): New expander. + * config/i386/i386.c (enum ix86_builtins): Add + IX86_BUILTIN_ROUND{PS,PD}_AZ{,256}. + (struct builtin_description): Add __builtin_ia32_round{ps,pd}_az{,256} + descriptions. + (ix86_builtin_vectorized_function): Handle BUILT_IN_ROUND{,F} builtins. + (ix86_build_const_vector): Rewrite using loop with RTVEC_ELT accessor. + +2011-08-26 Uros Bizjak + PR middle-end/50083 * convert.c (convert_to_integer) : Convert only when TARGET_C99_FUNCTIONS. diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 698bc76..3a8b081 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -16512,52 +16512,29 @@ ix86_expand_convert_uns_sisf_sse (rtx target, rtx input) rtx ix86_build_const_vector (enum machine_mode mode, bool vect, rtx value) { + int i, n_elt; rtvec v; + enum machine_mode scalar_mode; + switch (mode) { case V4SImode: - gcc_assert (vect); - v = gen_rtvec (4, value, value, value, value); - return gen_rtx_CONST_VECTOR (V4SImode, v); - case V2DImode: gcc_assert (vect); - v = gen_rtvec (2, value, value); - return gen_rtx_CONST_VECTOR (V2DImode, v); - case V8SFmode: - if (vect) - v = gen_rtvec (8, value, value, value, value, - value, value, value, value); - else - v = gen_rtvec (8, value, CONST0_RTX (SFmode), - CONST0_RTX (SFmode), CONST0_RTX (SFmode), - CONST0_RTX (SFmode), CONST0_RTX (SFmode), - CONST0_RTX (SFmode), CONST0_RTX (SFmode)); - return gen_rtx_CONST_VECTOR (V8SFmode, v); - case V4SFmode: - if (vect) - v = gen_rtvec (4, value, value, value, value); - else - v = gen_rtvec (4, value, CONST0_RTX (SFmode), - CONST0_RTX (SFmode), CONST0_RTX (SFmode)); - return gen_rtx_CONST_VECTOR (V4SFmode, v); - case V4DFmode: - if (vect) - v = gen_rtvec (4, value, value, value, value); - else - v = gen_rtvec (4, value, CONST0_RTX (DFmode), - CONST0_RTX (DFmode), CONST0_RTX (DFmode)); - return gen_rtx_CONST_VECTOR (V4DFmode, v); - case V2DFmode: - if (vect) - v = gen_rtvec (2, value, value); - else - v = gen_rtvec (2, value, CONST0_RTX (DFmode)); - return gen_rtx_CONST_VECTOR (V2DFmode, v); + n_elt = GET_MODE_NUNITS (mode); + v = rtvec_alloc (n_elt); + scalar_mode = GET_MODE_INNER (mode); + + RTVEC_ELT (v, 0) = value; + + for (i = 1; i < n_elt; ++i) + RTVEC_ELT (v, i) = vect ? value : CONST0_RTX (scalar_mode); + + return gen_rtx_CONST_VECTOR (mode, v); default: gcc_unreachable (); -- 2.7.4