From: Uros Bizjak Date: Fri, 26 Aug 2011 20:53:38 +0000 (+0200) Subject: i386.c (ix86_build_const_vector): Rewrite using loop with RTVEC_ELT accessor. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=734dfb474fd01decb6f36def5cd7ff229677123c;p=gcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a067e2eceae..14aaee74711 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +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 diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 698bc7692ec..3a8b0818796 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 ();