turn off let floating

Bernard James POPE bjpop at cs.mu.OZ.AU
Wed Apr 21 12:57:55 EDT 2004


On Tue, Apr 20, 2004 at 02:56:36PM +0200, Ketil Malde wrote:
> Bernard James POPE <bjpop at cs.mu.OZ.AU> writes:
> 
> > Note each program was compiled with ghc 6.2 with -O2 on debian linux.
>         :
> >       main = print $ loop 100000000 0
> 
> Isn't this going to be optimized away to a constant with -O2?

Here's the final stg code, obtained by:

   ghc -ddump-stg -O2 --make MainPure.hs -o pure

==================== STG syntax: ====================
Main.$wloop =
    \r [ww ww1]
	case ww of ds {
	  __DEFAULT ->
	      case +# [ww1 ds] of sat_s2pI {
		__DEFAULT ->
		    case -# [ds 1] of sat_s2pE {
		      __DEFAULT -> Main.$wloop sat_s2pE sat_s2pI;
		    };
	      };
	  0 -> ww1;
	};
SRT(Main.$wloop): []
Main.loop =
    \r [w w1]
	case w of w2 {
	  GHC.Base.I# ww ->
	      case w1 of w3 {
		GHC.Base.I# ww1 ->
		    case Main.$wloop ww ww1 of ww2 { __DEFAULT -> GHC.Base.I# [ww2]; };
	      };
	};
SRT(Main.loop): []
Main.eta =
    \u []
	case Main.$wloop 100000000 0 of ww {
	  __DEFAULT -> GHC.Base.I# [ww];
	};
SRT(Main.eta): []
Main.lvl =
    \u srt:(0,*bitmap*) []
	case Main.eta of w {
	  GHC.Base.I# ww -> GHC.Show.$wshowSignedInt 0 ww GHC.Base.[];
	};
SRT(Main.lvl): [Main.eta]
Main.main =
    \r srt:(0,*bitmap*) [s]
	case GHC.IO.hGetLine GHC.Handle.stdin s of wild {
	  GHC.Prim.(#,#) new_s a41 ->
	      case GHC.IO.hPutStr GHC.Handle.stdout Main.lvl new_s of wild1 {
		GHC.Prim.(#,#) new_s1 a411 ->
		    GHC.IO.$whPutChar GHC.Handle.stdout '\n' new_s1;
	      };
	};
SRT(Main.main): [GHC.Handle.stdout, GHC.IO.$whPutChar,
		 GHC.IO.hPutStr, GHC.Handle.stdin, GHC.IO.hGetLine, Main.lvl]
:Main.main =
    \r srt:(0,*bitmap*) [eta1]
	catch# [Main.main GHC.TopHandler.topHandler eta1];
SRT(:Main.main): [Main.main, GHC.TopHandler.topHandler]



More information about the Glasgow-haskell-users mailing list