Andrew Pinski <quic_apin...@quicinc.com> writes:
> Currently gimple_folder::convert_and_fold calls create_tmp_var; that
> means while in ssa form, the pass which calls fold_stmt will always
> have to update the ssa (via TODO_update_ssa or otherwise).  This seems
> not very useful since we know that this will always be a ssa name, using
> make_ssa_name instead is better and don't need to depend on the ssa updater.
> Plus this should have a small compile time performance and memory usage
> improvement too since this uses an anonymous ssa name rather than creating a
> full decl for this.
>
> Changes since v1:
> * Use make_ssa_name instead of create_tmp_reg_or_ssa_name, anonymous ssa
>   names are allowed early on in gimple too.
>
> Built and tested on aarch64-linux-gnu.
>
> gcc/ChangeLog:
>
>       * config/aarch64/aarch64-sve-builtins.cc: Include value-range.h and 
> tree-ssanames.h
>       (gimple_folder::convert_and_fold): Use make_ssa_name
>       instead of create_tmp_var for the temporary. Add comment about callback 
> argument.

>
> Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com>
> ---
>  gcc/config/aarch64/aarch64-sve-builtins.cc | 7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/gcc/config/aarch64/aarch64-sve-builtins.cc 
> b/gcc/config/aarch64/aarch64-sve-builtins.cc
> index 36519262efd..8540aef47b2 100644
> --- a/gcc/config/aarch64/aarch64-sve-builtins.cc
> +++ b/gcc/config/aarch64/aarch64-sve-builtins.cc
> @@ -47,6 +47,8 @@
>  #include "langhooks.h"
>  #include "stringpool.h"
>  #include "attribs.h"
> +#include "value-range.h"
> +#include "tree-ssanames.h"
>  #include "aarch64-sve-builtins.h"
>  #include "aarch64-sve-builtins-base.h"
>  #include "aarch64-sve-builtins-sve2.h"
> @@ -3664,7 +3666,8 @@ gimple_folder::fold_pfalse ()
>  /* Convert the lhs and all non-boolean vector-type operands to TYPE.
>     Pass the converted variables to the callback FP, and finally convert the
>     result back to the original type. Add the necessary conversion statements.
> -   Return the new call.  */
> +   Return the new call. Note the tree argument to the callback FP, can only 
> be set

Nit: long line.

Otherwise OK, given that this implements Richi's advice in the v1 thread.

Sorry for the slow review btw.

Richard

> +   once; it will always be a SSA_NAME.  */



>  gimple *
>  gimple_folder::convert_and_fold (tree type,
>                                gimple *(*fp) (gimple_folder &,
> @@ -3675,7 +3678,7 @@ gimple_folder::convert_and_fold (tree type,
>    tree old_ty = TREE_TYPE (lhs);
>    gimple_seq stmts = NULL;
>    bool convert_lhs_p = !useless_type_conversion_p (type, old_ty);
> -  tree lhs_conv = convert_lhs_p ? create_tmp_var (type) : lhs;
> +  tree lhs_conv = convert_lhs_p ? make_ssa_name (type) : lhs;
>    unsigned int num_args = gimple_call_num_args (call);
>    auto_vec<tree, 16> args_conv;
>    args_conv.safe_grow (num_args);

Reply via email to