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