Home | History | Annotate | Line # | Download | only in contrib
compare-all-tests revision 1.1
      1  1.1  mrg #! /bin/bash
      2  1.1  mrg 
      3  1.1  mrg # Compare the assembly language output for all the gcc tests.
      4  1.1  mrg # Copyright (C) 2009 Free Software Foundation, Inc.
      5  1.1  mrg # Contributed by Paolo Bonzini.
      6  1.1  mrg #
      7  1.1  mrg # Invoke it as "bash compare-all-tests target1 target2 ... targetN".
      8  1.1  mrg # Assumptions are:
      9  1.1  mrg #
     10  1.1  mrg # 1) that the base and patched compilers reside respectively in
     11  1.1  mrg # base-$target-build and $target-build, where $target is the commandline
     12  1.1  mrg # argument to compare-all-tests, and should match the variables in the
     13  1.1  mrg # script itself so that the correct set of options is tested.  Both
     14  1.1  mrg # compilers should be fully built (including target libraries).
     15  1.1  mrg # 
     16  1.1  mrg # 2) that the testsuite has been run on the base compiler (since it's
     17  1.1  mrg # just compilation testing, using RUNTESTFLAGS=--target_board=basic-sim
     18  1.1  mrg # usually suffices).
     19  1.1  mrg # 
     20  1.1  mrg # Tests that fail to compile on the base compiler are not compared.
     21  1.1  mrg 
     22  1.1  mrg alpha_opts='-mlong-double-64/-mieee -mlong-double-64 -mlong-double-128/-mieee -mlong-double-128'
     23  1.1  mrg arm_opts='-mthumb/-march=armv5t -mthumb/-march=armv6t2 -march=armv5 -mthumb/-march=armv6t2/-mfpu=vfp/-mfloat-abi=softfp -march=armv5/-mfpu=vfp/-mfloat-abi=softfp'
     24  1.1  mrg cris_opts='-march=v32 -march=v1'
     25  1.1  mrg h8300_opts='/ -mh -mh/-mn -ms -ms/-mn -msx -msx/-mn -mint32 -mh/-mint32 -mh/-mn/-mint32 -ms/-mint32 -ms/-mn/-mint32 -msx/-mint32 -msx/-mn/-mint32'
     26  1.1  mrg i386_opts='-m32 -m64 -m32/-msse/-msse2/-mfpmath=sse'
     27  1.1  mrg m32c_opts='-mcpu=r8c -mcpu=m16c -mcpu=m32c'
     28  1.1  mrg m68k_opts='-m68000 -m68020 -m68020/-m68881 -m68040/-m68881 -m68060/-m68881 -mcfv4e'
     29  1.1  mrg mips_opts='-msoft-float/-mgp32/-mips16 -mabi=32/-mfp32/-mgp32/-mips16 -mabi=o64/-mfp64/-mgp64/-mips16 -msoft-float/-mgp32 -mfp32/-mgp32 -march=mips64r2/-mabi=32/-mfp64/-mgp32 -msoft-float/-mgp64 -msingle-float/-mfp32/-mgp64 -mfp64/-mgp64'
     30  1.1  mrg mn10300_opts='-mam33 -mam33-2'
     31  1.1  mrg pa_opts='-march=2.0 -march=1.0 -march=1.1'
     32  1.1  mrg ppc_opts='-m32 -m64'
     33  1.1  mrg s390_opts='-m31 -m31/-mzarch -m64'
     34  1.1  mrg score_opts='-mscore3 -mscore7'
     35  1.1  mrg sh64_opts='-m5-32media -m5-32media-nofpu -m5-64media -m5-64media-nofpu -m5-compact -m5-compact-nofpu'
     36  1.1  mrg sh_opts='-m3 -m3e -m4 -m4a -m4al -m4/-mieee -m1 -m1/-mno-cbranchdi -m2a -m2a/-mieee -m2e -m2e/-mieee'
     37  1.1  mrg sparc_opts='-mcpu=v8/-m32 -mcpu=v9/-m32 -m64'
     38  1.1  mrg 
     39  1.1  mrg all_targets='alpha arm avr bfin cris crx fr30 frv h8300 ia64 iq2000 m32c m32r m68hc11 m68k mcore mips mmix mn10300 pa pdp11 picochip ppc score sh sh64 sparc spu v850 vax xstormy16 xtensa' # e500 
     40  1.1  mrg 
     41  1.1  mrg test_one_file ()
     42  1.1  mrg {
     43  1.1  mrg   local bdir pdir opts bline pline
     44  1.1  mrg   bdir=base-$1-gcc-build
     45  1.1  mrg   pdir=$1-gcc-build
     46  1.1  mrg   bline=$2
     47  1.1  mrg   pline=${2//$bdir/$pdir}
     48  1.1  mrg   opts=${3//\// }
     49  1.1  mrg   echo "$pline $opts"
     50  1.1  mrg   $bline $opts 2>/dev/null >/dev/null || return 0
     51  1.1  mrg   diff -L "$bdir/gcc/cc1 $opts" -L "$pdir/gcc/cc1 $opts" -u \
     52  1.1  mrg     <( $bline $opts 2>&1 ) <( $pline $opts 2>&1 ) || { echo -n . >&2; return 1; }
     53  1.1  mrg }
     54  1.1  mrg   
     55  1.1  mrg test_all_opts ()
     56  1.1  mrg {
     57  1.1  mrg   eval opts=\$${1}_opts
     58  1.1  mrg   if test -z "$opts"; then
     59  1.1  mrg     test_one_file $1 "$2"
     60  1.1  mrg   else
     61  1.1  mrg     for opt in $opts; do
     62  1.1  mrg       test_one_file $1 "$2" $opt
     63  1.1  mrg     done
     64  1.1  mrg   fi
     65  1.1  mrg }
     66  1.1  mrg 
     67  1.1  mrg for target in ${*-$all_targets}; do
     68  1.1  mrg   mkdir -p $target-gcc-build/gcc/testsuite/gcc
     69  1.1  mrg   cp -R base-$target-gcc-build/gcc/testsuite/gcc/gcc.dg-struct-layout-1 \
     70  1.1  mrg     $target-gcc-build/gcc/testsuite/gcc/gcc.dg-struct-layout-1 
     71  1.1  mrg 
     72  1.1  mrg   # Provide targ-include files for newlib
     73  1.1  mrg   # for newlib_path in `echo base-$target-gcc-build/*/newlib`; do
     74  1.1  mrg   #   test -d $newlib_path && ln -sf ../../$newlib_path ${newlib_path/base-}
     75  1.1  mrg   # done
     76  1.1  mrg 
     77  1.1  mrg   echo -n Testing $target >&2
     78  1.1  mrg   sed '/^Executing on host: /!d
     79  1.1  mrg     /xgcc -B/!d
     80  1.1  mrg     / -E /d
     81  1.1  mrg     / -g/d
     82  1.1  mrg     / -print-prog-name=/d
     83  1.1  mrg     s/^Executing on host: //
     84  1.1  mrg     s/   *(timeout.*//
     85  1.1  mrg     s/ -fverbose-asm / /
     86  1.1  mrg     s/ -frtl-abstract-sequences / /
     87  1.1  mrg     s/ -fdump[-a-z0-9]* / /g
     88  1.1  mrg     s/ -da / /g
     89  1.1  mrg     s/ -\{1,2\}save-temps / /
     90  1.1  mrg     s/ -c / -S /
     91  1.1  mrg     / -S /! s/ -o / -S -o /
     92  1.1  mrg     s/ -o [^ ]*/ -frandom-seed=0 -o -/' base-$target-gcc-build/gcc/testsuite/gcc/gcc.log | while read line; do
     93  1.1  mrg     case "$line" in
     94  1.1  mrg       *" -m"*) test_one_file $target "$line" "" ;;
     95  1.1  mrg       *) test_all_opts $target "$line" ;;
     96  1.1  mrg     esac
     97  1.1  mrg   done > compare-$target.log
     98  1.1  mrg   echo >&2
     99  1.1  mrg done
    100