Commit 7d80ca1f by Richard Guenther Committed by Richard Biener

cgraphunit.c (thunk_adjust): Use make_rename_temp.

2012-05-15  Richard Guenther  <rguenther@suse.de>

	* cgraphunit.c (thunk_adjust): Use make_rename_temp.
	(assemble_thunk): Likewise.  Manually rename and register
	function arguments.

From-SVN: r187538
parent 8c1f1d42
2012-05-15 Richard Guenther <rguenther@suse.de> 2012-05-15 Richard Guenther <rguenther@suse.de>
* cgraphunit.c (thunk_adjust): Use make_rename_temp.
(assemble_thunk): Likewise. Manually rename and register
function arguments.
2012-05-15 Richard Guenther <rguenther@suse.de>
PR tree-optimization/53355 PR tree-optimization/53355
* tree-vrp.c (extract_range_from_binary_expr_1): Handle LSHIFT_EXPRs * tree-vrp.c (extract_range_from_binary_expr_1): Handle LSHIFT_EXPRs
by constants. by constants.
......
...@@ -1264,25 +1264,21 @@ thunk_adjust (gimple_stmt_iterator * bsi, ...@@ -1264,25 +1264,21 @@ thunk_adjust (gimple_stmt_iterator * bsi,
} }
vtabletmp = vtabletmp =
create_tmp_var (build_pointer_type make_rename_temp (build_pointer_type
(build_pointer_type (vtable_entry_type)), "vptr"); (build_pointer_type (vtable_entry_type)), "vptr");
/* The vptr is always at offset zero in the object. */ /* The vptr is always at offset zero in the object. */
stmt = gimple_build_assign (vtabletmp, stmt = gimple_build_assign (vtabletmp,
build1 (NOP_EXPR, TREE_TYPE (vtabletmp), build1 (NOP_EXPR, TREE_TYPE (vtabletmp),
ptr)); ptr));
gsi_insert_after (bsi, stmt, GSI_NEW_STMT); gsi_insert_after (bsi, stmt, GSI_NEW_STMT);
mark_symbols_for_renaming (stmt);
find_referenced_vars_in (stmt);
/* Form the vtable address. */ /* Form the vtable address. */
vtabletmp2 = create_tmp_var (TREE_TYPE (TREE_TYPE (vtabletmp)), vtabletmp2 = make_rename_temp (TREE_TYPE (TREE_TYPE (vtabletmp)),
"vtableaddr"); "vtableaddr");
stmt = gimple_build_assign (vtabletmp2, stmt = gimple_build_assign (vtabletmp2,
build_simple_mem_ref (vtabletmp)); build_simple_mem_ref (vtabletmp));
gsi_insert_after (bsi, stmt, GSI_NEW_STMT); gsi_insert_after (bsi, stmt, GSI_NEW_STMT);
mark_symbols_for_renaming (stmt);
find_referenced_vars_in (stmt);
/* Find the entry with the vcall offset. */ /* Find the entry with the vcall offset. */
stmt = gimple_build_assign (vtabletmp2, stmt = gimple_build_assign (vtabletmp2,
...@@ -1292,13 +1288,11 @@ thunk_adjust (gimple_stmt_iterator * bsi, ...@@ -1292,13 +1288,11 @@ thunk_adjust (gimple_stmt_iterator * bsi,
gsi_insert_after (bsi, stmt, GSI_NEW_STMT); gsi_insert_after (bsi, stmt, GSI_NEW_STMT);
/* Get the offset itself. */ /* Get the offset itself. */
vtabletmp3 = create_tmp_var (TREE_TYPE (TREE_TYPE (vtabletmp2)), vtabletmp3 = make_rename_temp (TREE_TYPE (TREE_TYPE (vtabletmp2)),
"vcalloffset"); "vcalloffset");
stmt = gimple_build_assign (vtabletmp3, stmt = gimple_build_assign (vtabletmp3,
build_simple_mem_ref (vtabletmp2)); build_simple_mem_ref (vtabletmp2));
gsi_insert_after (bsi, stmt, GSI_NEW_STMT); gsi_insert_after (bsi, stmt, GSI_NEW_STMT);
mark_symbols_for_renaming (stmt);
find_referenced_vars_in (stmt);
/* Adjust the `this' pointer. */ /* Adjust the `this' pointer. */
ptr = fold_build_pointer_plus_loc (input_location, ptr, vtabletmp3); ptr = fold_build_pointer_plus_loc (input_location, ptr, vtabletmp3);
...@@ -1316,21 +1310,17 @@ thunk_adjust (gimple_stmt_iterator * bsi, ...@@ -1316,21 +1310,17 @@ thunk_adjust (gimple_stmt_iterator * bsi,
ptrtmp = ptr; ptrtmp = ptr;
else else
{ {
ptrtmp = create_tmp_var (TREE_TYPE (ptr), "ptr"); ptrtmp = make_rename_temp (TREE_TYPE (ptr), "ptr");
stmt = gimple_build_assign (ptrtmp, ptr); stmt = gimple_build_assign (ptrtmp, ptr);
gsi_insert_after (bsi, stmt, GSI_NEW_STMT); gsi_insert_after (bsi, stmt, GSI_NEW_STMT);
mark_symbols_for_renaming (stmt);
find_referenced_vars_in (stmt);
} }
ptr = fold_build_pointer_plus_hwi_loc (input_location, ptr = fold_build_pointer_plus_hwi_loc (input_location,
ptrtmp, fixed_offset); ptrtmp, fixed_offset);
} }
/* Emit the statement and gimplify the adjustment expression. */ /* Emit the statement and gimplify the adjustment expression. */
ret = create_tmp_var (TREE_TYPE (ptr), "adjusted_this"); ret = make_rename_temp (TREE_TYPE (ptr), "adjusted_this");
stmt = gimple_build_assign (ret, ptr); stmt = gimple_build_assign (ret, ptr);
mark_symbols_for_renaming (stmt);
find_referenced_vars_in (stmt);
gsi_insert_after (bsi, stmt, GSI_NEW_STMT); gsi_insert_after (bsi, stmt, GSI_NEW_STMT);
return ret; return ret;
...@@ -1434,7 +1424,7 @@ assemble_thunk (struct cgraph_node *node) ...@@ -1434,7 +1424,7 @@ assemble_thunk (struct cgraph_node *node)
BLOCK_VARS (DECL_INITIAL (current_function_decl)) = restmp; BLOCK_VARS (DECL_INITIAL (current_function_decl)) = restmp;
} }
else else
restmp = create_tmp_var_raw (restype, "retval"); restmp = make_rename_temp (restype, "retval");
} }
for (arg = a; arg; arg = DECL_CHAIN (arg)) for (arg = a; arg; arg = DECL_CHAIN (arg))
...@@ -1447,17 +1437,22 @@ assemble_thunk (struct cgraph_node *node) ...@@ -1447,17 +1437,22 @@ assemble_thunk (struct cgraph_node *node)
virtual_offset)); virtual_offset));
else else
VEC_quick_push (tree, vargs, a); VEC_quick_push (tree, vargs, a);
add_referenced_var (a);
if (is_gimple_reg (a))
mark_sym_for_renaming (a);
for (i = 1, arg = DECL_CHAIN (a); i < nargs; i++, arg = DECL_CHAIN (arg)) for (i = 1, arg = DECL_CHAIN (a); i < nargs; i++, arg = DECL_CHAIN (arg))
VEC_quick_push (tree, vargs, arg); {
add_referenced_var (arg);
if (is_gimple_reg (arg))
mark_sym_for_renaming (arg);
VEC_quick_push (tree, vargs, arg);
}
call = gimple_build_call_vec (build_fold_addr_expr_loc (0, alias), vargs); call = gimple_build_call_vec (build_fold_addr_expr_loc (0, alias), vargs);
VEC_free (tree, heap, vargs); VEC_free (tree, heap, vargs);
gimple_call_set_from_thunk (call, true); gimple_call_set_from_thunk (call, true);
if (restmp) if (restmp)
gimple_call_set_lhs (call, restmp); gimple_call_set_lhs (call, restmp);
gsi_insert_after (&bsi, call, GSI_NEW_STMT); gsi_insert_after (&bsi, call, GSI_NEW_STMT);
mark_symbols_for_renaming (call);
find_referenced_vars_in (call);
update_stmt (call);
if (restmp && !this_adjusting) if (restmp && !this_adjusting)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment