Newer
Older
#! /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'
score_opts='-mscore3 -mscore7'
sh64_opts='-m5-32media -m5-32media-nofpu -m5-64media -m5-64media-nofpu -m5-compact -m5-compact-nofpu'
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 picochip ppc score sh sh64 sparc spu v850 vax xstormy16 xtensa' # e500
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
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