[gcc/devel/gccgo] tree-inline: Simplify IPA-CP type conversion (PR 93385)

Ian Lance Taylor ian@gcc.gnu.org
Sun Jul 12 17:46:29 GMT 2020


https://gcc.gnu.org/g:375a77925c320a273d3b1ef3182f29f31aaa8edf

commit 375a77925c320a273d3b1ef3182f29f31aaa8edf
Author: Martin Jambor <mjambor@suse.cz>
Date:   Mon May 4 13:53:54 2020 +0200

    tree-inline: Simplify IPA-CP type conversion (PR 93385)
    
    when callers and callees do not quite agree on the type of a
    parameter, usually with ill-defined K&R or with smilarly wrong LTO
    input, IPA-CP can attempt to try and substitute a wrong type for a
    parameter (see e.g. gcc.dg/torture/pr48063.c).  Function
    tree_function_versioning attempts to handle this in order not to
    create invalid gimple but it then creates the mapping using
    setup_one_parameter which also handles the same situation to avoid
    similar problems when inlining and in more defined way.
    
    So this patch simply removes the conversion attempts in
    tree_function_versioning itself.  It is helpful for my upcoming fix of
    PR 93385 because then I do not need to teach
    ipa_param_body_adjustments to distinguish between successful and
    unsuccessful mappings - setup_one_parameter uses force_value_to_type
    for conversions which simly maps the worst cases to zero.
    
    2020-05-04  Martin Jambor  <mjambor@suse.cz>
    
            PR ipa/93385
            * tree-inline.c (tree_function_versioning): Leave any type conversion
            of replacements to setup_one_parameter and its friend
            force_value_to_type.

Diff:
---
 gcc/ChangeLog     |  7 +++++++
 gcc/tree-inline.c | 42 +++++-------------------------------------
 2 files changed, 12 insertions(+), 37 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a549d453731..42c4af762cd 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2020-05-04  Martin Jambor  <mjambor@suse.cz>
+
+	PR ipa/93385
+	* tree-inline.c (tree_function_versioning): Leave any type conversion
+	of replacements to setup_one_parameter and its friend
+	force_value_to_type.
+
 2020-05-04  Uroš Bizjak  <ubizjak@gmail.com>
 
 	PR target/94650
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c
index 69ca8e99109..32c49ae03ef 100644
--- a/gcc/tree-inline.c
+++ b/gcc/tree-inline.c
@@ -6261,46 +6261,14 @@ tree_function_versioning (tree old_decl, tree new_decl,
 	  p = new_param_indices[p];
 
 	tree parm;
-	tree req_type, new_type;
-
 	for (parm = DECL_ARGUMENTS (old_decl); p;
 	     parm = DECL_CHAIN (parm))
 	  p--;
-	tree old_tree = parm;
-	req_type = TREE_TYPE (parm);
-	new_type = TREE_TYPE (replace_info->new_tree);
-	if (!useless_type_conversion_p (req_type, new_type))
-	  {
-	    if (fold_convertible_p (req_type, replace_info->new_tree))
-	      replace_info->new_tree
-		= fold_build1 (NOP_EXPR, req_type, replace_info->new_tree);
-	    else if (TYPE_SIZE (req_type) == TYPE_SIZE (new_type))
-	      replace_info->new_tree
-		= fold_build1 (VIEW_CONVERT_EXPR, req_type,
-			       replace_info->new_tree);
-	    else
-	      {
-		if (dump_file)
-		  {
-		    fprintf (dump_file, "    const ");
-		    print_generic_expr (dump_file,
-					replace_info->new_tree);
-		    fprintf (dump_file,
-			     "  can't be converted to param ");
-		    print_generic_expr (dump_file, parm);
-		    fprintf (dump_file, "\n");
-		  }
-		old_tree = NULL;
-	      }
-	  }
-
-	if (old_tree)
-	  {
-	    init = setup_one_parameter (&id, old_tree, replace_info->new_tree,
-					id.src_fn, NULL, &vars);
-	    if (init)
-	      init_stmts.safe_push (init);
-	  }
+	gcc_assert (parm);
+	init = setup_one_parameter (&id, parm, replace_info->new_tree,
+				    id.src_fn, NULL, &vars);
+	if (init)
+	  init_stmts.safe_push (init);
       }
 
   ipa_param_body_adjustments *param_body_adjs = NULL;


More information about the Gcc-cvs mailing list