| #! /bin/bash |
| |
| # Compare the assembly language output for all the gcc tests. |
| # Copyright (C) 2009, 2011 Free Software Foundation, Inc. |
| # Contributed by Paolo Bonzini. |
| # |
| # Invoke it as "bash compare-all-tests target1 target2 ... targetN". |
| # Assumptions are: |
| # |
| # 1) that the base and patched compilers reside respectively in |
| # base-$target-build and $target-build, where $target is the commandline |
| # argument to compare-all-tests, and should match the variables in the |
| # script itself so that the correct set of options is tested. Both |
| # compilers should be fully built (including target libraries). |
| # |
| # 2) that the testsuite has been run on the base compiler (since it's |
| # just compilation testing, using RUNTESTFLAGS=--target_board=basic-sim |
| # usually suffices). |
| # |
| # Tests that fail to compile on the base compiler are not compared. |
| |
| alpha_opts='-mlong-double-64/-mieee -mlong-double-64 -mlong-double-128/-mieee -mlong-double-128' |
| 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' |
| cris_opts='-march=v32 -march=v1' |
| 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' |
| i386_opts='-m32 -m64 -m32/-msse/-msse2/-mfpmath=sse' |
| m32c_opts='-mcpu=r8c -mcpu=m16c -mcpu=m32c' |
| m68k_opts='-m68000 -m68020 -m68020/-m68881 -m68040/-m68881 -m68060/-m68881 -mcfv4e' |
| 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' |
| mn10300_opts='-mam33 -mam33-2' |
| pa_opts='-march=2.0 -march=1.0 -march=1.1' |
| ppc_opts='-m32 -m64' |
| s390_opts='-m31 -m31/-mzarch -m64' |
| sh_opts='-m3 -m3e -m4 -m4a -m4al -m4/-mieee -m1 -m1/-mno-cbranchdi -m2a -m2a/-mieee -m2e -m2e/-mieee' |
| sparc_opts='-mcpu=v8/-m32 -mcpu=v9/-m32 -m64' |
| |
| all_targets='alpha arm avr bfin cris fr30 frv h8300 ia64 iq2000 m32c m32r m68k mcore mips mmix mn10300 pa pdp11 ppc sh sparc spu v850 vax xstormy16 xtensa' # e500 |
| |
| test_one_file () |
| { |
| local bdir pdir opts bline pline |
| bdir=base-$1-gcc-build |
| pdir=$1-gcc-build |
| bline=$2 |
| pline=${2//$bdir/$pdir} |
| opts=${3//\// } |
| echo "$pline $opts" |
| $bline $opts 2>/dev/null >/dev/null || return 0 |
| diff -L "$bdir/gcc/cc1 $opts" -L "$pdir/gcc/cc1 $opts" -u \ |
| <( $bline $opts 2>&1 ) <( $pline $opts 2>&1 ) || { echo -n . >&2; return 1; } |
| } |
| |
| test_all_opts () |
| { |
| eval opts=\$${1}_opts |
| if test -z "$opts"; then |
| test_one_file $1 "$2" |
| else |
| for opt in $opts; do |
| test_one_file $1 "$2" $opt |
| done |
| fi |
| } |
| |
| for target in ${*-$all_targets}; do |
| mkdir -p $target-gcc-build/gcc/testsuite/gcc |
| cp -R base-$target-gcc-build/gcc/testsuite/gcc/gcc.dg-struct-layout-1 \ |
| $target-gcc-build/gcc/testsuite/gcc/gcc.dg-struct-layout-1 |
| |
| # Provide targ-include files for newlib |
| # for newlib_path in `echo base-$target-gcc-build/*/newlib`; do |
| # test -d $newlib_path && ln -sf ../../$newlib_path ${newlib_path/base-} |
| # done |
| |
| echo -n Testing $target >&2 |
| sed '/^Executing on host: /!d |
| /xgcc -B/!d |
| / -E /d |
| / -g/d |
| / -print-prog-name=/d |
| s/^Executing on host: // |
| s/ *(timeout.*// |
| s/ -fverbose-asm / / |
| s/ -frtl-abstract-sequences / / |
| s/ -fdump[-a-z0-9]* / /g |
| s/ -da / /g |
| s/ -\{1,2\}save-temps / / |
| s/ -c / -S / |
| / -S /! s/ -o / -S -o / |
| s/ -o [^ ]*/ -frandom-seed=0 -o -/' base-$target-gcc-build/gcc/testsuite/gcc/gcc.log | while read line; do |
| case "$line" in |
| *" -m"*) test_one_file $target "$line" "" ;; |
| *) test_all_opts $target "$line" ;; |
| esac |
| done > compare-$target.log |
| echo >&2 |
| done |