aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBalaji V. Iyer <balaji.v.iyer@intel.com>2013-03-13 18:23:08 +0000
committerBalaji V. Iyer <balaji.v.iyer@intel.com>2013-03-13 18:23:08 +0000
commit8ac49ecba7150b4121b219d8e141d8e90a5e2fe4 (patch)
tree0f648a3126b3cac3ec251e59c6daed3a60d368c5
parent40c1fdccf7d79a1a80159716fe3ac70beab051f1 (diff)
Removed the frame pointer required setting from target to common files.
gcc/ChangeLog.cilkplus +2013-03-13 Balaji V. Iyer <balaji.v.iyer@intel.com> + + * config/i386/i386.c (ix86_frame_pointer_required): Removed statements + that checks if cilkplus is enabled and if the function is a cilk + function. + * ira.c (ira_setup_eliminable_regset): Enforce frame pointer usage when + it cilkplus is enabled and if the function is a cilk function. + * reload1.c (update_eliminables): Likewise. git-svn-id: https://gcc.gnu.org/svn/gcc/branches/cilkplus@196637 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog.cilkplus9
-rw-r--r--gcc/config/i386/i386.c4
-rw-r--r--gcc/ira.c21
-rw-r--r--gcc/reload1.c3
4 files changed, 23 insertions, 14 deletions
diff --git a/gcc/ChangeLog.cilkplus b/gcc/ChangeLog.cilkplus
index 5d0138a585b..fe02abdb24f 100644
--- a/gcc/ChangeLog.cilkplus
+++ b/gcc/ChangeLog.cilkplus
@@ -1,3 +1,12 @@
+2013-03-13 Balaji V. Iyer <balaji.v.iyer@intel.com>
+
+ * config/i386/i386.c (ix86_frame_pointer_required): Removed statements
+ that checks if cilkplus is enabled and if the function is a cilk
+ function.
+ * ira.c (ira_setup_eliminable_regset): Enforce frame pointer usage when
+ it cilkplus is enabled and if the function is a cilk function.
+ * reload1.c (update_eliminables): Likewise.
+
2013-03-12 Balaji V. Iyer <balaji.v.iyer@intel.com>
* builtins.c (expand_builtin): Added a check if cilkscreen is available
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index efbe07989ee..0e21b88e1a9 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -8532,10 +8532,6 @@ ix86_can_use_return_insn_p (void)
static bool
ix86_frame_pointer_required (void)
{
- /* For all Cilk specific functions, we frame pointer is required. */
- if (flag_enable_cilk && cfun->is_cilk_function == 1)
- return true;
-
/* If we accessed previous frames, then the generated code expects
to be able to access the saved ebp value in our frame. */
if (cfun->machine->accesses_prev_frame)
diff --git a/gcc/ira.c b/gcc/ira.c
index 03b336831fa..b96b96fabbf 100644
--- a/gcc/ira.c
+++ b/gcc/ira.c
@@ -1865,15 +1865,18 @@ ira_setup_eliminable_regset (bool from_ira_p)
sp for alloca. So we can't eliminate the frame pointer in that
case. At some point, we should improve this by emitting the
sp-adjusting insns for this case. */
- frame_pointer_needed
- = (! flag_omit_frame_pointer
- || (cfun->calls_alloca && EXIT_IGNORE_STACK)
- /* We need the frame pointer to catch stack overflow exceptions
- if the stack pointer is moving. */
- || (flag_stack_check && STACK_CHECK_MOVING_SP)
- || crtl->accesses_prior_frames
- || crtl->stack_realign_needed
- || targetm.frame_pointer_required ());
+ if (flag_enable_cilk && cfun && cfun->is_cilk_function == 1)
+ frame_pointer_needed = true;
+ else
+ frame_pointer_needed
+ = (! flag_omit_frame_pointer
+ || (cfun->calls_alloca && EXIT_IGNORE_STACK)
+ /* We need the frame pointer to catch stack overflow exceptions
+ if the stack pointer is moving. */
+ || (flag_stack_check && STACK_CHECK_MOVING_SP)
+ || crtl->accesses_prior_frames
+ || crtl->stack_realign_needed
+ || targetm.frame_pointer_required ());
if (from_ira_p && ira_use_lra_p)
/* It can change FRAME_POINTER_NEEDED. We call it only from IRA
diff --git a/gcc/reload1.c b/gcc/reload1.c
index cbb945d064e..e4ae1d1487f 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -3960,7 +3960,8 @@ update_eliminables (HARD_REG_SET *pset)
for (ep = reg_eliminate; ep < &reg_eliminate[NUM_ELIMINABLE_REGS]; ep++)
if ((ep->from == HARD_FRAME_POINTER_REGNUM
- && targetm.frame_pointer_required ())
+ && ((flag_enable_cilk && cfun && cfun->is_cilk_function == 1)
+ || targetm.frame_pointer_required ()))
#ifdef ELIMINABLE_REGS
|| ! targetm.can_eliminate (ep->from, ep->to)
#endif