From c7979ff102f38349df882448b7279ce473a4c465 Mon Sep 17 00:00:00 2001 From: simonmar Date: Thu, 8 Jun 2000 12:54:29 +0000 Subject: [PATCH] [project @ 2000-06-08 12:54:29 by simonmar] Make object file splitting simpler, in preparation for conversion to the new driver. The "inject split markers" phase is now omitted, instead we generate the split markers directly. Driver: also removed now-defunct -fpedantic-bottoms flag. --- ghc/compiler/codeGen/CodeGen.lhs | 3 ++- ghc/driver/ghc-asm.lprl | 4 ++-- ghc/driver/ghc-split.lprl | 40 -------------------------------------- ghc/driver/ghc.lprl | 13 +------------ ghc/includes/StgMacros.h | 6 +++--- 5 files changed, 8 insertions(+), 58 deletions(-) diff --git a/ghc/compiler/codeGen/CodeGen.lhs b/ghc/compiler/codeGen/CodeGen.lhs index 1f1d0f8..584d48e 100644 --- a/ghc/compiler/codeGen/CodeGen.lhs +++ b/ghc/compiler/codeGen/CodeGen.lhs @@ -72,7 +72,8 @@ codeGen mod_name imported_modules cost_centre_info fe_binders init_stuff = mkModuleInit fe_binders mod_name imported_modules cost_centre_info - abstractC = mkAbstractCs [ init_stuff, + abstractC = mkAbstractCs [ maybe_split, + init_stuff, code_stuff, datatype_stuff] -- Put datatype_stuff after code_stuff, because the diff --git a/ghc/driver/ghc-asm.lprl b/ghc/driver/ghc-asm.lprl index 20d9043..d15003b 100644 --- a/ghc/driver/ghc-asm.lprl +++ b/ghc/driver/ghc-asm.lprl @@ -435,7 +435,7 @@ sub mangle_asm { $chkcat[$i] = 'literal'; $chksymb[$i] = $1; - } elsif ( /^$TUS[@]?__stg_split_marker(\d+)$TPOSTLBL[@]?$/o ) { + } elsif ( /^$TUS[@]?__stg_split_marker(\d*)$TPOSTLBL[@]?$/o ) { $chk[++$i] = $_; $chkcat[$i] = 'splitmarker'; $chksymb[$i] = $1; @@ -734,7 +734,7 @@ sub mangle_asm { # HWL HACK: dont die, just print a warning #print stderr "HWL: this should die! Epilogue junk?: $e\n" if $e =~ /^\t[^\.]/ # && $TargetPlatform !~ /^powerpc-/; #ToDo: remove test - die "Epilogue junk?: $e\n" if $e =~ /^\t[^\.]/ + die "Epilogue junk?: $e\n" if $e =~ /^\t[^\.\n]/ && $TargetPlatform !~ /^powerpc-/; #ToDo: remove test # glue together what's left diff --git a/ghc/driver/ghc-split.lprl b/ghc/driver/ghc-split.lprl index 91a34d2..5e4d0bc 100644 --- a/ghc/driver/ghc-split.lprl +++ b/ghc/driver/ghc-split.lprl @@ -5,46 +5,6 @@ %************************************************************************ \begin{code} -sub inject_split_markers { - local($hc_file) = @_; - - unlink("$Tmp_prefix.unmkd"); - local($to_do) = "$Cp $hc_file $Tmp_prefix.unmkd"; - &run_something($to_do, 'Prepare to number split markers'); - - open(TMPI, "< $Tmp_prefix.unmkd") || &tidy_up_and_die(1,"$Pgm: failed to open `$Tmp_prefix.unmkd' (to read)\n"); - open(TMPO, "> $hc_file") || &tidy_up_and_die(1,"$Pgm: failed to open `$hc_file' (to write)\n"); - - local($marker_no) = 1; - - # make sure there is a split marker before any "real" code - $_ = ; - while ( $_ ne '' && ( /^$/ || /^#/ ) ) { - print TMPO $_; - $_ = ; - } - print TMPO "__STG_SPLIT_MARKER(1)\n"; - print TMPO $_ if ! /^\s*\/\* SPLIT \*\/\s*$/; - - # Have to be a bit careful detecting /* SPLIT */ comments - # since a progam may use a string containing "/* SPLIT */" - # We check that there is nothing else on the line - - while () { - if (/^\s*\/\* SPLIT \*\/\s*$/) { - $marker_no++; - print TMPO "__STG_SPLIT_MARKER($marker_no)\n"; - next; - } - print TMPO $_; - } - - close(TMPI) || &tidy_up_and_die(1,"Failed reading $Tmp_prefix.unmkd\n"); - close(TMPO) || &tidy_up_and_die(1,"Failed writing $hc_file\n"); -} -\end{code} - -\begin{code} sub split_asm_file { local($asm_file) = @_; diff --git a/ghc/driver/ghc.lprl b/ghc/driver/ghc.lprl index 7badbc4..0568a0d 100644 --- a/ghc/driver/ghc.lprl +++ b/ghc/driver/ghc.lprl @@ -233,7 +233,6 @@ These are the default values, which may be changed by user flags. \begin{code} sub setupOptFlags { $Oopt_MaxSimplifierIterations = '-fmax-simplifier-iterations4'; - $Oopt_PedanticBottoms = '-fpedantic-bottoms'; # ON by default $Oopt_FinalStgProfilingMassage = ''; $Oopt_StgStats = ''; $Oopt_DoSpecialise = '-fspecialise'; @@ -719,7 +718,6 @@ sub setupOptimiseFlags { '-fcase-of-case', '-fcase-merge', '-flet-to-case', - $Oopt_PedanticBottoms, # initial simplify: mk specialiser happy: minimum effort please @@ -820,7 +818,7 @@ sub setupOptimiseFlags { # ( ($OptLevel != 2) # ? '' -# : "-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 -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_MaxSimplifierIterations $Oopt_ShowSimplifierProgress ]" ), # '-fliberate-case', @@ -1732,12 +1730,6 @@ sub runHscAndProcessInterfaces { } - # if we're going to split up object files, - # we inject split markers into the .hc file now - if ( $HscLang eq 'C' && $SplitObjFiles ) { - &inject_split_markers ( $hsc_out ); - } - # save a copy of the .hc file, even if we are carrying on... if ($HscLang eq 'C' && $do_cc && $Keep_hc_file_too) { &saveIntermediate($ifile_root , "hc" , $hsc_out); @@ -3292,9 +3284,6 @@ arg: while($_ = $Args[0]) { && do { $Oopt_MaxSimplifierIterations = $1 . &grab_arg_arg(*Args,$1, $2); next arg; }; - /^-fno-pedantic-bottoms$/ - && do { $Oopt_PedanticBottoms = ''; next arg; }; - /^-fno-pre-inlining$/ && do { push(@HsC_flags, $_); next arg }; diff --git a/ghc/includes/StgMacros.h b/ghc/includes/StgMacros.h index b58ff2b..1cd7559 100644 --- a/ghc/includes/StgMacros.h +++ b/ghc/includes/StgMacros.h @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $Id: StgMacros.h,v 1.25 2000/05/08 15:05:36 simonmar Exp $ + * $Id: StgMacros.h,v 1.26 2000/06/08 12:54:29 simonmar Exp $ * * (c) The GHC Team, 1998-1999 * @@ -645,9 +645,9 @@ extern DLL_IMPORT_DATA const StgPolyInfoTable seq_frame_info; -------------------------------------------------------------------------- */ #if defined(USE_SPLIT_MARKERS) -#define __STG_SPLIT_MARKER(n) FN_(__stg_split_marker##n) { } +#define __STG_SPLIT_MARKER __asm__("\n__stg_split_marker:"); #else -#define __STG_SPLIT_MARKER(n) /* nothing */ +#define __STG_SPLIT_MARKER /* nothing */ #endif /* ----------------------------------------------------------------------------- -- 1.7.10.4