From 45cac726fad204d1d1a426abd756dcab077c38d5 Mon Sep 17 00:00:00 2001 From: Kai Tietz Date: Tue, 18 Feb 2014 14:46:38 +0100 Subject: [PATCH] backport: re PR target/60193 (ICE on big nested frame) 2014-02-18 Kai Tietz Backport from mainline PR target/60193 * config/i386/i386.c (ix86_expand_prologue): Use rax register as displacement for restoring %r10, %rax. Additional fix wrong offset for restoring both-registers. 2014-02-18 Kai Tietz PR target/60193 * gcc.target/i386/nest-1.c: New testcase. From-SVN: r207846 --- gcc/ChangeLog | 8 ++++++++ gcc/config/i386/i386.c | 7 +++---- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.target/i386/nest-1.c | 14 ++++++++++++++ 4 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/nest-1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b5e716017493..2985bfab12c0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2014-02-18 Kai Tietz + + Backport from mainline + PR target/60193 + * config/i386/i386.c (ix86_expand_prologue): Use + rax register as displacement for restoring %r10, %rax. + Additional fix wrong offset for restoring both-registers. + 2014-02-18 Eric Botcazou * ipa-prop.c (compute_complex_ancestor_jump_func): Replace overzealous diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 25ec81420538..d4c02bc61b1d 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -10434,15 +10434,14 @@ ix86_expand_prologue (void) if (r10_live && eax_live) { - t = plus_constant (stack_pointer_rtx, allocate); + t = gen_rtx_PLUS (Pmode, stack_pointer_rtx, eax); emit_move_insn (r10, gen_frame_mem (Pmode, t)); - t = plus_constant (stack_pointer_rtx, - allocate - UNITS_PER_WORD); + t = plus_constant (t, UNITS_PER_WORD); emit_move_insn (eax, gen_frame_mem (Pmode, t)); } else if (eax_live || r10_live) { - t = plus_constant (stack_pointer_rtx, allocate); + t = gen_rtx_PLUS (Pmode, stack_pointer_rtx, eax); emit_move_insn ((eax_live ? eax : r10), gen_frame_mem (Pmode, t)); } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4f8229b93b2b..9cca8d78779e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-02-18 Kai Tietz + + PR target/60193 + * gcc.target/i386/nest-1.c: New testcase. + 2014-02-18 Eric Botcazou * gnat.dg/opt32.adb: New test. diff --git a/gcc/testsuite/gcc.target/i386/nest-1.c b/gcc/testsuite/gcc.target/i386/nest-1.c new file mode 100644 index 000000000000..ba75350fb0bc --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/nest-1.c @@ -0,0 +1,14 @@ +/* { dg-do compile { target llp64 } } */ +/* { dg-options "" } */ + +void foo (int i) +{ + void nested (void) + { + char arr[(1U << 31) + 4U]; + arr[i] = 0; + } + + nested (); +} + -- 2.47.2