This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] PR middle-end/67850: Wrong call_used_regs used in aggregate_value_p
- From: "H.J. Lu" <hongjiu dot lu at intel dot com>
- To: gcc-patches at gcc dot gnu dot org
- Cc: Jeff Law <law at redhat dot com>, Richard Biener <rguenther at suse dot de>
- Date: Tue, 6 Oct 2015 04:43:13 -0700
- Subject: [PATCH] PR middle-end/67850: Wrong call_used_regs used in aggregate_value_p
- Authentication-results: sourceware.org; auth=none
- Reply-to: "H.J. Lu" <hjl dot tools at gmail dot com>
Since targetm.expand_to_rtl_hook may be called to switch ABI, it should
be called for each function before expanding to RTL. Otherwise, we may
use the stale information from compilation of the previous function.
aggregate_value_p uses call_used_regs. aggregate_value_p is used by
IPA and return value optimization, which are called before
pass_expand::execute after RTL expansion starts. We need to call
targetm.expand_to_rtl_hook early enough in cgraph_node::expand to make
sure that everything is in sync when RTL expansion starts.
Tested on Linux/x86-64. OK for trunk?
H.J.
---
PR middle-end/67850
* cfgexpand.c (pass_expand::execute): Don't call
targetm.expand_to_rtl_hook here.
* cgraphunit.c (cgraph_node::expand): Call
targetm.expand_to_rtl_hook here.
---
gcc/cfgexpand.c | 1 -
gcc/cgraphunit.c | 3 +++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c
index 58e55d2..6891750 100644
--- a/gcc/cfgexpand.c
+++ b/gcc/cfgexpand.c
@@ -6150,7 +6150,6 @@ pass_expand::execute (function *fun)
/* Mark arrays indexed with non-constant indices with TREE_ADDRESSABLE. */
discover_nonconstant_array_refs ();
- targetm.expand_to_rtl_hook ();
crtl->stack_alignment_needed = STACK_BOUNDARY;
crtl->max_used_stack_slot_alignment = STACK_BOUNDARY;
crtl->stack_alignment_estimated = 0;
diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c
index 04a4d3f..537a089 100644
--- a/gcc/cgraphunit.c
+++ b/gcc/cgraphunit.c
@@ -1973,6 +1973,9 @@ cgraph_node::expand (void)
bitmap_obstack_initialize (®_obstack); /* FIXME, only at RTL generation*/
+ /* It may update call_used_regs, which is used by aggregate_value_p. */
+ targetm.expand_to_rtl_hook ();
+
execute_all_ipa_transforms ();
/* Perform all tree transforms and optimizations. */
--
2.4.3