#!/bin/bash
#
#  findoptdiff
#
#      This script helps find the optimization difference between two llvm
#      builds. It is useful when you have a build that is known to work and
#      one that exhibits an optimization problem. Identifying the difference
#      between the two builds can lead to discovery of the source of a
#      mis-optimization.
#
#      The script takes two llvm build paths as arguments. These specify the
#      the two llvm builds to compare. It is generally expected that they
#      are "close cousins".  That is, they are the same except that the 
#      second build contains some experimental optimization features that
#      are suspected of producing a misoptimization.
#
#      The script takes two bytecode files, one from each build. They are
#      presumed to be a compilation of the same program or program fragment
#      with the only difference being the builds.
#
#      The script operates by iteratively applying the optimizations that gccas
#      and gccld run until there is a difference in the assembly resulting
#      from the optimization. The difference is then reported with the set of
#      optimization passes that produce the difference.  The processing 
#      continues until all optimization passes have been tried. The differences
#      for each pass, if they do differ, are placed in a diffs.# file.
#
#      To work around differences in the assembly language format, the script
#      can also take two filter arguments that post-process the assembly 
#      so they can be differenced without making false positives for known
#      differences in the two builds. These filters are optional.
#
#   Usage:
#      findoptdiff llvm1 llvm2 bc1 bc2 filter1 filter2
#
#   Where:
#      llvm1
#          is the path to the first llvm build dir
#      llvm2
#          is the path to the second llvm build dir
#      bc1
#          is the bytecode file for the first llvm environment
#      bc2
#          is the bytecode file for the second llvm environment
#      filter1
#          is an optional filter for filtering the llvm1 generated assembly
#      filter2
#          is an optional filter for filtering the llvm2 generated assembly
#       
llvm1=$1
llvm2=$2
bc1=$3
bc2=$4
filt1=$5
filt2=$6
if [ -z "$filt1" ] ; then
  filt1="cat"
fi
if [ -z "$filt2" ] ; then
  filt2="cat"
fi
opt1="${bc1}.opt"
opt2="${bc2}.opt" 
ll1="${bc1}.ll"
ll2="${bc2}.ll"
opt1ll="${bc1}.opt.ll"
opt2ll="${bc2}.opt.ll"
dis1="$llvm1/Debug/bin/llvm-dis"
dis2="$llvm2/Debug/bin/llvm-dis"
opt1="$llvm1/Debug/bin/opt"
opt2="$llvm2/Debug/bin/opt"

all_switches="-verify -lowersetjmp -simplifycfg -mem2reg -globalopt -globaldce -ipconstprop -deadargelim -instcombine -simplifycfg -prune-eh -inline -simplify-libcalls -argpromotion -tailduplicate -simplifycfg -scalarrepl -instcombine -predsimplify -condprop -tailcallelim -simplifycfg -reassociate -licm -loop-unswitch -instcombine -indvars -loop-unroll -instcombine -load-vn -gcse -sccp -instcombine -condprop -dse -dce -simplifycfg -deadtypeelim -constmerge -internalize -ipsccp -globalopt -constmerge -deadargelim -inline -prune-eh -globalopt -globaldce -argpromotion -instcombine -predsimplify -scalarrepl -globalsmodref-aa -licm -load-vn -gcse -dse -instcombine -simplifycfg -verify"

#counter=0
function tryit {
  switches_to_use="$1"
  $opt1 $switches_to_use "$bc1" -o - | $dis1 | $filt1 > "$opt1ll"
  $opt2 $switches_to_use "$bc2" -o - | $dis2 | $filt2 > "$opt2ll"
  diffs="diffs."$((counter++))
  diff "$opt1ll" "$opt2ll" > $diffs
  if [ $? -ne 0 ] ; then
    echo
    echo "Diff fails with these switches:"
    echo $switches
    echo "Differences:"
    head $diffs
    echo 'Switches:' $switches_to_use >> $diffs
  else
    rm $diffs
  fi
  return 1
}

for sw in $all_switches ; do
  echo -n " $sw"
  switches="$switches $sw"
  if tryit "$switches" ; then
    break;
  fi
done
