[project @ 2000-06-08 12:54:29 by simonmar]
authorsimonmar <unknown>
Thu, 8 Jun 2000 12:54:29 +0000 (12:54 +0000)
committersimonmar <unknown>
Thu, 8 Jun 2000 12:54:29 +0000 (12:54 +0000)
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
ghc/driver/ghc-asm.lprl
ghc/driver/ghc-split.lprl
ghc/driver/ghc.lprl
ghc/includes/StgMacros.h

index 1f1d0f8..584d48e 100644 (file)
@@ -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
index 20d9043..d15003b 100644 (file)
@@ -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
index 91a34d2..5e4d0bc 100644 (file)
@@ -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
-    $_ = <TMPI>;
-    while ( $_ ne '' && ( /^$/ || /^#/ ) ) {
-       print TMPO $_;
-       $_ = <TMPI>;
-    }
-    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 (<TMPI>) {
-       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) = @_;
 
index 7badbc4..0568a0d 100644 (file)
@@ -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 };
 
index b58ff2b..1cd7559 100644 (file)
@@ -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
 
 /* -----------------------------------------------------------------------------