if [ $# -lt 1 ]
then
    echo Syntax: comp file.c
    exit 1
else
    join="true"
    keep="false"
    if [ $# -eq 2 ]
    then
        if [ $2 == "-j" ]
        then
            join="true"
        elif [ $2 == "-k" ]
        then
            keep="true"
        fi
    fi
    if [ $# -eq 3 ]
    then
        if [ $3 == "-j" ]
        then
            join="true"
        elif [ $3 == "-k" ]
        then
            keep="true"
        fi
    fi

    LLC="/project/fernando/llvm-2.1/Debug/bin/llc"

    LLVM_GCC="/project/fernando/llvm-gcc4/bin/llvm-gcc"

    file_name=$1
    exec_name="EXECUTABLE"
    base_name=$(basename $1 .c)
    btcd_name="$base_name.bc"
    ch_name="$base_name.ch"
    s_ch_name="$base_name.ch.s"
    ch_out="$base_name.ch.out"
    ln_name="$base_name.ln"
    ln_out="$base_name.ln.out"
    s_ln_name="$base_name.ln.s"
    gcc_name="$base_name.gcc"
    gcc_out="$base_name.gcc.out"
    $LLVM_GCC $file_name -o $btcd_name -c -emit-llvm -O1
    $LLC -f -regalloc=linearscan -SSA-based=false $btcd_name -o $s_ln_name -stats -time-passes
    $LLC -f -regalloc=puzzles -SSA-based=true $btcd_name -o $s_ch_name -stats -time-passes
    echo ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  Ch time:"
    gcc $s_ch_name -o $exec_name
    time ./$exec_name > $ch_out
    echo ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  Ln time:"
    gcc $s_ln_name -o $exec_name
    time ./$exec_name > $ln_out
    echo ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . GCC time:"
    gcc $file_name -o $exec_name
    time ./$exec_name > $gcc_out
    echo ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  wc output:"
    wc -l $s_ch_name
    wc -l $s_ln_name
    echo ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  diff output:"
    diff -qs $ch_out $ln_out
    diff -qs $ch_out $gcc_out
    diff -qs $ln_out $gcc_out
    echo ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .stats:"
    stats.sh $s_ch_name $s_ln_name
    echo ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  End:"
    rm -f $exec_name
    rm -f $base_name
    rm -f $gcc_name
    rm -f $ch_name
    rm -f $ln_name
    if [ $keep == "true" ]
    then
        echo "Keeping $ch_out, $ln_out, $gcc_out, $s_ch_name and $s_ln_name"
    else
        rm -f $s_ch_name
        rm -f $s_ln_name
        rm -f $ch_out
        rm -f $ln_out
        rm -f $gcc_out
    fi
    rm -f $btcd_name
fi
