X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2FNOTES;h=67b4c623b9135c8ba91eca3a4ce5295df393ce8f;hb=39deb5992e5cc0cbbd1f68c80cfb5b501c28fc6f;hp=367bb9350c306b24229348ce3917c0bf0b7dc2c2;hpb=7de9badc357ba9c4f3bbcd9f71fc0e4ffd0071bc;p=ghc-hetmet.git diff --git a/ghc/compiler/NOTES b/ghc/compiler/NOTES index 367bb93..67b4c62 100644 --- a/ghc/compiler/NOTES +++ b/ghc/compiler/NOTES @@ -1,131 +1,56 @@ -* CHECK that the things seek_liftable found are done in Core - -* CHECK that there aren't too many indirections in STG - local = ... - global = local Int - -Interface files -~~~~~~~~~~~~~~~ -* Don't need to pin a kind on the type variable in a interface class decl, - because it'll be correctly re-inferred when we read it in. - -* The double semicolon at the end of an interface-file signature is so that - the lexer can run through the pragmas very fast when -O isn't being used. - -* In export lists, T|(A,B) says that constructors A and B are exported, - but not the type T. Similarly for classes. - We can't say T(T,A,B) and T(A,B) to export or not-export T respectively, - because the type T might have a constructor T. - -=========================================================================== - - Nofib failures - ~~~~~~~~~~~~~~ - -* spectral/hartel/wave4main, wang, spectral/simple, real/symalg - -Bus error - -* real/anna - -expected stdout not matched by reality -*** big.sum.out Thu Aug 22 14:37:05 1996 ---- /tmp/runtest21900.1 Mon Jan 20 17:57:49 1997 -*************** -*** 1 **** -! 12796 49 ---- 1 ---- -! 63325 97 - - -* /real/compress2 - -expected stderr not matched by reality -Warning: missing newline at end of file /tmp/runtest14691.2 -*** /tmp/no_stderr14691 Thu Jan 23 14:33:29 1997 ---- /tmp/runtest14691.2 Thu Jan 23 14:33:29 1997 -*************** -*** 0 **** ---- 1,2 ---- -+ -+ Fail: Prelude.Enum.Char.toEnum:out of range - - -* real/ebnf2ps - -IOSupplement.hs: 43: value not in scope: getEnv - - ...and... - -HappyParser.hs: 127: Couldn't match the type - [HappyParser.Token'] against PrelBase.Int - Expected: HappyParser.HappyReduction - Inferred: PrelBase.Int -> HappyParser.Token' -> HappyParser.HappyState HappyParser.Token' ([HappyParser.HappyAbsSyn] -> [AbstractSyntax.Production]) -> PrelBase.Int -> PrelBase.Int -> o{-a1yN-} -> o{-a1yO-} -> [HappyParser.Token'] -> a{-a1yP-} - In an equation for function HappyParser.action_1: - HappyParser.action_1 _ = HappyParser.happyFail - - -* GHC_ONLY/bugs/andy_cherry - -DataTypes.lhs: 3: Could not find valid interface file for `GenUtils' - -Need "make depend" - -* GHC_ONLY/bugs/lex - -Pattern match fail in lex; must be producing empty or multi-valued result - -Aggravated by dreadful error messages: -+ -+ Fail: In irrefutable pattern -+ Fail: In pattern-matching -+ Fail: In pattern-matching -+ Fail: In pattern-matching -+ Fail: In pattern-matching -+ Fail: In pattern-matching -+ Fail: In pattern-matching -+ Fail: In pattern-matching -+ Fail: In pattern-matching -+ Fail: In pattern-matching -+ Fail: In pattern-matching -+ Fail: In pattern-matching -+ Fail: In pattern-matching -+ Fail: In pattern-matching -+ Fail: In pattern-matching -+ Fail: In pattern-matchingtoo many nested calls to `error' - - -* GHC_ONLY/bugs/jtod_circint - -Main.hs: 12: No instance for: Signal.Signal (Signal.Stream Bit.Bit) - Main.hs: 12: at a use of an overloaded identifier: `Signal.one' - -instance-decl slurping is WRONG - -* GHC_ONLY/arith005 - -ceiling doesn't work properly - ---- 1,3 ---- -+ [1, 1, 2, 3, 4, 5, 0, -2, -3, -4, 1000013, 124, 101, 103, 1, 0, 17001, 0, 1, 4] -+ [1, 1, 2, 3, 4, 5, 0, -2, -3, -4, 1000013, 124, 101, 103, 1, 0, 17001, 0, 1, 4] - [0, 0, 2, 3, 4, 5, -1, -2, -3, -4, 1000012, 124, 101, 103, 1, 0, 17000, 0, 1, 4] -*************** -*** 2,5 **** - [0, 0, 2, 3, 4, 5, -1, -2, -3, -4, 1000012, 124, 101, 103, 1, 0, 17000, 0, 1, 4] -- [0, 0, 2, 3, 4, 5, -1, -2, -3, -4, 1000012, 124, 101, 103, 1, 0, 17000, 0, 1, 4] -- [0, 0, 2, 3, 4, 5, -1, -2, -3, -4, 1000012, 124, 101, 103, 1, 0, 17000, 0, 1, 4] - [0, 0, 1, 2, 3, 4, -1, -3, -4, -5, 1000012, 123, 100, 102, 0, -1, 17000, -1, 0, 3] ---- 4,5 ---- - - -* GHC_ONLY/bugs/lennart_array - -Wrong array semantics (but who cares?) - -* GHC_ONLY/bugs/life_space_leak - --n *** sum I got: -0 0 --n *** sum I expected: -02845 1350 +NB: all floats are let-binds, but some non-rec lets + may be unlifted (with RHS ok-for-speculation) + + +simplArg: [use strictness] + [used for non-top-lvl non-rec RHS or function arg] + if strict-type || demanded + simplStrictExpr + else + simplExpr ---> (floats,expr) + float all the floats if exposes constr app, return expr + +simpl (applied lambda) ==> simplNonRecBind +simpl (Let (NonRec ...) ..) ==> simplNonRecBind + +simpl (Let (Rec ...) ..) ==> simplRecBind + +simplRecBind: + simplify binders (but not its IdInfo) + simplify the pairs one at a time + using simplRecPair + +simplNonRecBind: [was simplBeta] + [used for non-top-lvl non-rec bindings] + - check for PreInlineUnconditionally + - simplify binder, including its IdInfo + - simplArg + - if strict-type + addCaseBind [which makes a let if ok-for-spec] + else + completeLazyBind + +simplRecPair: [binder already simplified, but not its IdInfo] + [used for both rec and top-lvl non-rec] + [must not be strict/unboxed; case not allowed] + - check for PreInlineUnconditionally + - substituteIdInfo and add result to in-scope + [so that rules are available in rec rhs] + - simplExpr --> (floats,expr) + - float: lifted floats only + if exposes constructor or pap (even if non-triv args) + or if top level + - completeLazyBind + + +completeLazyBind: [given a simplified RHS] + [used for both rec and non-rec bindings, top level and not] + - try discarding dead + - try PostInlineUnconditionally + - let-bind coerce arg and repeat + - try rhs tylam (float) + - try eta expand (float) [not if any float is unlifted && (non-spec || top_lvl || rec)] + - let-bind constructor args [not if any float is ..as above..] + + - add unfolding [this is the only place we add an unfolding] + add arity