Re: Allow variable-sized temporary variables in gimplify.c

2018-01-12 Thread Richard Biener
On Fri, Jan 12, 2018 at 2:33 PM, Richard Sandiford
 wrote:
> This is needed to build libgfortran for SVE.  The OpenMP code needs
> to create temporary vector variables, and the variables will therefore
> be variable-sized for SVE.  Earlier patches made such variables work.
>
> Tested on aarch64-linux-gnu, x86_64-linux-gnu and powerpc64le-linux-gnu.
> Also tested by comparing the before-and-after assembly output for at
> least one target per CPU directory.  OK to install?

Ok.

Richard.

> Thanks,
> Richard
>
>
> 2018-01-12  Richard Sandiford  
>
> gcc/
> * gimplify.c (gimple_add_tmp_var_fn): Allow variables to have a
> poly_uint64 size, rather than requiring an unsigned HOST_WIDE_INT 
> size.
> (gimple_add_tmp_var): Likewise.
>
> Index: gcc/gimplify.c
> ===
> --- gcc/gimplify.c  2018-01-10 08:43:40.053367209 +
> +++ gcc/gimplify.c  2018-01-12 12:49:36.756892670 +
> @@ -702,7 +702,7 @@ gimple_add_tmp_var_fn (struct function *
>/* Later processing assumes that the object size is constant, which might
>   not be true at this point.  Force the use of a constant upper bound in
>   this case.  */
> -  if (!tree_fits_uhwi_p (DECL_SIZE_UNIT (tmp)))
> +  if (!tree_fits_poly_uint64_p (DECL_SIZE_UNIT (tmp)))
>  force_constant_size (tmp);
>
>DECL_CONTEXT (tmp) = fn->decl;
> @@ -721,7 +721,7 @@ gimple_add_tmp_var (tree tmp)
>/* Later processing assumes that the object size is constant, which might
>   not be true at this point.  Force the use of a constant upper bound in
>   this case.  */
> -  if (!tree_fits_uhwi_p (DECL_SIZE_UNIT (tmp)))
> +  if (!tree_fits_poly_uint64_p (DECL_SIZE_UNIT (tmp)))
>  force_constant_size (tmp);
>
>DECL_CONTEXT (tmp) = current_function_decl;


Allow variable-sized temporary variables in gimplify.c

2018-01-12 Thread Richard Sandiford
This is needed to build libgfortran for SVE.  The OpenMP code needs
to create temporary vector variables, and the variables will therefore
be variable-sized for SVE.  Earlier patches made such variables work.

Tested on aarch64-linux-gnu, x86_64-linux-gnu and powerpc64le-linux-gnu.
Also tested by comparing the before-and-after assembly output for at
least one target per CPU directory.  OK to install?

Thanks,
Richard


2018-01-12  Richard Sandiford  

gcc/
* gimplify.c (gimple_add_tmp_var_fn): Allow variables to have a
poly_uint64 size, rather than requiring an unsigned HOST_WIDE_INT size.
(gimple_add_tmp_var): Likewise.

Index: gcc/gimplify.c
===
--- gcc/gimplify.c  2018-01-10 08:43:40.053367209 +
+++ gcc/gimplify.c  2018-01-12 12:49:36.756892670 +
@@ -702,7 +702,7 @@ gimple_add_tmp_var_fn (struct function *
   /* Later processing assumes that the object size is constant, which might
  not be true at this point.  Force the use of a constant upper bound in
  this case.  */
-  if (!tree_fits_uhwi_p (DECL_SIZE_UNIT (tmp)))
+  if (!tree_fits_poly_uint64_p (DECL_SIZE_UNIT (tmp)))
 force_constant_size (tmp);
 
   DECL_CONTEXT (tmp) = fn->decl;
@@ -721,7 +721,7 @@ gimple_add_tmp_var (tree tmp)
   /* Later processing assumes that the object size is constant, which might
  not be true at this point.  Force the use of a constant upper bound in
  this case.  */
-  if (!tree_fits_uhwi_p (DECL_SIZE_UNIT (tmp)))
+  if (!tree_fits_poly_uint64_p (DECL_SIZE_UNIT (tmp)))
 force_constant_size (tmp);
 
   DECL_CONTEXT (tmp) = current_function_decl;