X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fdriver%2Fghc.lprl;h=e3eb56bbe8ed42d93dc15234c00cc8947e6b62a9;hb=de896403dfe48bc999e5501eb8b517624dd2e5d4;hp=965a8d6d1940576665b20cc75f55cc874688828b;hpb=67fe852eb2e9b3a489b62cbf9259b5a868db5468;p=ghc-hetmet.git diff --git a/ghc/driver/ghc.lprl b/ghc/driver/ghc.lprl index 965a8d6..e3eb56b 100644 --- a/ghc/driver/ghc.lprl +++ b/ghc/driver/ghc.lprl @@ -12,6 +12,8 @@ It is written in \tr{perl}. The first section includes a long %************************************************************************ \begin{code} +use 5; # require Perl version 5 or later. + ($Pgm = $0) =~ s|.*/||; $ShortUsage = "\nUsage: For basic information, try the `-help' option.\n"; $LongUsage = "\n" . < ...(case (case x of I# x# -> fw x#) of ...)... # ==> ...(case x of I# x# -> case fw x# of ...)... # and now the redex (f x) isn't floatable any more + + '-fno-rules', # Similarly, don't apply any rules until after full laziness + # Notably, list fusion can prevent floating. + '-fmax-simplifier-iterations2', ']', @@ -772,14 +780,23 @@ sub setupOptimiseFlags { # No -finline-phase: allow all Ids to be inlined now ']', - '-fcse', # CSE must immediately follow a simplification pass, because it relies - # on the no-shadowing invariant. See comments at the top of CSE.lhs - '-ffull-laziness', # nofib/spectral/hartel/wang doubles in speed if you # do full laziness late in the day. It only happens # after fusion and other stuff, so the early pass doesn't # catch it. For the record, the redex is # f_el22 (f_el21 r_midblock) + + # We want CSE to follow the final full-laziness pass, because it may + # succeed in commoning up things floated out by full laziness. + # + # CSE must immediately follow a simplification pass, because it relies + # on the no-shadowing invariant. See comments at the top of CSE.lhs + # So it must NOT follow float-inwards, which can give rise to shadowing, + # even if its input doesn't have shadows. Hence putting it between + # the two passes. + '-fcse', + + '-ffloat-inwards', # Case-liberation for -O2. This should be after @@ -789,6 +806,8 @@ sub setupOptimiseFlags { # ? '' # : "-fliberate-case -fsimplify [ $Oopt_FB_Support -ffloat-lets-exposing-whnf -ffloat-primops-ok -fcase-of-case -fdo-case-elim -fcase-merge -fdo-lambda-eta-expansion -freuse-con -flet-to-case $Oopt_PedanticBottoms $Oopt_MaxSimplifierIterations $Oopt_ShowSimplifierProgress ]" ), +# '-fliberate-case', + # Final clean-up simplification: '-fsimplify', @@ -859,7 +878,6 @@ Sort out @$BuildTag@, @$PROFing@, @$PARing@, \begin{code} sub setupBuildFlags { - # PROFILING stuff after argv mangling: if ( ! $PROFing ) { # add -auto sccs even if not profiling ! @@ -901,6 +919,9 @@ sub setupBuildFlags { exit(1); } + } elsif ( $SMPing eq 's') { + $BuildTag = '_s'; + } elsif ( $GRANing eq 'g' ) { if ($TICKYing eq 't') { print STDERR "$Pgm: Can't mix -gransim with -ticky.\n"; exit 1; } $BuildTag = '_mg'; @@ -1059,8 +1080,8 @@ sub setupLinkOpts { unshift(@Ld_flags, ( '-u', "${uscore}PrelBase_Izh_static_info" ,'-u', "${uscore}PrelBase_Czh_static_info" - ,'-u', "${uscore}PrelBase_Fzh_static_info" - ,'-u', "${uscore}PrelBase_Dzh_static_info" + ,'-u', "${uscore}PrelFloat_Fzh_static_info" + ,'-u', "${uscore}PrelFloat_Dzh_static_info" ,'-u', "${uscore}PrelAddr_Azh_static_info" ,'-u', "${uscore}PrelAddr_Wzh_static_info" ,'-u', "${uscore}PrelAddr_I64zh_static_info" @@ -1068,8 +1089,8 @@ sub setupLinkOpts { ,'-u', "${uscore}PrelStable_StablePtr_static_info" ,'-u', "${uscore}PrelBase_Izh_con_info" ,'-u', "${uscore}PrelBase_Czh_con_info" - ,'-u', "${uscore}PrelBase_Fzh_con_info" - ,'-u', "${uscore}PrelBase_Dzh_con_info" + ,'-u', "${uscore}PrelFloat_Fzh_con_info" + ,'-u', "${uscore}PrelFloat_Dzh_con_info" ,'-u', "${uscore}PrelAddr_Azh_con_info" ,'-u', "${uscore}PrelAddr_Wzh_con_info" ,'-u', "${uscore}PrelAddr_I64zh_con_info" @@ -1081,6 +1102,7 @@ sub setupLinkOpts { ,'-u', "${uscore}PrelException_stackOverflow_closure" ,'-u', "${uscore}PrelException_heapOverflow_closure" ,'-u', "${uscore}PrelException_NonTermination_static_closure" + ,'-u', "${uscore}__init_Prelude" )); if (!$NoHaskellMain) { unshift (@Ld_flags,'-u', "${uscore}PrelMain_mainIO_closure"); @@ -1090,7 +1112,9 @@ sub setupLinkOpts { # unshift(@Ld_flags, ('-Xlinker -bbigtoc -Xlinker -bnoquiet')); unshift(@Ld_flags, ('-Xlinker -bbigtoc')); } - + if ($TargetPlatform =~ /^hppa/) { + unshift(@Ld_flags, ('-Xlinker +vnocompatwarnings')); + } } # end of setupLinkOpts @@ -1465,7 +1489,9 @@ Now the Haskell compiler, C compiler, and assembler local ($hsc_out_s_stub); local ($hsc_out_o_stub); ($ofile_s_stub_target = $ofile_c_stub_target) =~ s/\.(.*)$/\.s/; - ($ofile_o_stub_target = $ofile_c_stub_target) =~ s/\.(.*)$/\.o/; + ($ofile_o_stub_target = $ofile_c_stub_target) =~ s/\.(.*)$//; + + $ofile_o_stub_target = &osuf_ify($ofile_o_stub_target, "o"); if ($do_cc) { &runGcc (0, $ofile_c_stub_target, $ofile_s_stub_target); &runAs ($ofile_o_stub_target, $ofile_s_stub_target); @@ -1889,6 +1915,7 @@ eval 'exec perl -S \$0 \${1+"\$@"}' # =!=!=!=!=!=!=!=!=!=!=! # This script is automatically generated: DO NOT EDIT!!! # Generated by Glasgow Haskell, version ${ProjectVersion} +# ngoqvam choHbogh vaj' vIHoHnISbej !!!! # \$pvm_executable = '$pvm_executable'; \$pvm_executable_base = '$pvm_executable_base'; @@ -1920,7 +1947,9 @@ args: while ($a = shift(@ARGV)) { } if ( $a eq '-d' && $in_RTS_args ) { $debug = '-'; - } elsif ( $a =~ /^-N(\d+)/ && $in_RTS_args ) { + } elsif ( $a =~ /^-qN(\d+)/ && $in_RTS_args ) { + $nprocessors = $1; + } elsif ( $a =~ /^-qp(\d+)/ && $in_RTS_args ) { $nprocessors = $1; } else { push(@nonPVM_args, $a); @@ -2146,7 +2175,7 @@ sub runAs { # need to add the -I flags in case the file is going through cpp (.S files) local($includes) = '-I' . join(' -I', @Include_dir); - if ( ! $SplitObjFiles ) { + if ( ! $SplitObjFiles || $ifile_root =~ /_stub\.s$/ ) { local($to_do) = "$asmblr -o $as_out -c @As_flags $includes $cc_as"; push(@Files_to_tidy, $as_out ); &run_something($to_do, 'Unix assembler'); @@ -2238,12 +2267,24 @@ sub run_something { close(CCOUT) || &tidy_up_and_die(1,"$Pgm: failed closing `$Tmp_prefix.ccout'\n"); } + local($signal_num) = $? & 127; + local($dumped_core) = $? & 128; + + if ($signal_num != 0) { + print STDERR "$tidy_name received signal $signal_num"; + if ($dumped_core != 0) { + print STDERR " (core dumped)"; + } + print STDERR "\n"; + } + if ($return_val != 0) { if ($Using_dump_file) { print STDERR "Compilation Errors dumped in $Specific_dump_file\n"; } &tidy_up_and_die($return_val, ''); } + $Using_dump_file = 0; } \end{code} @@ -2460,104 +2501,152 @@ sub add_syslib { # Lifting this out of this sub brings it out of scope - why?? %Supported_syslibs = - ( exts, + ( lang, [ # where to slurp interface files from ( $INSTALLING - ? "$InstLibDirGhc/imports/exts" - : "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/exts" + ? "$InstLibDirGhc/imports/lang" + : "$TopPwd/hslibs/lang:$TopPwd/hslibs/lang/monads" ) , # where to find the archive to use when linking ( $INSTALLING ? "$InstLibDirGhc" - : "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/exts" + : "$TopPwd/hslibs/lang" + ) + , # where to find the cbits archive to use when linking + ( $INSTALLING + ? "$InstLibDirGhc" + : "$TopPwd/hslibs/lang/cbits" ) - , '' # no cbits , '' # Syslib dependencies , '' # extra ghc opts , '' # extra cc opts , '' # extra ld opts ], - misc, + concurrent, [ # where to slurp interface files from ( $INSTALLING - ? "$InstLibDirGhc/imports/misc" - : "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/misc" + ? "$InstLibDirGhc/imports/concurrent" + : "$TopPwd/hslibs/concurrent" ) , # where to find the archive to use when linking ( $INSTALLING ? "$InstLibDirGhc" - : "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/misc" + : "$TopPwd/hslibs/concurrent" ) - , # where to find the cbits archive to use when linking + , '' # where to find the cbits archive to use when linking + , '' # Syslib dependencies + , '' # extra ghc opts + , '' # extra cc opts + , '' # extra ld opts + ], + + data, + [ # where to slurp interface files from + ( $INSTALLING + ? "$InstLibDirGhc/imports/data" + : "$TopPwd/hslibs/data:$TopPwd/hslibs/data/edison:$TopPwd/hslibs/data/edison/Assoc:$TopPwd/hslibs/data/edison/Coll:$TopPwd/hslibs/data/edison/Seq" + ) + , # where to find the archive to use when linking ( $INSTALLING ? "$InstLibDirGhc" - : "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/misc/cbits" + : "$TopPwd/hslibs/data" ) - , 'exts concurrent' # Syslib dependencies - , '' # extra ghc opts - , '' # extra cc opts - , ( $TargetPlatform =~ /-solaris2$/ ? '-lnsl -lsocket' : '') + , '' # where to find the cbits archive to use when linking + , '' # Syslib dependencies + , '' # extra ghc opts + , '' # extra cc opts + , '' # extra ld opts ], - hbc, + + net, [ # where to slurp interface files from ( $INSTALLING - ? "$InstLibDirGhc/imports/hbc" - : "$TopPwd/CONTRIB/libraries/hbc/src" + ? "$InstLibDirGhc/imports/net" + : "$TopPwd/hslibs/net" ) , # where to find the archive to use when linking ( $INSTALLING ? "$InstLibDirGhc" - : "$TopPwd/CONTRIB/libraries/src/hbc" + : "$TopPwd/hslibs/net" ) , # where to find the cbits archive to use when linking ( $INSTALLING ? "$InstLibDirGhc" - : "$TopPwd/CONTRIB/libraries/hbc/cbits" + : "$TopPwd/hslibs/net/cbits" ) - , 'exts' # Syslib dependencies - , '' # extra ghc opts - , '' # extra cc opts - , '' + , 'lang text' # Syslib dependencies + , '' # extra ghc opts + , '' # extra cc opts + , ( $TargetPlatform =~ /-solaris2$/ ? '-lnsl -lsocket' : '') ], + posix, [ # where to slurp interface files from ( $INSTALLING ? "$InstLibDirGhc/imports/posix" - : "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/posix" + : "$TopPwd/hslibs/posix" ) , # where to find the archive to use when linking ( $INSTALLING ? "$InstLibDirGhc" - : "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/posix" + : "$TopPwd/hslibs/posix" ) , # where to find the cbits archive to use when linking ( $INSTALLING ? "$InstLibDirGhc" - : "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/posix/cbits" + : "$TopPwd/hslibs/posix/cbits" ) - , 'misc' # Syslib dependencies + , 'lang' # Syslib dependencies , '' # extra ghc opts , '' # extra cc opts , '' # extra ld opts ], - concurrent, + + text, [ # where to slurp interface files from ( $INSTALLING - ? "$InstLibDirGhc/imports/concurrent" - : "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/concurrent" + ? "$InstLibDirGhc/imports/text" + : "$TopPwd/hslibs/text:$TopPwd/hslibs/text/html:$TopPwd/hslibs/text/haxml/lib" ) , # where to find the archive to use when linking ( $INSTALLING ? "$InstLibDirGhc" - : "$TopPwd/$CURRENT_DIR/$GHC_LIB_DIR/concurrent" + : "$TopPwd/hslibs/text" ) - , '' # where to find the cbits archive to use when linking - , '' # Syslib dependencies + , # where to find the cbits archive to use when linking + ( $INSTALLING + ? "$InstLibDirGhc" + : "$TopPwd/hslibs/text/cbits" + ) + , 'lang data' # Syslib dependencies , '' # extra ghc opts , '' # extra cc opts , '' # extra ld opts ], + + util, + [ # where to slurp interface files from + ( $INSTALLING + ? "$InstLibDirGhc/imports/util" + : "$TopPwd/hslibs/util" + ) + , # where to find the archive to use when linking + ( $INSTALLING + ? "$InstLibDirGhc" + : "$TopPwd/hslibs/util" + ) + , # where to find the cbits archive to use when linking + ( $INSTALLING + ? "$InstLibDirGhc" + : "$TopPwd/hslibs/util/cbits" + ) + , 'lang concurrent' # Syslib dependencies + , '' # extra ghc opts + , '' # extra cc opts + , '' # extra ld opts + ], + win32, [ # where to slurp interface files from ( $INSTALLING @@ -2570,11 +2659,12 @@ sub add_syslib { : "$TopPwd/hslibs/win32/src" ) , '' - , 'exts' # Syslib dependencies + , 'lang' # Syslib dependencies , '' # extra ghc opts , '' # extra cc opts , '-luser32 -lgdi32' # extra ld opts ], + com, [ # where to slurp interface files from ( $INSTALLING @@ -2587,7 +2677,7 @@ sub add_syslib { : "$TopPwd/hdirect/lib" ) , '' - , 'exts' # Syslib dependencies + , 'lang' # Syslib dependencies , '' # extra ghc opts , '' # extra cc opts , '-luser32 -lole32 -loleaut32 -ladvapi32' @@ -2606,8 +2696,8 @@ sub add_syslib { # This check is here to avoid syslib loops from # spoiling the party. A side-effect of it is that # it disallows multiple mentions of a syslib on a command-line, - # explicit *and* implicit ones (i.e., "-syslib exts -syslib misc" - # is not equal to "-syslib exts -syslib misc -syslib exts", + # explicit *and* implicit ones (i.e., "-syslib lang -syslib misc" + # is not equal to "-syslib lang -syslib misc -syslib lang", # which it needs to be) # # Since our current collection of syslibs don't have any @@ -2619,12 +2709,13 @@ sub add_syslib { $Syslibs_added{$syslib} = 1; - local ($hi_dir, $lib_dir, $lib_cbits_dir, + local ($hi_dirs, $lib_dir, $lib_cbits_dir, $syslib_deps, $syslib_ghc_opts, $syslib_cc_opts, $syslib_ld_opts) = @{ $Supported_syslibs{$syslib} }; - - unshift(@SysImport_dir, $hi_dir); + foreach(split(':',$hi_dirs)) { + unshift(@SysImport_dir, $_); + } push(@SysLibrary_dir, $lib_dir); push(@SysLibrary_dir, $lib_cbits_dir) if ( $lib_cbits_dir ne ''); @@ -2733,9 +2824,24 @@ sub saveIntermediate { local ($final,$suffix,$tmp)= @_ ; local ($to_do); + local ($new_suffix); + # $final -- root of where to park ${final}.${suffix} # $tmp -- temporary file where hsc put the intermediate file. + # HWL: use -odir for .hc and .s files, too + if ( $Specific_output_dir ne '' ) { + $final = "${Specific_output_dir}/${final}"; + } + # HWL: use the same suffix as for $Osuffix in generating intermediate file, + # replacing o with hc or s, respectively. + if ( $Osuffix ne '' ) { + ($new_suffix = $Osuffix) =~ s/o$/hc/ if $suffix eq "hc"; + ($new_suffix = $Osuffix) =~ s/o$/s/ if $suffix eq "s"; + $suffix = $new_suffix; + print stderr "HWL says: suffix for intermediate file is $suffix; ${final}.${suffix} overall\n" if $Verbose; + } + # Delete the old file $to_do = "$Rm ${final}.${suffix}"; &run_something($to_do, "Removing old .${suffix} file"); @@ -2926,9 +3032,6 @@ arg: while($_ = $Args[0]) { $PROFignore_scc = '-W'; next arg; }; - /^-G(.*)$/ && do { push(@HsC_flags, "-G=$1"); # set group for cost centres - next arg; }; - /^-unprof-scc-auto/ && do { # generate auto SCCs on top level bindings when not profiling. # Used to measure optimisation effects of presence of sccs. @@ -2943,6 +3046,7 @@ arg: while($_ = $Args[0]) { /^-gransim$/ && do { $GRANing = 'g'; &add_syslib('concurrent'); next arg; }; # GranSim /^-ticky$/ && do { $TICKYing = 't'; next arg; }; # ticky-ticky /^-parallel$/ && do { $PARing = 'p'; &add_syslib('concurrent'); next arg; }; # parallel Haskell + /^-smp$/ && do { $SMPing = 's'; &add_syslib('concurrent'); next arg; }; # parallel Haskell #-------------- "user ways" -------------------------------------------- @@ -3046,6 +3150,7 @@ arg: while($_ = $Args[0]) { /^-fticky-ticky$/ && do { push(@HsC_flags,$_); next arg; }; /^-fgransim$/ && do { push(@HsC_flags,$_); next arg; }; /^-fparallel$/ && do { push(@HsC_flags,$_); next arg; }; + /^-fsmp$/ && do { push(@HsC_flags,$_); next arg; }; /^-split-objs$/ && do { if ( $TargetPlatform !~ /^(alpha|hppa1\.1|i386|m68k|mips|powerpc|rs6000|sparc)-/ ) { @@ -3074,8 +3179,8 @@ arg: while($_ = $Args[0]) { /^-fglasgow-exts$/ && do { push(@HsC_flags, $_); - # -fglasgow-exts implies -syslib exts - &add_syslib('exts'); + # -fglasgow-exts implies -syslib lang + &add_syslib('lang'); next arg; }; @@ -3117,6 +3222,9 @@ arg: while($_ = $Args[0]) { /^-funfolding-.*$/ && do { push(@HsC_flags, $_); next arg }; + /^-fliberate-case-.*$/ + && do { push(@HsC_flags, $_); next arg }; + /^-funfold-casms-in-hi-file$/ && do { push(@HsC_flags, $_); next arg }; @@ -3217,7 +3325,7 @@ arg: while($_ = $Args[0]) { } elsif ($heap_size >= $Specific_heap_size) { $Specific_heap_size = $heap_size; } else { - print STDERR "$Pgm: ignoring heap-size-setting option ($_)...not the largest seen\n"; + print STDERR "$Pgm: ignoring heap-size-setting option ($_)...not the largest seen\n" if $Verbose; } next arg; }; @@ -3239,7 +3347,7 @@ arg: while($_ = $Args[0]) { } elsif ($stk_size >= $Specific_stk_size) { $Specific_stk_size = $stk_size; } else { - print STDERR "$Pgm: ignoring stack-size-setting option ($flag $stk_size)...not the largest seen\n"; + print STDERR "$Pgm: ignoring stack-size-setting option ($flag $stk_size)...not the largest seen\n" if $Verbose; } next arg; };