Message ID | 20111208134530.GL1957@tyan-ft48-01.lab.bos.redhat.com |
---|---|
State | New |
Headers | show |
Jakub Jelinek writes: > Hi! > > Bootstrapped/regtested on x86_64-linux and i686-linux, committed to 4.6 > branch: ... > 2011-12-08 Jakub Jelinek <jakub@redhat.com> > > Backport from mainline > 2011-12-05 Jakub Jelinek <jakub@redhat.com> > Eric Botcazou <ebotcazou@adacore.com> > > PR middle-end/51323 > PR middle-end/50074 > * calls.c (internal_arg_pointer_exp_state): New variable. > (internal_arg_pointer_based_exp_1, > internal_arg_pointer_exp_scan): New functions. > (internal_arg_pointer_based_exp): New function. > (mem_overlaps_already_clobbered_arg_p): Use it. > (expand_call): Free internal_arg_pointer_exp_state.cache vector > and clear internal_arg_pointer_exp_state.scan_start. > > 2011-11-26 Joern Rennecke <joern.rennecke@embecosm.com> > > PR middle-end/50074 > * calls.c (mem_overlaps_already_clobbered_arg_p): > Return false if no outgoing arguments have been stored so far. > > 2011-12-05 Jakub Jelinek <jakub@redhat.com> > Eric Botcazou <ebotcazou@adacore.com> > > PR middle-end/51323 > PR middle-end/50074 > * gcc.c-torture/execute/pr51323.c: New test. This patch, r182112 on 4.6 branch, caused a test suite regression on arm-linux-gnueabi: +FAIL: gcc.c-torture/execute/20050713-1.c compilation, -O2 (internal compiler error) +UNRESOLVED: gcc.c-torture/execute/20050713-1.c execution, -O2 +FAIL: gcc.c-torture/execute/20050713-1.c compilation, -Os (internal compiler error) +UNRESOLVED: gcc.c-torture/execute/20050713-1.c execution, -Os because the compiler now ICEs: 20050713-1.c: In function 'bar3': 20050713-1.c:38:3: internal compiler error: in calculate_allocation, at vec.c:183 The same ICE also happens with today's trunk. /Mikael
On Sun, Dec 11, 2011 at 02:48:52PM +0100, Mikael Pettersson wrote: > This patch, r182112 on 4.6 branch, caused a test suite regression on arm-linux-gnueabi: > > +FAIL: gcc.c-torture/execute/20050713-1.c compilation, -O2 (internal compiler error) > +UNRESOLVED: gcc.c-torture/execute/20050713-1.c execution, -O2 > +FAIL: gcc.c-torture/execute/20050713-1.c compilation, -Os (internal compiler error) > +UNRESOLVED: gcc.c-torture/execute/20050713-1.c execution, -Os > > because the compiler now ICEs: > > 20050713-1.c: In function 'bar3': > 20050713-1.c:38:3: internal compiler error: in calculate_allocation, at vec.c:183 > > The same ICE also happens with today's trunk. Please file it into bugzilla (and the other bug too), I'll have a look. Jakub
Jakub Jelinek writes: > On Sun, Dec 11, 2011 at 02:48:52PM +0100, Mikael Pettersson wrote: > > This patch, r182112 on 4.6 branch, caused a test suite regression on arm-linux-gnueabi: > > > > +FAIL: gcc.c-torture/execute/20050713-1.c compilation, -O2 (internal compiler error) > > +UNRESOLVED: gcc.c-torture/execute/20050713-1.c execution, -O2 > > +FAIL: gcc.c-torture/execute/20050713-1.c compilation, -Os (internal compiler error) > > +UNRESOLVED: gcc.c-torture/execute/20050713-1.c execution, -Os > > > > because the compiler now ICEs: > > > > 20050713-1.c: In function 'bar3': > > 20050713-1.c:38:3: internal compiler error: in calculate_allocation, at vec.c:183 > > > > The same ICE also happens with today's trunk. > > Please file it into bugzilla (and the other bug too), I'll have a look. > > Jakub Done, they are PR51510 and PR51511.
--- gcc/sched-deps.c (revision 181855) +++ gcc/sched-deps.c (revision 181856) @@ -2873,7 +2873,11 @@ sched_analyze_insn (struct deps_desc *de else sched_analyze_2 (deps, XEXP (link, 0), insn); } - if (find_reg_note (insn, REG_SETJMP, NULL)) + /* Don't schedule anything after a tail call, tail call needs + to use at least all call-saved registers. */ + if (SIBLING_CALL_P (insn)) + reg_pending_barrier = TRUE_BARRIER; + else if (find_reg_note (insn, REG_SETJMP, NULL)) reg_pending_barrier = MOVE_BARRIER; } --- gcc/testsuite/gcc.target/i386/pr48721.c (revision 0) +++ gcc/testsuite/gcc.target/i386/pr48721.c (revision 181856) @@ -0,0 +1,51 @@ +/* PR rtl-optimization/48721 */ +/* { dg-do compile } */ +/* { dg-options "-O -foptimize-sibling-calls -fsched2-use-superblocks -fschedule-insns2 -mtune=core2" } */ + +extern unsigned char a[]; +extern int b[], d[], e[], f[], g[], *h[], m[], *n[], o[]; +extern char c[]; + +struct S +{ + unsigned char s1; + int s2, s3, s4, s5, s6, s7, s8; +}; + +__attribute__((noinline, noclone)) int +foo (int x) +{ + return 0; +} + +int +bar (int x, struct S *y) +{ + int z; + switch (x) + { + case 1: + case 2: + { + int t2, t4, t5, t6, t7, t8; + z = o[y->s8 * 6]; + t8 = *n[m[x] * 5]; + t4 = *h[y->s7]; + t7 = z; + z = g[f[x] + y->s6]; + t6 = e[y->s5]; + t5 = d[c[x] + y->s3 * 17]; + if (z) + t2 = b[z]; + if (a[z] != y->s1) + return foo (x); + y->s8 = t8; + y->s4 = t4; + y->s7 = t7; + y->s6 = t6; + y->s5 = t5; + y->s2 = t2; + } + } + return 0; +}