FWIW, I found a few mins to understand this problem a bit more. SCCfinal assumes that CorePrep produces something like this
x = \y1..yn. scc "foo" body (See slurpSCCs in line237-ish of SCCfinal.) But CoreUtils.eta_expand produces something more like x = scc "foo" (\y1..yn. body) And eta expansion is (now) done last by CorePrep, so the deLam call on line 399 of CorePrep doesn't get a chance to fire. And a good thing really, because it would generate inefficient code. Various possible solutions: - In CoreToStg, attach any outer scc's to the StgRhsClosure This could be done in mkStgRhs. There is a suitable field in the StgRhsClosure. The downside is that this overlaps a bit with slurpSCCs in SCCfinal. - At the eta expand call in CorePrep, push the SCCs inside the lambdas, from where SCCfinal can slurp them out again. I don't really like this. Anyway I hope this makes it a bit clearer. Simon | -----Original Message----- | From: Simon Marlow [mailto:[EMAIL PROTECTED] On Behalf Of Simon | Marlow | Sent: 09 December 2008 10:05 | To: Thomas Schilling | Cc: Simon Peyton-Jones; cvs-ghc@haskell.org | Subject: Re: Panic when building head with profiling | | Thomas Schilling wrote: | > Ok, rebuilding from scratch doesn't help. The message is almost the | > same, though the file may be obscured due to make -j3. With just make | > the actual failure is (unsurprisingly) in | > dist-stage2/build/BinIface.p_hi. | > | > Apparently there's a do_expr case missing for StgLam in | > stgMassageForProfiling, but I could only guess how this could look | > like or whether this should perhaps never occur and be converted to a | > closure or an StgLet somewhere. | > | > 2008/12/8 Thomas Schilling <[EMAIL PROTECTED]>: | >> That seems to have fixed one problem, but I now get: | >> | >> <<ghc: 89630452 bytes, 7 GCs, 3328000/6496256 avg/max bytes residency | >> (2 samples), 65M in use, 0.00 INIT (0.00 elapsed), 0.27 MUT (0.63 | >> elapsed), 0.08 GC (0.11 elapsed) :ghc>> | >> /Users/nominolo/code/ghc/ng-api/ghc/stage1-inplace/ghc | >> -DGHCI_TABLES_NEXT_TO_CODE -DSTAGE=2 -package-name ghc-6.11.20081205 | >> -hide-all-packages -no-user-package-conf -i -idist-stage2/build | >> -inativeGen -ibasicTypes -icmm -icodeGen -icoreSyn -icprAnalysis | >> -ideSugar -ighci -ihsSyn -iiface -imain -iparser -iprelude -iprofiling | >> -irename -isimplCore -isimplStg -ispecialise -istgSyn -istranal | >> -itypecheck -itypes -iutils -ivectorise -idist-stage2/build/autogen | >> -Idist-stage2/build/autogen -Idist-stage2/build | >> -I../libffi/build/include -Istage2plus -I../libraries/base/cbits | >> -I../libraries/base/include -I. -Iparser -Iutils -optP-DUSE_EDITLINE | >> -optP-DGHCI -optP-include | >> -optPdist-stage2/build/autogen/cabal_macros.h -odir dist-stage2/build | >> -hidir dist-stage2/build -stubdir dist-stage2/build -package | >> Cabal-1.5.5 -package array-0.2.0.0 -package base-4.0.0.0 -package | >> bytestring-0.9.1.4 -package containers-0.2.0.0 -package | >> directory-1.0.0.2 -package editline-0.2.1.0 -package filepath-1.1.0.1 | >> -package haskell98-1.0.1.0 -package hpc-0.5.0.2 -package | >> old-time-1.0.0.1 -package process-1.0.1.1 -package | >> template-haskell-2.3.0.0 -package unix-2.3.1.0 -O -Wall | >> -fno-warn-name-shadowing -fno-warn-orphans -XCPP -XMagicHash | >> -XUnboxedTuples -XPatternGuards -XForeignFunctionInterface | >> -XEmptyDataDecls -XTypeSynonymInstances -XMultiParamTypeClasses | >> -XFlexibleInstances -XRank2Types -XScopedTypeVariables | >> -XDeriveDataTypeable -prof -hisuf p_hi -hcsuf p_hc -osuf p_o | >> -idist-stage2/build -H64m -O -fasm -W -fno-warn-unused-matches | >> -fwarn-unused-imports -Rghc-timing -Rghc-timing -O0 -DDEBUG -c | >> cmm/CmmProcPointZ.hs -o dist-stage2/build/CmmProcPointZ.p_o -ohi | >> dist-stage2/build/CmmProcPointZ.p_hi | >> ghc: panic! (the 'impossible' happened) | >> (GHC version 6.11.20081205 for i386-apple-darwin): | >> SCCfinal.do_expr | >> \ [eta_s9gV{v} [lid]] -> | >> ghc-6.11.20081205:Binary.a74{v r2Y} [gid] | >> $dBinary37{v r7mT} [gid] bh{v s9fY} [lid] eta_s9gV{v} [lid] | | I don't know what caused this, but it appears that SCCfinal has encountered | an StgLam. This isn't supposed to happen, because according to the | comments in StgSyn: | | -- StgLam is used *only* during CoreToStg's work. Before CoreToStg has | finished | -- it encodes (\x -> e) as (let f = \x -> e in f) | | Cheers, | Simon _______________________________________________ Cvs-ghc mailing list Cvs-ghc@haskell.org http://www.haskell.org/mailman/listinfo/cvs-ghc