Hi, I've applied the attached patch to mainline in order to make some testsuite fails to disappear on s390 and s390x.
gcc.dg/pr46309.c: This testcase depends on branch cost being above 1. I've copied the AVR solution and added a -mbranch-cost option to the back-end. That's probably quite handy in other situations as well. gcc.dg/pr44194-1.c: On s390 and s390x the ABI requires us to return structs always in memory what makes the testcase fail. "Fixed" by disabling the testcase on s390 and s390x. gfortran.dg/reassoc_4.f: For z10 and higher we override max-completely-peeled-insns and other parameters in the back-end what makes this testcase fail. The solution is to force the value to the default in order to make the testcase work with -march=z10 and higher again. Bye, -Andreas- 2012-01-26 Andreas Krebbel <andreas.kreb...@de.ibm.com> * config/s390/s390.h: Make BRANCH_COST an option. * config/s390/s390.opt: New option -mbranch-cost. 2012-01-26 Andreas Krebbel <andreas.kreb...@de.ibm.com> * gcc.dg/pr46309.c: Set branch-cost to 2 for s390 and s390x. * gcc.dg/pr44194-1.c: Disable since s390 returns structs always in memory. * gfortran.dg/reassoc_4.f: Force max-completely-peeled-insns to the default value for s390 and s390x. --- gcc/config/s390/s390.h | 2 !! gcc/config/s390/s390.opt | 6 ++++++ gcc/testsuite/gcc.dg/pr44194-1.c | 2 !! gcc/testsuite/gcc.dg/pr46309.c | 2 !! gcc/testsuite/gfortran.dg/reassoc_4.f | 1 + 5 files changed, 7 insertions(+), 6 modifications(!) Index: gcc/config/s390/s390.h =================================================================== *** gcc/config/s390/s390.h.orig --- gcc/config/s390/s390.h *************** do { \ *** 722,728 **** /* A C expression for the cost of a branch instruction. A value of 1 is the default; other values are interpreted relative to that. */ ! #define BRANCH_COST(speed_p, predictable_p) 1 /* Nonzero if access to memory by bytes is slow and undesirable. */ #define SLOW_BYTE_ACCESS 1 --- 722,728 ---- /* A C expression for the cost of a branch instruction. A value of 1 is the default; other values are interpreted relative to that. */ ! #define BRANCH_COST(speed_p, predictable_p) s390_branch_cost /* Nonzero if access to memory by bytes is slow and undesirable. */ #define SLOW_BYTE_ACCESS 1 Index: gcc/config/s390/s390.opt =================================================================== *** gcc/config/s390/s390.opt.orig --- gcc/config/s390/s390.opt *************** Warn if a single function's framesize ex *** 140,142 **** --- 140,148 ---- mzarch Target Report RejectNegative Negative(mesa) Mask(ZARCH) z/Architecture + + mbranch-cost= + Target Report Joined RejectNegative UInteger Var(s390_branch_cost) Init(1) + Set the branch costs for conditional branch instructions. Reasonable + values are small, non-negative integers. The default branch cost is + 1. Index: gcc/testsuite/gcc.dg/pr46309.c =================================================================== *** gcc/testsuite/gcc.dg/pr46309.c.orig --- gcc/testsuite/gcc.dg/pr46309.c *************** *** 4,10 **** /* The transformation depends on BRANCH_COST being greater than 1 (see the notes in the PR), so try to force that. */ /* { dg-additional-options "-mtune=octeon2" { target mips*-*-* } } */ ! /* { dg-additional-options "-mbranch-cost=2" { target avr*-*-* } } */ int f1 (int a) --- 4,10 ---- /* The transformation depends on BRANCH_COST being greater than 1 (see the notes in the PR), so try to force that. */ /* { dg-additional-options "-mtune=octeon2" { target mips*-*-* } } */ ! /* { dg-additional-options "-mbranch-cost=2" { target avr*-*-* s390*-*-* } } */ int f1 (int a) Index: gcc/testsuite/gfortran.dg/reassoc_4.f =================================================================== *** gcc/testsuite/gfortran.dg/reassoc_4.f.orig --- gcc/testsuite/gfortran.dg/reassoc_4.f *************** *** 1,6 **** --- 1,7 ---- ! { dg-do compile } ! { dg-options "-O3 -ffast-math -fdump-tree-reassoc1" } ! { dg-options "-O3 -ffast-math -fdump-tree-reassoc1 --param max-completely-peel-times=16" { target spu-*-* } } + ! { dg-options "-O3 -ffast-math -fdump-tree-reassoc1 --param max-completely-peeled-insns=400" { target s390*-*-* } } subroutine anisonl(w,vo,anisox,s,ii1,jj1,weight) integer ii1,jj1,i1,iii1,j1,jjj1,k1,l1,m1,n1 real*8 w(3,3),vo(3,3),anisox(3,3,3,3),s(60,60),weight Index: gcc/testsuite/gcc.dg/pr44194-1.c =================================================================== *** gcc/testsuite/gcc.dg/pr44194-1.c.orig --- gcc/testsuite/gcc.dg/pr44194-1.c *************** *** 1,4 **** ! /* { dg-do compile { target { { { i?86-*-* x86_64-*-* } && x32 } || lp64 } } } */ /* { dg-options "-O2 -fdump-rtl-dse1" } */ /* Restricting to 64-bit targets since 32-bit targets return structures in memory. */ --- 1,4 ---- ! /* { dg-do compile { target { { { { i?86-*-* x86_64-*-* } && x32 } || lp64 } && { ! s390*-*-* } } } } */ /* { dg-options "-O2 -fdump-rtl-dse1" } */ /* Restricting to 64-bit targets since 32-bit targets return structures in memory. */