%************************************************************************
\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" . <<EOUSAGE;
$CollectGhcTimings = 0;
$DEBUGging = ''; # -DDEBUG and all that it entails (um... not really)
$PROFing = ''; # set to p or e if profiling
-$PROFgroup = ''; # set to group if an explicit -Ggroup specified
$PROFauto = ''; # set to relevant hsc flag if -auto or -auto-all
$PROFcaf = ''; # set to relevant hsc flag if -caf-all
$PROFdict = ''; # set to relevant hsc flag if -auto-dicts
$HiSuffix = 'hi';
$HiSuffix_prelude = '';
$CompilingPrelude=0;
-$Do_recomp_chkr = 0; # don't use the recompilatio checker unless asked
+$Do_recomp_chkr = 1; # Use the recompilation checker by default
$Do_cc = -1; # a MAGIC indeterminate value; will be set to 1 or 0.
$Do_as = 1;
that's run. (Um, well, howzabout the simplifier just once more...)
\end{description}
-STG-TO-STG PASSES:
-\begin{description}
-\item[\tr{-fupdate-analysis}:]
-It really really wants to be the last STG-to-STG pass that is run.
-\end{description}
-
\begin{code}
sub setupOptimiseFlags {
'-fno-rules', # Similarly, don't apply any rules until after full laziness
# Notably, list fusion can prevent floating.
+ '-fno-case-of-case', # Don't do case-of-case transformations.
+ # This makes full laziness work better
+
'-fmax-simplifier-iterations2',
']',
# Specialisation is best done before full laziness
# so that overloaded functions have all their dictionary lambdas manifest
($Oopt_DoSpecialise) ? ( $Oopt_DoSpecialise, ) : (),
- '-ffull-laziness',
+ '-ffloat-outwards',
'-ffloat-inwards',
-# '-fsimplify',
-# '[',
-# # Run the simplifier before specialising, so that overloaded functions
-# # look like f = \d -> ...
-# # (Full laziness may lift out something hiding the \d
-# '-finline-phase1',
-# '-fmax-simplifier-iterations1',
-# ']',
-
-
'-fsimplify',
'[',
'-finline-phase1',
# before strictness analysis runs
'-finline-phase2',
- $Oopt_MaxSimplifierIterations,
+ '-fmax-simplifier-iterations2',
']',
+ '-fsimplify',
+ '[',
+ '-fmax-simplifier-iterations2',
+ # No -finline-phase: allow all Ids to be inlined now
+ # This gets foldr inlined before strictness analysis
+ ']',
+
'-fstrictness',
'-fcpr-analyse',
'-fworker-wrapper',
# No -finline-phase: allow all Ids to be inlined now
']',
- '-ffull-laziness', # nofib/spectral/hartel/wang doubles in speed if you
+ '-ffloat-outwards', # 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)
+# Leave out lambda lifting for now
+# '-fsimplify', # Tidy up results of full laziness
+# '[',
+# '-fmax-simplifier-iterations2',
+# ']',
+# '-ffloat-outwards-full',
+
# We want CSE to follow the final full-laziness pass, because it may
# succeed in commoning up things floated out by full laziness.
#
# SPECIAL FLAGS for -O2
($OptLevel == 2) ? (
- '-fupdate-analysis', # virtually useless; relegated to -O2
- '-fsemi-tagging',
+ # none at the present time
) : (),
);
,'-u', "${uscore}PrelAddr_I64zh_con_info"
,'-u', "${uscore}PrelAddr_W64zh_con_info"
,'-u', "${uscore}PrelStable_StablePtr_con_info"
- ,'-u', "${uscore}PrelBase_False_static_closure"
- ,'-u', "${uscore}PrelBase_True_static_closure"
+ ,'-u', "${uscore}PrelBase_False_closure"
+ ,'-u', "${uscore}PrelBase_True_closure"
,'-u', "${uscore}PrelPack_unpackCString_closure"
,'-u', "${uscore}PrelException_stackOverflow_closure"
,'-u', "${uscore}PrelException_heapOverflow_closure"
- ,'-u', "${uscore}PrelException_NonTermination_static_closure"
+ ,'-u', "${uscore}PrelException_NonTermination_closure"
+ ,'-u', "${uscore}PrelException_PutFullMVar_closure"
+ ,'-u', "${uscore}PrelException_BlockedOnDeadMVar_closure"
+ ,'-u', "${uscore}__init_Prelude"
+ ,'-u', "${uscore}__init_PrelMain"
));
if (!$NoHaskellMain) {
unshift (@Ld_flags,'-u', "${uscore}PrelMain_mainIO_closure");
}
- if ($PROFing ne '') {
- unshift (@Ld_flags,'-u', "${uscore}_regPrelude");
- }
if ($TargetPlatform =~ /^powerpc-|^rs6000-/) {
# sometimes we have lots of toc entries...
# unshift(@Ld_flags, ('-Xlinker -bbigtoc -Xlinker -bnoquiet'));
# Tell the C compiler and assembler not to run
$do_cc = 0; $do_as = 0;
- # Update dependency info, touch both object file and
- # interface file, so that the following invariant is
- # maintained:
- #
- # a dependent module's interface file should after recompilation
- # checking be newer than the interface files of its imports.
- #
- # That is, if module A's interface file changes, then module B
- # (which import from A) needs to be checked.
- # If A's change does not affect B, which causes the compiler to bail
- # out early, we still need to touch the interface file of B. The reason
- # for this is that B may export A's interface.
+ # Update dependency info, by touching the object file
+ # This records in the file system that the work of
+ # recompiling this module has been done
#
&run_something("touch $ofile_target",
"Touch $ofile_target, to propagate dependencies") if $HscOut ne '-N=';
- &run_something("touch $hifile_target",
- "Touch $hifile_target, to propagate dependencies") if $ProduceHi =~ /-nohifile=/ ;
} else {
local($lnkr) = ( $Lnkr ) ? $Lnkr : $CcRegd;
if ( ($Specific_output_file eq '') &&
- ($TargetPlatform eq 'i386-unknown-cygwin32') ) {
+ ( ($TargetPlatform eq 'i386-unknown-cygwin32') ||
+ ($TargetPlatform eq 'i386-unknown-mingw32')) ) {
$Specific_output_file = 'main.exe';
print STDERR "Output file not specified, defaulting to \"main.exe\"\n";
}
: "$TopPwd/hslibs/data"
)
, '' # where to find the cbits archive to use when linking
- , '' # Syslib dependencies
+ , 'lang' # Syslib dependencies
, '' # extra ghc opts
, '' # extra cc opts
, '' # extra ld opts
[ # where to slurp interface files from
( $INSTALLING
? "$InstLibDirGhc/imports/text"
- : "$TopPwd/hslibs/text:$TopPwd/hslibs/text/html"
+ : "$TopPwd/hslibs/text:$TopPwd/hslibs/text/html:$TopPwd/hslibs/text/haxml/lib"
)
, # where to find the archive to use when linking
( $INSTALLING
? "$InstLibDirGhc"
: "$TopPwd/hslibs/text/cbits"
)
- , 'lang' # Syslib dependencies
+ , 'lang data' # Syslib dependencies
, '' # extra ghc opts
, '' # extra cc opts
, '' # extra ld opts
[ # where to slurp interface files from
( $INSTALLING
? "$InstLibDirGhc/imports/util"
- : "$TopPwd/hslibs/util"
+ : "$TopPwd/hslibs/util:$TopPwd/hslibs/util/check"
)
, # where to find the archive to use when linking
( $INSTALLING
$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.
# ---------------
- /^-fasm-(.*)$/ && do { $HscOut = '-S='; next arg; }; # force using nativeGen
- /^-fvia-[cC]$/ && do { $HscOut = '-C='; next arg; }; # force using C compiler
+ /^-fasm-(.*)$/ && do { $HscOut = '-S='; next arg; }; # force using nativeGen
+ /^-fvia-[cC]$/ && do { $HscOut = '-C='; next arg; }; # force using C compiler
# ---------------