Andreas Klebinger pushed to branch wip/apk/unfold-dicts at Glasgow Haskell Compiler / GHC
Commits:
-
f84c3214
by Andreas Klebinger at 2026-09-30T15:49:21+00:00
14 changed files:
- + changelog.d/T27802-classop-arg-size
- + changelog.d/T27818-unfolding-size-casts-ticks
- compiler/GHC/Core/Unfold.hs
- testsuite/tests/arityanal/should_compile/Arity01.stderr
- testsuite/tests/arityanal/should_compile/Arity05.stderr
- testsuite/tests/arityanal/should_compile/Arity08.stderr
- testsuite/tests/arityanal/should_compile/Arity11.stderr
- testsuite/tests/arityanal/should_compile/Arity14.stderr
- testsuite/tests/deSugar/should_compile/T16615.stderr
- testsuite/tests/dmdanal/should_compile/T23398.stderr
- testsuite/tests/ghci.debugger/scripts/break021.stdout
- testsuite/tests/perf/compiler/T25723.hs
- testsuite/tests/simplCore/should_compile/T15205.stderr
- testsuite/tests/simplCore/should_compile/T26117.stderr
Changes:
| 1 | +section: compiler
|
|
| 2 | +issues: #27802
|
|
| 3 | +mrs: !16675
|
|
| 4 | +synopsis:
|
|
| 5 | + Account for arguments applied to unary class methods when computing unfolding size.
|
|
| 6 | +description: {
|
|
| 7 | + Due to a bug we considered the application of arguments to a unary class method free
|
|
| 8 | + during expression size calculation. We now accurately calculate the discount again.
|
|
| 9 | + |
|
| 10 | + This might make some functions heavy on single-class method use no longer inline.
|
|
| 11 | +} |
| 1 | +section: compiler
|
|
| 2 | +issues: #27818
|
|
| 3 | +mrs: !16675
|
|
| 4 | +synopsis:
|
|
| 5 | + Fixed a bug that caused newtypes and cost centres to affect inlining decisions. |
| ... | ... | @@ -335,6 +335,10 @@ isValFun :: CoreExpr -> Bool |
| 335 | 335 | -- one top-level value lambda
|
| 336 | 336 | isValFun (Lam b e) | isRuntimeVar b = True
|
| 337 | 337 | | otherwise = isValFun e
|
| 338 | +-- A tick can be code which *can* change the runtime semantics here.
|
|
| 339 | +-- But we want to ignore it anyway. See Note [Ticks and Cast should not impact unfolding guidance]
|
|
| 340 | +isValFun (Tick _t e) = isValFun e
|
|
| 341 | +isValFun (Cast e _co) = isValFun e
|
|
| 338 | 342 | isValFun _ = False
|
| 339 | 343 | |
| 340 | 344 | calcUnfoldingGuidance
|
| ... | ... | @@ -669,6 +673,11 @@ sizeExpr opts !bOMB_OUT_SIZE top_args expr |
| 669 | 673 | is_inline_scrut (Var v) =
|
| 670 | 674 | isUnliftedType (idType v)
|
| 671 | 675 | -- isUnliftedType is OK here: scrutinees have a fixed RuntimeRep (search for FRRCase)
|
| 676 | + -- Even if this makes the check technically wrong we want to
|
|
| 677 | + -- look through ticks here.
|
|
| 678 | + -- See Note [Ticks and Cast should not impact unfolding guidance]
|
|
| 679 | + is_inline_scrut (Tick _t e) = is_inline_scrut e
|
|
| 680 | + is_inline_scrut (Cast e _co) = is_inline_scrut e
|
|
| 672 | 681 | is_inline_scrut scrut
|
| 673 | 682 | | (Var f, _) <- collectArgs scrut
|
| 674 | 683 | = case idDetails f of
|
| ... | ... | @@ -709,7 +718,7 @@ sizeExpr opts !bOMB_OUT_SIZE top_args expr |
| 709 | 718 | FCallId _ -> sizeN (callSize (length val_args) voids)
|
| 710 | 719 | DataConWorkId dc -> conSize dc (length val_args)
|
| 711 | 720 | PrimOpId op _ -> primOpSize op (length val_args)
|
| 712 | - ClassOpId cls _ -> classOpSize opts cls top_args val_args
|
|
| 721 | + ClassOpId cls _ -> classOpSize opts cls top_args val_args voids
|
|
| 713 | 722 | _ | fun `hasKey` buildIdKey -> buildSize
|
| 714 | 723 | | fun `hasKey` augmentIdKey -> augmentSize
|
| 715 | 724 | | otherwise -> funSize opts top_args fun (length val_args) voids
|
| ... | ... | @@ -761,9 +770,11 @@ sizeExpr opts !bOMB_OUT_SIZE top_args expr |
| 761 | 770 | -- and typePrimRep will crash
|
| 762 | 771 | isZeroBitId id = not (isJoinId id) && isZeroBitTy (idType id)
|
| 763 | 772 | |
| 764 | - isZeroBitExpr (Var id) = isZeroBitId id
|
|
| 765 | - isZeroBitExpr (Tick _ e) = isZeroBitExpr e
|
|
| 766 | - isZeroBitExpr _ = False
|
|
| 773 | + -- [Ticks and Cast should not impact unfolding guidance]
|
|
| 774 | + isZeroBitExpr (Var id) = isZeroBitId id
|
|
| 775 | + isZeroBitExpr (Tick _t e) = isZeroBitExpr e
|
|
| 776 | + isZeroBitExpr (Cast e _co) = isZeroBitExpr e
|
|
| 777 | + isZeroBitExpr _ = False
|
|
| 767 | 778 | |
| 768 | 779 | -- | Finds a nominal size of a string literal.
|
| 769 | 780 | litSize :: Literal -> Int
|
| ... | ... | @@ -777,21 +788,31 @@ litSize _other = 0 -- Must match size of nullary constructors |
| 777 | 788 | -- Key point: if x |-> 4, then x must inline unconditionally
|
| 778 | 789 | -- (eg via case binding)
|
| 779 | 790 | |
| 780 | -classOpSize :: UnfoldingOpts -> Class -> [Id] -> [CoreExpr] -> ExprSize
|
|
| 791 | +classOpSize :: UnfoldingOpts -> Class -> [Id] -> [CoreExpr] -> Int -> ExprSize
|
|
| 781 | 792 | -- See (IA1) in Note [Interesting arguments] in GHC.Core.Opt.Simplify.Utils
|
| 782 | -classOpSize _opts _cls _top_args []
|
|
| 793 | +classOpSize _opts _cls _top_args [] _voids
|
|
| 783 | 794 | = sizeZero -- A non-applied classop
|
| 784 | -classOpSize opts cls top_args (dict_arg:other_val_args)
|
|
| 785 | - = SizeIs size (arg_discount dict_arg) 0
|
|
| 795 | +classOpSize opts cls top_args (dict_arg:other_val_args) voids
|
|
| 796 | + = SizeIs size dict_arg_discount 0
|
|
| 786 | 797 | where
|
| 787 | - size | isUnaryClass cls = 0 -- See (UCM4) in Note [Unary class magic] in GHC.Core.TyCon
|
|
| 788 | - | otherwise = 20 + (10 * length other_val_args)
|
|
| 798 | + -- See (UCM4) in Note [Unary class magic] in GHC.Core.TyCon
|
|
| 799 | + op_app_size = if isUnaryClass cls then 0 else 20
|
|
| 800 | + |
|
| 801 | + -- Size penalty for applying the extracted class method to it's
|
|
| 802 | + -- arguments.
|
|
| 803 | + method_app_size
|
|
| 804 | + | null other_val_args = 0 -- we don't actually apply the result
|
|
| 805 | + | otherwise = callSize (length other_val_args) voids
|
|
| 806 | + |
|
| 807 | + size = op_app_size + method_app_size
|
|
| 789 | 808 | |
| 790 | 809 | -- If the class op is scrutinising a lambda bound dictionary then
|
| 791 | 810 | -- give it a discount, to encourage the inlining of this function
|
| 792 | - arg_discount (Cast arg _co) = arg_discount arg
|
|
| 793 | - arg_discount (Var dict) | dict `elem` top_args = unitBag (dict, dict_discount)
|
|
| 794 | - arg_discount _ = emptyBag
|
|
| 811 | + dict_arg_discount = case getIdFromTrivialExpr_maybe dict_arg of
|
|
| 812 | + Nothing -> emptyBag
|
|
| 813 | + Just var
|
|
| 814 | + | var `elem` top_args -> unitBag (var, dict_discount)
|
|
| 815 | + | otherwise -> emptyBag
|
|
| 795 | 816 | |
| 796 | 817 | -- If we have (class-op d arg1 .. argn) then it's super-good to inline
|
| 797 | 818 | -- to expose `d`; not only can we do the dictionary selection
|
| ... | ... | @@ -1051,6 +1072,23 @@ In a function application (f a b) |
| 1051 | 1072 | get a saturated application)
|
| 1052 | 1073 | |
| 1053 | 1074 | Code for manipulating sizes
|
| 1075 | + |
|
| 1076 | +Note [Ticks and Cast should not impact unfolding guidance]
|
|
| 1077 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
| 1078 | +We want to ignore ticks and casts when
|
|
| 1079 | +computing unfolding guidance. The reason is simple:
|
|
| 1080 | + |
|
| 1081 | +We want inlining to be robust if a user changes a type alias
|
|
| 1082 | +to a newtype, if the code is otherwise the same.
|
|
| 1083 | + |
|
| 1084 | +Similarly we want inlining to behave the same for a core expression
|
|
| 1085 | +(<tick> e) as it does for `e`.
|
|
| 1086 | +This is **independent** of the kind of tick we are dealing with.
|
|
| 1087 | +Even for ticks that represent code at runtime we generally want
|
|
| 1088 | +to inline as-if no tick is present. This way profiled code will
|
|
| 1089 | +be closer to non-profiled code, which leads to more accurate profiles.
|
|
| 1090 | + |
|
| 1091 | +So we take care to look through Cast/Ticks wherever possible.
|
|
| 1054 | 1092 | -}
|
| 1055 | 1093 | |
| 1056 | 1094 | -- | The size of a candidate expression for unfolding
|
| ... | ... | @@ -45,7 +45,7 @@ F1.s1 = GHC.Internal.Bignum.Integer.IS 3# |
| 45 | 45 | |
| 46 | 46 | -- RHS size: {terms: 8, types: 7, coercions: 0, joins: 0/0}
|
| 47 | 47 | s :: forall {t1} {t2}. Num t1 => (t1 -> t2) -> t2
|
| 48 | -[GblId, Arity=2, Str=<MP(A,A,A,A,A,A,1C(1,L))><1C(1,L)>, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [90 60] 50 0}]
|
|
| 48 | +[GblId, Arity=2, Str=<MP(A,A,A,A,A,A,1C(1,L))><1C(1,L)>, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [90 60] 60 0}]
|
|
| 49 | 49 | s = \ (@t) (@t1) ($dNum :: Num t) (f :: t -> t1) -> f (fromInteger @t $dNum F1.s1)
|
| 50 | 50 | |
| 51 | 51 | -- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0}
|
| ... | ... | @@ -9,12 +9,12 @@ F5.f5g1 = GHC.Internal.Bignum.Integer.IS 1# |
| 9 | 9 | |
| 10 | 10 | -- RHS size: {terms: 12, types: 9, coercions: 0, joins: 0/0}
|
| 11 | 11 | f5g :: forall {a} {t}. Num a => (t -> a) -> t -> a
|
| 12 | -[GblId, Arity=3, Str=<SP(1C(1,C(1,L)),A,A,A,A,A,MC(1,L))><MC(1,L)><L>, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [180 60 0] 90 0}]
|
|
| 12 | +[GblId, Arity=3, Str=<SP(1C(1,C(1,L)),A,A,A,A,A,MC(1,L))><MC(1,L)><L>, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [180 60 0] 110 0}]
|
|
| 13 | 13 | f5g = \ (@a) (@t) ($dNum :: Num a) (h :: t -> a) (z :: t) -> + @a $dNum (h z) (fromInteger @a $dNum F5.f5g1)
|
| 14 | 14 | |
| 15 | 15 | -- RHS size: {terms: 17, types: 12, coercions: 0, joins: 0/0}
|
| 16 | 16 | f5h :: forall {a} {t}. Num a => (t -> a) -> t -> (t -> a) -> a
|
| 17 | -[GblId, Arity=4, Str=<SP(SC(S,C(1,L)),A,A,A,A,A,MC(1,L))><MC(1,L)><L><MC(1,L)>, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [270 60 0 60] 150 0}]
|
|
| 17 | +[GblId, Arity=4, Str=<SP(SC(S,C(1,L)),A,A,A,A,A,MC(1,L))><MC(1,L)><L><MC(1,L)>, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [270 60 0 60] 180 0}]
|
|
| 18 | 18 | f5h = \ (@a) (@t) ($dNum :: Num a) (f :: t -> a) (x :: t) (g :: t -> a) -> + @a $dNum (f x) (+ @a $dNum (g x) (fromInteger @a $dNum F5.f5g1))
|
| 19 | 19 | |
| 20 | 20 | -- RHS size: {terms: 4, types: 1, coercions: 0, joins: 0/0}
|
| ... | ... | @@ -3,12 +3,12 @@ |
| 3 | 3 | Result size of Tidy Core = {terms: 24, types: 18, coercions: 0, joins: 0/0}
|
| 4 | 4 | |
| 5 | 5 | -- RHS size: {terms: 20, types: 10, coercions: 0, joins: 0/0}
|
| 6 | -f8f :: forall {p}. Num p => Bool -> p -> p -> p
|
|
| 7 | -[GblId, Arity=4, Str=<LP(SC(S,C(1,L)),A,MC(1,C(1,L)),A,A,A,A)><1L><L><L>, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [270 30 0 0] 140 0}]
|
|
| 6 | +f8f :: forall {a}. Num a => Bool -> a -> a -> a
|
|
| 7 | +[GblId, Arity=4, Str=<LP(SC(S,C(1,L)),A,MC(1,C(1,L)),A,A,A,A)><1L><L><L>, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [270 30 0 0] 170 0}]
|
|
| 8 | 8 | f8f
|
| 9 | - = \ (@p) ($dNum :: Num p) (b :: Bool) (x :: p) (y :: p) ->
|
|
| 9 | + = \ (@a) ($dNum :: Num a) (b :: Bool) (x :: a) (y :: a) ->
|
|
| 10 | 10 | case b of {
|
| 11 | - False -> + @p $dNum (+ @p $dNum x y) (* @p $dNum x x);
|
|
| 11 | + False -> + @a $dNum (+ @a $dNum x y) (* @a $dNum x x);
|
|
| 12 | 12 | True -> y
|
| 13 | 13 | }
|
| 14 | 14 |
| ... | ... | @@ -19,7 +19,7 @@ F11.fib1 = GHC.Internal.Bignum.Integer.IS 0# |
| 19 | 19 | |
| 20 | 20 | -- RHS size: {terms: 54, types: 27, coercions: 0, joins: 0/5}
|
| 21 | 21 | fib :: forall {t1} {t2}. (Eq t1, Num t1, Num t2) => t1 -> t2
|
| 22 | -[GblId, Arity=4, Str=<SP(SC(S,C(1,L)),A)><LP(A,LC(L,C(1,L)),A,A,A,A,L)><LP(LC(S,C(1,L)),A,A,A,A,A,MC(1,L))><L>, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [180 450 180 0] 480 0}]
|
|
| 22 | +[GblId, Arity=4, Str=<SP(SC(S,C(1,L)),A)><LP(A,LC(L,C(1,L)),A,A,A,A,L)><LP(LC(S,C(1,L)),A,A,A,A,A,MC(1,L))><L>, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [180 450 180 0] 570 0}]
|
|
| 23 | 23 | fib
|
| 24 | 24 | = \ (@t) (@t1) ($dEq :: Eq t) ($dNum :: Num t) ($dNum1 :: Num t1) (eta :: t) ->
|
| 25 | 25 | let {
|
| ... | ... | @@ -105,7 +105,7 @@ F11.f11f1 = \ (y :: Integer) -> GHC.Internal.Bignum.Integer.integerAdd F11.f11_x |
| 105 | 105 | -- RHS size: {terms: 3, types: 2, coercions: 0, joins: 0/0}
|
| 106 | 106 | f11f :: forall {p}. p -> Integer -> Integer
|
| 107 | 107 | [GblId, Arity=2, Str=<A><SL>, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=ALWAYS_IF(arity=1,unsat_ok=True,boring_ok=True)}]
|
| 108 | -f11f = \ (@p) _ [Occ=Dead] -> F11.f11f1
|
|
| 108 | +f11f = \ (@p) (z [Occ=Dead] :: p) -> F11.f11f1
|
|
| 109 | 109 | |
| 110 | 110 | -- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0}
|
| 111 | 111 | F11.f5 :: Integer
|
| ... | ... | @@ -14,7 +14,7 @@ F14.f2 = GHC.Internal.Bignum.Integer.IS 1# |
| 14 | 14 | |
| 15 | 15 | -- RHS size: {terms: 36, types: 23, coercions: 0, joins: 0/3}
|
| 16 | 16 | f14 :: forall {t}. (Ord t, Num t) => t -> t -> t -> t
|
| 17 | -[GblId, Arity=4, Str=<SP(A,A,SC(S,C(1,L)),A,A,A,A,A)><LP(LC(L,C(1,L)),A,A,A,A,A,MC(1,L))><L><L>, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [90 270 0 0] 310 0}]
|
|
| 17 | +[GblId, Arity=4, Str=<SP(A,A,SC(S,C(1,L)),A,A,A,A,A)><LP(LC(L,C(1,L)),A,A,A,A,A,MC(1,L))><L><L>, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [90 270 0 0] 350 0}]
|
|
| 18 | 18 | f14
|
| 19 | 19 | = \ (@t) ($dOrd :: Ord t) ($dNum :: Num t) (eta :: t) (eta1 :: t) ->
|
| 20 | 20 | let {
|
| ... | ... | @@ -9,7 +9,7 @@ g :: Int -> Bool |
| 9 | 9 | [LclIdX,
|
| 10 | 10 | Unf=Unf{Src=<vanilla>, TopLvl=True,
|
| 11 | 11 | Value=True, ConLike=True, WorkFree=True, Expandable=True,
|
| 12 | - Guidance=IF_ARGS [0] 120 10}]
|
|
| 12 | + Guidance=IF_ARGS [0] 140 10}]
|
|
| 13 | 13 | g = \ (i :: Int) ->
|
| 14 | 14 | case ==
|
| 15 | 15 | @Int GHC.Internal.Classes.$fEqInt i (GHC.Internal.Types.I# 0#)
|
| ... | ... | @@ -23,7 +23,7 @@ f [Occ=LoopBreaker] :: Int -> Bool |
| 23 | 23 | [LclIdX,
|
| 24 | 24 | Unf=Unf{Src=<vanilla>, TopLvl=True,
|
| 25 | 25 | Value=True, ConLike=True, WorkFree=True, Expandable=True,
|
| 26 | - Guidance=IF_ARGS [0] 120 10}]
|
|
| 26 | + Guidance=IF_ARGS [0] 140 10}]
|
|
| 27 | 27 | f = \ (i :: Int) ->
|
| 28 | 28 | case ==
|
| 29 | 29 | @Int GHC.Internal.Classes.$fEqInt i (GHC.Internal.Types.I# 0#)
|
| ... | ... | @@ -10,7 +10,7 @@ foo :: forall a. PairDict a => a -> a -> String |
| 10 | 10 | Str=<SP(SP(1C(1,C(1,L)),A),SP(A,1C(1,L),A))><L><L>,
|
| 11 | 11 | Unf=Unf{Src=<vanilla>, TopLvl=True,
|
| 12 | 12 | Value=True, ConLike=True, WorkFree=True, Expandable=True,
|
| 13 | - Guidance=IF_ARGS [90 0 0] 180 0}]
|
|
| 13 | + Guidance=IF_ARGS [90 0 0] 210 0}]
|
|
| 14 | 14 | foo
|
| 15 | 15 | = \ (@a) ($dCTuple2 :: PairDict a) (eta :: a) (eta1 :: a) ->
|
| 16 | 16 | case ==
|
| ... | ... | @@ -41,7 +41,7 @@ _result :: IO () = _ |
| 41 | 41 | ^^^^^^^^^^^^^^^^^
|
| 42 | 42 | 13 in_another_module 0
|
| 43 | 43 | Stopped in Main.in_another_decl, break020.hs:(6,21)-(7,30)
|
| 44 | -_result :: IO () = _
|
|
| 44 | +_result :: m () = _
|
|
| 45 | 45 | 5
|
| 46 | 46 | vv
|
| 47 | 47 | 6 in_another_decl _ = do line1 0
|
| ... | ... | @@ -49,25 +49,25 @@ _result :: IO () = _ |
| 49 | 49 | ^^
|
| 50 | 50 | 8
|
| 51 | 51 | Stopped in Main.in_another_decl, break020.hs:6:24-30
|
| 52 | -_result :: IO () = _
|
|
| 52 | +_result :: m () = _
|
|
| 53 | 53 | 5
|
| 54 | 54 | 6 in_another_decl _ = do line1 0
|
| 55 | 55 | ^^^^^^^
|
| 56 | 56 | 7 line2 0
|
| 57 | 57 | Stopped in Main.line1, break020.hs:3:11-19
|
| 58 | -_result :: IO () = _
|
|
| 58 | +_result :: m () = _
|
|
| 59 | 59 | 2
|
| 60 | 60 | 3 line1 _ = return ()
|
| 61 | 61 | ^^^^^^^^^
|
| 62 | 62 | 4 line2 _ = return ()
|
| 63 | 63 | Stopped in Main.in_another_decl, break020.hs:7:24-30
|
| 64 | -_result :: IO () = _
|
|
| 64 | +_result :: m () = _
|
|
| 65 | 65 | 6 in_another_decl _ = do line1 0
|
| 66 | 66 | 7 line2 0
|
| 67 | 67 | ^^^^^^^
|
| 68 | 68 | 8
|
| 69 | 69 | Stopped in Main.line2, break020.hs:4:11-19
|
| 70 | -_result :: IO () = _
|
|
| 70 | +_result :: m () = _
|
|
| 71 | 71 | 3 line1 _ = return ()
|
| 72 | 72 | 4 line2 _ = return ()
|
| 73 | 73 | ^^^^^^^^^
|
| ... | ... | @@ -9,6 +9,12 @@ |
| 9 | 9 | {-# LANGUAGE TypeOperators #-}
|
| 10 | 10 | |
| 11 | 11 | {-# OPTIONS_GHC -flate-specialise -O2 #-}
|
| 12 | +-- The purpose of this test it to ensure we get a nice recursive loop inside main.
|
|
| 13 | +-- Where otherwise we would allocate a intermediate tuple if we fail to inline a join
|
|
| 14 | +-- point (#25723).
|
|
| 15 | +-- As unfolding guidance changed the join point never materialized so we use a
|
|
| 16 | +-- different threshold to ensure we still test the expect behaviour.
|
|
| 17 | +{-# OPTIONS_GHC -funfolding-use-threshold=120 #-}
|
|
| 12 | 18 | |
| 13 | 19 | module Main (main) where
|
| 14 | 20 |
| ... | ... | @@ -10,7 +10,7 @@ f :: forall a b. C a b => a -> b |
| 10 | 10 | Str=<1P(A,1C(1,C(1,L)))><L>,
|
| 11 | 11 | Unf=Unf{Src=<vanilla>, TopLvl=True,
|
| 12 | 12 | Value=True, ConLike=True, WorkFree=True, Expandable=True,
|
| 13 | - Guidance=IF_ARGS [90 0] 40 0}]
|
|
| 13 | + Guidance=IF_ARGS [90 0] 50 0}]
|
|
| 14 | 14 | f = \ (@a) (@b) ($dC :: C a b) (eta :: a) -> op @a @b $dC eta eta
|
| 15 | 15 | |
| 16 | 16 |
| ... | ... | @@ -6,83 +6,7 @@ T26117.hs:17:10: warning: [GHC-06201] [-Wmissing-methods (in -Wdefault)] |
| 6 | 6 | |
| 7 | 7 | ==================== Tidy Core ====================
|
| 8 | 8 | Result size of Tidy Core
|
| 9 | - = {terms: 196, types: 296, coercions: 2, joins: 0/0}
|
|
| 10 | - |
|
| 11 | --- RHS size: {terms: 7, types: 18, coercions: 0, joins: 0/0}
|
|
| 12 | -op1 [InlPrag=[~]] :: forall a b. C a b => F a -> a -> b -> Int
|
|
| 13 | -[GblId[ClassOp],
|
|
| 14 | - Arity=1,
|
|
| 15 | - Str=<S!P(SL,A)>,
|
|
| 16 | - Unf=Unf{Src=StableSystem, TopLvl=True,
|
|
| 17 | - Value=True, ConLike=True, WorkFree=True, Expandable=True,
|
|
| 18 | - Guidance=ALWAYS_IF(arity=1,unsat_ok=False,boring_ok=False)
|
|
| 19 | - Tmpl= \ (@a) (@b) (v [Occ=Once1!] :: C a b) ->
|
|
| 20 | - case v of { T26117.C:C v2 [Occ=Once1] _ [Occ=Dead] -> v2 }}]
|
|
| 21 | -op1
|
|
| 22 | - = \ (@a) (@b) (v :: C a b) ->
|
|
| 23 | - case v of v1 { T26117.C:C v2 v3 -> v2 }
|
|
| 24 | - |
|
| 25 | --- RHS size: {terms: 7, types: 18, coercions: 0, joins: 0/0}
|
|
| 26 | -op2 [InlPrag=[~]] :: forall a b. C a b => F a -> a -> b -> Int
|
|
| 27 | -[GblId[ClassOp],
|
|
| 28 | - Arity=1,
|
|
| 29 | - Str=<S!P(A,SL)>,
|
|
| 30 | - Unf=Unf{Src=StableSystem, TopLvl=True,
|
|
| 31 | - Value=True, ConLike=True, WorkFree=True, Expandable=True,
|
|
| 32 | - Guidance=ALWAYS_IF(arity=1,unsat_ok=False,boring_ok=False)
|
|
| 33 | - Tmpl= \ (@a) (@b) (v [Occ=Once1!] :: C a b) ->
|
|
| 34 | - case v of { T26117.C:C _ [Occ=Dead] v3 [Occ=Once1] -> v3 }}]
|
|
| 35 | -op2
|
|
| 36 | - = \ (@a) (@b) (v :: C a b) ->
|
|
| 37 | - case v of v1 { T26117.C:C v2 v3 -> v3 }
|
|
| 38 | - |
|
| 39 | --- RHS size: {terms: 7, types: 17, coercions: 0, joins: 0/0}
|
|
| 40 | -T26117.$p1D [InlPrag=[~]] :: forall a b. D a b => Eq (F a)
|
|
| 41 | -[GblId[ClassOp],
|
|
| 42 | - Arity=1,
|
|
| 43 | - Str=<S!P(SL,A,A)>,
|
|
| 44 | - Unf=Unf{Src=StableSystem, TopLvl=True,
|
|
| 45 | - Value=True, ConLike=True, WorkFree=True, Expandable=True,
|
|
| 46 | - Guidance=ALWAYS_IF(arity=1,unsat_ok=False,boring_ok=False)
|
|
| 47 | - Tmpl= \ (@a) (@b) (v [Occ=Once1!] :: D a b) ->
|
|
| 48 | - case v of { T26117.C:D v2 [Occ=Once1] _ [Occ=Dead] _ [Occ=Dead] ->
|
|
| 49 | - v2
|
|
| 50 | - }}]
|
|
| 51 | -T26117.$p1D
|
|
| 52 | - = \ (@a) (@b) (v :: D a b) ->
|
|
| 53 | - case v of v1 { T26117.C:D v2 v3 v4 -> v2 }
|
|
| 54 | - |
|
| 55 | --- RHS size: {terms: 7, types: 17, coercions: 0, joins: 0/0}
|
|
| 56 | -dop1 [InlPrag=[~]] :: forall a b. D a b => a -> b -> b
|
|
| 57 | -[GblId[ClassOp],
|
|
| 58 | - Arity=1,
|
|
| 59 | - Str=<S!P(A,SL,A)>,
|
|
| 60 | - Unf=Unf{Src=StableSystem, TopLvl=True,
|
|
| 61 | - Value=True, ConLike=True, WorkFree=True, Expandable=True,
|
|
| 62 | - Guidance=ALWAYS_IF(arity=1,unsat_ok=False,boring_ok=False)
|
|
| 63 | - Tmpl= \ (@a) (@b) (v [Occ=Once1!] :: D a b) ->
|
|
| 64 | - case v of { T26117.C:D _ [Occ=Dead] v3 [Occ=Once1] _ [Occ=Dead] ->
|
|
| 65 | - v3
|
|
| 66 | - }}]
|
|
| 67 | -dop1
|
|
| 68 | - = \ (@a) (@b) (v :: D a b) ->
|
|
| 69 | - case v of v1 { T26117.C:D v2 v3 v4 -> v3 }
|
|
| 70 | - |
|
| 71 | --- RHS size: {terms: 7, types: 17, coercions: 0, joins: 0/0}
|
|
| 72 | -dop2 [InlPrag=[~]] :: forall a b. D a b => a -> b -> b
|
|
| 73 | -[GblId[ClassOp],
|
|
| 74 | - Arity=1,
|
|
| 75 | - Str=<S!P(A,A,SL)>,
|
|
| 76 | - Unf=Unf{Src=StableSystem, TopLvl=True,
|
|
| 77 | - Value=True, ConLike=True, WorkFree=True, Expandable=True,
|
|
| 78 | - Guidance=ALWAYS_IF(arity=1,unsat_ok=False,boring_ok=False)
|
|
| 79 | - Tmpl= \ (@a) (@b) (v [Occ=Once1!] :: D a b) ->
|
|
| 80 | - case v of { T26117.C:D _ [Occ=Dead] _ [Occ=Dead] v4 [Occ=Once1] ->
|
|
| 81 | - v4
|
|
| 82 | - }}]
|
|
| 83 | -dop2
|
|
| 84 | - = \ (@a) (@b) (v :: D a b) ->
|
|
| 85 | - case v of v1 { T26117.C:D v2 v3 v4 -> v4 }
|
|
| 9 | + = {terms: 153, types: 148, coercions: 2, joins: 0/0}
|
|
| 86 | 10 | |
| 87 | 11 | -- RHS size: {terms: 1, types: 0, coercions: 0, joins: 0/0}
|
| 88 | 12 | T26117.$fCaList1 :: GHC.Internal.Prim.Addr#
|
| ... | ... | @@ -92,28 +16,6 @@ T26117.$fCaList1 :: GHC.Internal.Prim.Addr# |
| 92 | 16 | Guidance=IF_ARGS [] 70 0}]
|
| 93 | 17 | T26117.$fCaList1 = "T26117.hs:17:10-37|\CANop2\EM"#
|
| 94 | 18 | |
| 95 | --- RHS size: {terms: 6, types: 15, coercions: 0, joins: 0/0}
|
|
| 96 | -T26117.$fCaList_$cop2 [InlPrag=[2]]
|
|
| 97 | - :: forall a b. (Eq (F a), D a b) => F a -> a -> [b] -> Int
|
|
| 98 | -[GblId,
|
|
| 99 | - Arity=2,
|
|
| 100 | - Str=<B><B>b,
|
|
| 101 | - Cpr=b,
|
|
| 102 | - Unf=Unf{Src=StableSystem, TopLvl=True,
|
|
| 103 | - Value=True, ConLike=True, WorkFree=True, Expandable=True,
|
|
| 104 | - Guidance=ALWAYS_IF(arity=2,unsat_ok=True,boring_ok=True)
|
|
| 105 | - Tmpl= \ (@a) (@b) _ [Occ=Dead] _ [Occ=Dead] ->
|
|
| 106 | - GHC.Internal.Control.Exception.Base.noMethodBindingError
|
|
| 107 | - @GHC.Internal.Types.LiftedRep
|
|
| 108 | - @(F a -> a -> [b] -> Int)
|
|
| 109 | - T26117.$fCaList1}]
|
|
| 110 | -T26117.$fCaList_$cop2
|
|
| 111 | - = \ (@a) (@b) _ [Occ=Dead] _ [Occ=Dead] ->
|
|
| 112 | - GHC.Internal.Control.Exception.Base.noMethodBindingError
|
|
| 113 | - @GHC.Internal.Types.LiftedRep
|
|
| 114 | - @(F a -> a -> [b] -> Int)
|
|
| 115 | - T26117.$fCaList1
|
|
| 116 | - |
|
| 117 | 19 | -- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0}
|
| 118 | 20 | T26117.$fCaList3 :: Int
|
| 119 | 21 | [GblId,
|
| ... | ... | @@ -130,11 +32,48 @@ T26117.$fCaList2 :: Int |
| 130 | 32 | Guidance=IF_ARGS [] 10 10}]
|
| 131 | 33 | T26117.$fCaList2 = GHC.Internal.Types.I# 3#
|
| 132 | 34 | |
| 35 | +-- RHS size: {terms: 16, types: 16, coercions: 0, joins: 0/0}
|
|
| 36 | +T26117.$fCaList_$cop1
|
|
| 37 | + :: forall a b. (Eq (F a), D a b) => F a -> a -> [b] -> Int
|
|
| 38 | +[GblId,
|
|
| 39 | + Arity=5,
|
|
| 40 | + Str=<1P(1C(1,C(1,L)),A)><A><L><A><A>,
|
|
| 41 | + Cpr=1,
|
|
| 42 | + Unf=Unf{Src=StableSystem, TopLvl=True,
|
|
| 43 | + Value=True, ConLike=True, WorkFree=True, Expandable=True,
|
|
| 44 | + Guidance=ALWAYS_IF(arity=5,unsat_ok=True,boring_ok=False)
|
|
| 45 | + Tmpl= \ (@a)
|
|
| 46 | + (@b)
|
|
| 47 | + ($dEq [Occ=Once1] :: Eq (F a))
|
|
| 48 | + ($dD [Occ=Dead] :: D a b)
|
|
| 49 | + (x :: F a)
|
|
| 50 | + (ds [Occ=Dead] :: a)
|
|
| 51 | + (ds1 [Occ=Dead] :: [b]) ->
|
|
| 52 | + case == @(F a) $dEq x x of {
|
|
| 53 | + False -> T26117.$fCaList3;
|
|
| 54 | + True -> T26117.$fCaList2
|
|
| 55 | + }}]
|
|
| 56 | +T26117.$fCaList_$cop1
|
|
| 57 | + = \ (@a)
|
|
| 58 | + (@b)
|
|
| 59 | + ($dEq :: Eq (F a))
|
|
| 60 | + ($dD [Occ=Dead, OS=OneShot] :: D a b)
|
|
| 61 | + (x :: F a)
|
|
| 62 | + (ds [Occ=Dead] :: a)
|
|
| 63 | + (ds1 [Occ=Dead] :: [b]) ->
|
|
| 64 | + case == @(F a) $dEq x x of {
|
|
| 65 | + False -> T26117.$fCaList3;
|
|
| 66 | + True -> T26117.$fCaList2
|
|
| 67 | + }
|
|
| 68 | + |
|
| 133 | 69 | -- RHS size: {terms: 8, types: 7, coercions: 2, joins: 0/0}
|
| 134 | 70 | lvl :: forall b. F Int -> Int -> [b] -> Int
|
| 135 | -[GblId, Arity=3, Str=<1A><A><A>, Cpr=1, Unf=OtherCon []]
|
|
| 71 | +[GblId, Arity=3, Str=<SL><A><A>, Cpr=1, Unf=OtherCon []]
|
|
| 136 | 72 | lvl
|
| 137 | - = \ (@b) (x :: F Int) _ [Occ=Dead] _ [Occ=Dead] ->
|
|
| 73 | + = \ (@b)
|
|
| 74 | + (x :: F Int)
|
|
| 75 | + (ds [Occ=Dead] :: Int)
|
|
| 76 | + (ds1 [Occ=Dead] :: [b]) ->
|
|
| 138 | 77 | case x `cast` (Sub T26117.D:R:FInt :: F Int ~R# Bool) of lwild
|
| 139 | 78 | { __DEFAULT ->
|
| 140 | 79 | T26117.$fCaList2
|
| ... | ... | @@ -164,7 +103,7 @@ T26117.$fCaList_$s$fCaList [InlPrag=CONLIKE] |
| 164 | 103 | Unf=DFun: \ (@b) ($dD :: D Int b) ->
|
| 165 | 104 | T26117.C:C TYPE: Int
|
| 166 | 105 | TYPE: [b]
|
| 167 | - \ (x :: F Int) _ [Occ=Dead] _ [Occ=Dead] ->
|
|
| 106 | + \ (x :: F Int) (ds [Occ=Dead] :: Int) (ds1 [Occ=Dead] :: [b]) ->
|
|
| 168 | 107 | case GHC.Internal.Prim.dataToTagSmall#
|
| 169 | 108 | @GHC.Internal.Types.Lifted
|
| 170 | 109 | @Bool
|
| ... | ... | @@ -187,19 +126,10 @@ T26117.$fCaList_$s$fCaList [InlPrag=CONLIKE] |
| 187 | 126 | @GHC.Internal.Types.LiftedRep
|
| 188 | 127 | @(F Int -> Int -> [b] -> Int)
|
| 189 | 128 | "T26117.hs:17:10-37|\CANop2\EM"#]
|
| 190 | -T26117.$fCaList_$s$fCaList = \ (@b) _ [Occ=Dead] -> lvl2 @b
|
|
| 191 | - |
|
| 192 | --- RHS size: {terms: 4, types: 9, coercions: 0, joins: 0/0}
|
|
| 193 | -lvl3 :: forall b a. F a -> a -> [b] -> Int
|
|
| 194 | -[GblId, Str=b, Cpr=b]
|
|
| 195 | -lvl3
|
|
| 196 | - = \ (@b) (@a) ->
|
|
| 197 | - GHC.Internal.Control.Exception.Base.noMethodBindingError
|
|
| 198 | - @GHC.Internal.Types.LiftedRep
|
|
| 199 | - @(F a -> a -> [b] -> Int)
|
|
| 200 | - T26117.$fCaList1
|
|
| 129 | +T26117.$fCaList_$s$fCaList
|
|
| 130 | + = \ (@b) ($dD [Occ=Dead] :: D Int b) -> lvl2 @b
|
|
| 201 | 131 | |
| 202 | --- RHS size: {terms: 18, types: 21, coercions: 0, joins: 0/0}
|
|
| 132 | +-- RHS size: {terms: 10, types: 20, coercions: 0, joins: 0/0}
|
|
| 203 | 133 | T26117.$fCaList [InlPrag=CONLIKE]
|
| 204 | 134 | :: forall a b. (Eq (F a), D a b) => C a [b]
|
| 205 | 135 | [GblId[DFunId],
|
| ... | ... | @@ -208,225 +138,203 @@ T26117.$fCaList [InlPrag=CONLIKE] |
| 208 | 138 | Unf=DFun: \ (@a) (@b) (v :: Eq (F a)) (v1 :: D a b) ->
|
| 209 | 139 | T26117.C:C TYPE: a
|
| 210 | 140 | TYPE: [b]
|
| 211 | - \ (x :: F a) _ [Occ=Dead] _ [Occ=Dead] ->
|
|
| 212 | - case == @(F a) v x x of {
|
|
| 213 | - False -> T26117.$fCaList3;
|
|
| 214 | - True -> T26117.$fCaList2
|
|
| 215 | - }
|
|
| 216 | - T26117.$fCaList_$cop2 @a @b v v1]
|
|
| 141 | + T26117.$fCaList_$cop1 @a @b v v1
|
|
| 142 | + GHC.Internal.Control.Exception.Base.noMethodBindingError
|
|
| 143 | + @GHC.Internal.Types.LiftedRep
|
|
| 144 | + @(F a -> a -> [b] -> Int)
|
|
| 145 | + T26117.$fCaList1]
|
|
| 217 | 146 | T26117.$fCaList
|
| 218 | - = \ (@a) (@b) ($dEq :: Eq (F a)) _ [Occ=Dead] ->
|
|
| 147 | + = \ (@a) (@b) ($dEq :: Eq (F a)) ($dD :: D a b) ->
|
|
| 219 | 148 | T26117.C:C
|
| 220 | 149 | @a
|
| 221 | 150 | @[b]
|
| 222 | - (\ (x :: F a) _ [Occ=Dead] _ [Occ=Dead] ->
|
|
| 223 | - case == @(F a) $dEq x x of {
|
|
| 224 | - False -> T26117.$fCaList3;
|
|
| 225 | - True -> T26117.$fCaList2
|
|
| 226 | - })
|
|
| 227 | - (lvl3 @b @a)
|
|
| 151 | + (T26117.$fCaList_$cop1 @a @b $dEq $dD)
|
|
| 152 | + (GHC.Internal.Control.Exception.Base.noMethodBindingError
|
|
| 153 | + @GHC.Internal.Types.LiftedRep
|
|
| 154 | + @(F a -> a -> [b] -> Int)
|
|
| 155 | + T26117.$fCaList1)
|
|
| 228 | 156 | |
| 229 | 157 | -- RHS size: {terms: 1, types: 0, coercions: 0, joins: 0/0}
|
| 230 | -T26117.$trModule4 :: GHC.Internal.Prim.Addr#
|
|
| 231 | -[GblId,
|
|
| 232 | - Unf=Unf{Src=<vanilla>, TopLvl=True,
|
|
| 233 | - Value=True, ConLike=True, WorkFree=True, Expandable=True,
|
|
| 234 | - Guidance=IF_ARGS [] 20 0}]
|
|
| 235 | -T26117.$trModule4 = "main"#
|
|
| 158 | +$trModule1 :: GHC.Internal.Prim.Addr#
|
|
| 159 | +[GblId, Unf=OtherCon []]
|
|
| 160 | +$trModule1 = "main"#
|
|
| 236 | 161 | |
| 237 | 162 | -- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0}
|
| 238 | -T26117.$trModule3 :: GHC.Internal.Types.TrName
|
|
| 239 | -[GblId,
|
|
| 240 | - Unf=Unf{Src=<vanilla>, TopLvl=True,
|
|
| 241 | - Value=True, ConLike=True, WorkFree=True, Expandable=True,
|
|
| 242 | - Guidance=IF_ARGS [] 10 10}]
|
|
| 243 | -T26117.$trModule3 = GHC.Internal.Types.TrNameS T26117.$trModule4
|
|
| 163 | +$trModule2 :: GHC.Internal.Types.TrName
|
|
| 164 | +[GblId, Unf=OtherCon []]
|
|
| 165 | +$trModule2 = GHC.Internal.Types.TrNameS $trModule1
|
|
| 244 | 166 | |
| 245 | 167 | -- RHS size: {terms: 1, types: 0, coercions: 0, joins: 0/0}
|
| 246 | -T26117.$trModule2 :: GHC.Internal.Prim.Addr#
|
|
| 247 | -[GblId,
|
|
| 248 | - Unf=Unf{Src=<vanilla>, TopLvl=True,
|
|
| 249 | - Value=True, ConLike=True, WorkFree=True, Expandable=True,
|
|
| 250 | - Guidance=IF_ARGS [] 30 0}]
|
|
| 251 | -T26117.$trModule2 = "T26117"#
|
|
| 168 | +$trModule3 :: GHC.Internal.Prim.Addr#
|
|
| 169 | +[GblId, Unf=OtherCon []]
|
|
| 170 | +$trModule3 = "T26117"#
|
|
| 252 | 171 | |
| 253 | 172 | -- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0}
|
| 254 | -T26117.$trModule1 :: GHC.Internal.Types.TrName
|
|
| 255 | -[GblId,
|
|
| 256 | - Unf=Unf{Src=<vanilla>, TopLvl=True,
|
|
| 257 | - Value=True, ConLike=True, WorkFree=True, Expandable=True,
|
|
| 258 | - Guidance=IF_ARGS [] 10 10}]
|
|
| 259 | -T26117.$trModule1 = GHC.Internal.Types.TrNameS T26117.$trModule2
|
|
| 173 | +$trModule4 :: GHC.Internal.Types.TrName
|
|
| 174 | +[GblId, Unf=OtherCon []]
|
|
| 175 | +$trModule4 = GHC.Internal.Types.TrNameS $trModule3
|
|
| 260 | 176 | |
| 261 | 177 | -- RHS size: {terms: 3, types: 0, coercions: 0, joins: 0/0}
|
| 262 | -T26117.$trModule :: GHC.Internal.Types.Module
|
|
| 263 | -[GblId,
|
|
| 264 | - Unf=Unf{Src=<vanilla>, TopLvl=True,
|
|
| 265 | - Value=True, ConLike=True, WorkFree=True, Expandable=True,
|
|
| 266 | - Guidance=IF_ARGS [] 10 10}]
|
|
| 267 | -T26117.$trModule
|
|
| 268 | - = GHC.Internal.Types.Module T26117.$trModule3 T26117.$trModule1
|
|
| 178 | +T26117.$trModule [InlPrag=[~]] :: GHC.Internal.Types.Module
|
|
| 179 | +[GblId, Unf=OtherCon []]
|
|
| 180 | +T26117.$trModule = GHC.Internal.Types.Module $trModule2 $trModule4
|
|
| 269 | 181 | |
| 270 | 182 | -- RHS size: {terms: 3, types: 0, coercions: 0, joins: 0/0}
|
| 271 | 183 | $krep :: GHC.Internal.Types.KindRep
|
| 272 | 184 | [GblId, Unf=OtherCon []]
|
| 273 | 185 | $krep
|
| 274 | 186 | = GHC.Internal.Types.KindRepFun
|
| 275 | - GHC.Internal.Types.krep$* GHC.Internal.Types.krep$Constraint
|
|
| 187 | + GHC.Internal.Types.KindRepType GHC.Internal.Types.KindRepConstraint
|
|
| 276 | 188 | |
| 277 | 189 | -- RHS size: {terms: 3, types: 0, coercions: 0, joins: 0/0}
|
| 278 | -T26117.$tcC1 [InlPrag=[~]] :: GHC.Internal.Types.KindRep
|
|
| 190 | +$krep1 :: GHC.Internal.Types.KindRep
|
|
| 279 | 191 | [GblId, Unf=OtherCon []]
|
| 280 | -T26117.$tcC1
|
|
| 281 | - = GHC.Internal.Types.KindRepFun GHC.Internal.Types.krep$* $krep
|
|
| 192 | +$krep1
|
|
| 193 | + = GHC.Internal.Types.KindRepFun
|
|
| 194 | + GHC.Internal.Types.KindRepType $krep
|
|
| 282 | 195 | |
| 283 | 196 | -- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0}
|
| 284 | -$krep1 :: GHC.Internal.Types.KindRep
|
|
| 197 | +$krep2 :: GHC.Internal.Types.KindRep
|
|
| 285 | 198 | [GblId, Unf=OtherCon []]
|
| 286 | -$krep1 = GHC.Internal.Types.KindRepVar 1#
|
|
| 199 | +$krep2 = GHC.Internal.Types.KindRepVar 1#
|
|
| 287 | 200 | |
| 288 | 201 | -- RHS size: {terms: 3, types: 0, coercions: 0, joins: 0/0}
|
| 289 | -$krep2 :: GHC.Internal.Types.KindRep
|
|
| 202 | +$krep3 :: GHC.Internal.Types.KindRep
|
|
| 290 | 203 | [GblId, Unf=OtherCon []]
|
| 291 | -$krep2 = GHC.Internal.Types.KindRepFun $krep1 $krep1
|
|
| 204 | +$krep3 = GHC.Internal.Types.KindRepFun $krep2 $krep2
|
|
| 292 | 205 | |
| 293 | 206 | -- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0}
|
| 294 | -$krep3 :: GHC.Internal.Types.KindRep
|
|
| 207 | +$krep4 :: GHC.Internal.Types.KindRep
|
|
| 295 | 208 | [GblId, Unf=OtherCon []]
|
| 296 | -$krep3 = GHC.Internal.Types.KindRepVar 0#
|
|
| 209 | +$krep4 = GHC.Internal.Types.KindRepVar 0#
|
|
| 297 | 210 | |
| 298 | 211 | -- RHS size: {terms: 3, types: 0, coercions: 0, joins: 0/0}
|
| 299 | -$krep4 :: GHC.Internal.Types.KindRep
|
|
| 212 | +$krep5 :: GHC.Internal.Types.KindRep
|
|
| 300 | 213 | [GblId, Unf=OtherCon []]
|
| 301 | -$krep4 = GHC.Internal.Types.KindRepFun $krep3 $krep2
|
|
| 214 | +$krep5 = GHC.Internal.Types.KindRepFun $krep4 $krep3
|
|
| 302 | 215 | |
| 303 | 216 | -- RHS size: {terms: 1, types: 0, coercions: 0, joins: 0/0}
|
| 304 | -T26117.$tcD2 :: GHC.Internal.Prim.Addr#
|
|
| 305 | -[GblId,
|
|
| 306 | - Unf=Unf{Src=<vanilla>, TopLvl=True,
|
|
| 307 | - Value=True, ConLike=True, WorkFree=True, Expandable=True,
|
|
| 308 | - Guidance=IF_ARGS [] 20 0}]
|
|
| 309 | -T26117.$tcD2 = "D"#
|
|
| 217 | +$tcD1 :: GHC.Internal.Prim.Addr#
|
|
| 218 | +[GblId, Unf=OtherCon []]
|
|
| 219 | +$tcD1 = "D"#
|
|
| 310 | 220 | |
| 311 | 221 | -- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0}
|
| 312 | -T26117.$tcD1 :: GHC.Internal.Types.TrName
|
|
| 313 | -[GblId,
|
|
| 314 | - Unf=Unf{Src=<vanilla>, TopLvl=True,
|
|
| 315 | - Value=True, ConLike=True, WorkFree=True, Expandable=True,
|
|
| 316 | - Guidance=IF_ARGS [] 10 10}]
|
|
| 317 | -T26117.$tcD1 = GHC.Internal.Types.TrNameS T26117.$tcD2
|
|
| 222 | +$tcD2 :: GHC.Internal.Types.TrName
|
|
| 223 | +[GblId, Unf=OtherCon []]
|
|
| 224 | +$tcD2 = GHC.Internal.Types.TrNameS $tcD1
|
|
| 318 | 225 | |
| 319 | 226 | -- RHS size: {terms: 7, types: 0, coercions: 0, joins: 0/0}
|
| 320 | -T26117.$tcD :: GHC.Internal.Types.TyCon
|
|
| 321 | -[GblId,
|
|
| 322 | - Unf=Unf{Src=<vanilla>, TopLvl=True,
|
|
| 323 | - Value=True, ConLike=True, WorkFree=True, Expandable=True,
|
|
| 324 | - Guidance=IF_ARGS [] 10 10}]
|
|
| 227 | +T26117.$tcD [InlPrag=[~]] :: GHC.Internal.Types.TyCon
|
|
| 228 | +[GblId, Unf=OtherCon []]
|
|
| 325 | 229 | T26117.$tcD
|
| 326 | 230 | = GHC.Internal.Types.TyCon
|
| 327 | 231 | 18427868686024955676#Word64
|
| 328 | 232 | 4087453451394481638#Word64
|
| 329 | 233 | T26117.$trModule
|
| 330 | - T26117.$tcD1
|
|
| 234 | + $tcD2
|
|
| 331 | 235 | 0#
|
| 332 | - T26117.$tcC1
|
|
| 236 | + $krep1
|
|
| 333 | 237 | |
| 334 | 238 | -- RHS size: {terms: 3, types: 2, coercions: 0, joins: 0/0}
|
| 335 | -$krep5 :: [GHC.Internal.Types.KindRep]
|
|
| 239 | +$krep6 :: [GHC.Internal.Types.KindRep]
|
|
| 336 | 240 | [GblId, Unf=OtherCon []]
|
| 337 | -$krep5
|
|
| 241 | +$krep6
|
|
| 338 | 242 | = GHC.Internal.Types.:
|
| 339 | 243 | @GHC.Internal.Types.KindRep
|
| 340 | - $krep1
|
|
| 244 | + $krep2
|
|
| 341 | 245 | (GHC.Internal.Types.[] @GHC.Internal.Types.KindRep)
|
| 342 | 246 | |
| 343 | 247 | -- RHS size: {terms: 3, types: 1, coercions: 0, joins: 0/0}
|
| 344 | -$krep6 :: [GHC.Internal.Types.KindRep]
|
|
| 248 | +$krep7 :: [GHC.Internal.Types.KindRep]
|
|
| 345 | 249 | [GblId, Unf=OtherCon []]
|
| 346 | -$krep6
|
|
| 347 | - = GHC.Internal.Types.: @GHC.Internal.Types.KindRep $krep3 $krep5
|
|
| 250 | +$krep7
|
|
| 251 | + = GHC.Internal.Types.: @GHC.Internal.Types.KindRep $krep4 $krep6
|
|
| 348 | 252 | |
| 349 | 253 | -- RHS size: {terms: 3, types: 0, coercions: 0, joins: 0/0}
|
| 350 | -$krep7 :: GHC.Internal.Types.KindRep
|
|
| 254 | +$krep8 :: GHC.Internal.Types.KindRep
|
|
| 351 | 255 | [GblId, Unf=OtherCon []]
|
| 352 | -$krep7 = GHC.Internal.Types.KindRepTyConApp T26117.$tcD $krep6
|
|
| 256 | +$krep8 = GHC.Internal.Types.KindRepTyConApp T26117.$tcD $krep7
|
|
| 353 | 257 | |
| 354 | 258 | -- RHS size: {terms: 3, types: 0, coercions: 0, joins: 0/0}
|
| 355 | -$krep8 :: GHC.Internal.Types.KindRep
|
|
| 259 | +$krep9 :: GHC.Internal.Types.KindRep
|
|
| 356 | 260 | [GblId, Unf=OtherCon []]
|
| 357 | -$krep8 = GHC.Internal.Types.KindRepFun $krep4 $krep7
|
|
| 261 | +$krep9 = GHC.Internal.Types.KindRepFun $krep5 $krep8
|
|
| 358 | 262 | |
| 359 | 263 | -- RHS size: {terms: 3, types: 0, coercions: 0, joins: 0/0}
|
| 360 | -T26117.$tc'C:D1 [InlPrag=[~]] :: GHC.Internal.Types.KindRep
|
|
| 264 | +$krep10 :: GHC.Internal.Types.KindRep
|
|
| 361 | 265 | [GblId, Unf=OtherCon []]
|
| 362 | -T26117.$tc'C:D1 = GHC.Internal.Types.KindRepFun $krep4 $krep8
|
|
| 266 | +$krep10 = GHC.Internal.Types.KindRepFun $krep5 $krep9
|
|
| 363 | 267 | |
| 364 | 268 | -- RHS size: {terms: 1, types: 0, coercions: 0, joins: 0/0}
|
| 365 | -T26117.$tc'C:D3 :: GHC.Internal.Prim.Addr#
|
|
| 366 | -[GblId,
|
|
| 367 | - Unf=Unf{Src=<vanilla>, TopLvl=True,
|
|
| 368 | - Value=True, ConLike=True, WorkFree=True, Expandable=True,
|
|
| 369 | - Guidance=IF_ARGS [] 20 0}]
|
|
| 370 | -T26117.$tc'C:D3 = "'C:D"#
|
|
| 269 | +$tc'C:D1 :: GHC.Internal.Prim.Addr#
|
|
| 270 | +[GblId, Unf=OtherCon []]
|
|
| 271 | +$tc'C:D1 = "'C:D"#
|
|
| 371 | 272 | |
| 372 | 273 | -- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0}
|
| 373 | -T26117.$tc'C:D2 :: GHC.Internal.Types.TrName
|
|
| 374 | -[GblId,
|
|
| 375 | - Unf=Unf{Src=<vanilla>, TopLvl=True,
|
|
| 376 | - Value=True, ConLike=True, WorkFree=True, Expandable=True,
|
|
| 377 | - Guidance=IF_ARGS [] 10 10}]
|
|
| 378 | -T26117.$tc'C:D2 = GHC.Internal.Types.TrNameS T26117.$tc'C:D3
|
|
| 274 | +$tc'C:D2 :: GHC.Internal.Types.TrName
|
|
| 275 | +[GblId, Unf=OtherCon []]
|
|
| 276 | +$tc'C:D2 = GHC.Internal.Types.TrNameS $tc'C:D1
|
|
| 379 | 277 | |
| 380 | 278 | -- RHS size: {terms: 7, types: 0, coercions: 0, joins: 0/0}
|
| 381 | -T26117.$tc'C:D :: GHC.Internal.Types.TyCon
|
|
| 382 | -[GblId,
|
|
| 383 | - Unf=Unf{Src=<vanilla>, TopLvl=True,
|
|
| 384 | - Value=True, ConLike=True, WorkFree=True, Expandable=True,
|
|
| 385 | - Guidance=IF_ARGS [] 10 10}]
|
|
| 279 | +T26117.$tc'C:D [InlPrag=[~]] :: GHC.Internal.Types.TyCon
|
|
| 280 | +[GblId, Unf=OtherCon []]
|
|
| 386 | 281 | T26117.$tc'C:D
|
| 387 | 282 | = GHC.Internal.Types.TyCon
|
| 388 | 283 | 14714477993590114477#Word64
|
| 389 | 284 | 17388374250742016296#Word64
|
| 390 | 285 | T26117.$trModule
|
| 391 | - T26117.$tc'C:D2
|
|
| 286 | + $tc'C:D2
|
|
| 392 | 287 | 2#
|
| 393 | - T26117.$tc'C:D1
|
|
| 288 | + $krep10
|
|
| 394 | 289 | |
| 395 | 290 | -- RHS size: {terms: 1, types: 0, coercions: 0, joins: 0/0}
|
| 396 | -T26117.$tcC3 :: GHC.Internal.Prim.Addr#
|
|
| 397 | -[GblId,
|
|
| 398 | - Unf=Unf{Src=<vanilla>, TopLvl=True,
|
|
| 399 | - Value=True, ConLike=True, WorkFree=True, Expandable=True,
|
|
| 400 | - Guidance=IF_ARGS [] 20 0}]
|
|
| 401 | -T26117.$tcC3 = "C"#
|
|
| 291 | +$tcC1 :: GHC.Internal.Prim.Addr#
|
|
| 292 | +[GblId, Unf=OtherCon []]
|
|
| 293 | +$tcC1 = "C"#
|
|
| 402 | 294 | |
| 403 | 295 | -- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0}
|
| 404 | -T26117.$tcC2 :: GHC.Internal.Types.TrName
|
|
| 405 | -[GblId,
|
|
| 406 | - Unf=Unf{Src=<vanilla>, TopLvl=True,
|
|
| 407 | - Value=True, ConLike=True, WorkFree=True, Expandable=True,
|
|
| 408 | - Guidance=IF_ARGS [] 10 10}]
|
|
| 409 | -T26117.$tcC2 = GHC.Internal.Types.TrNameS T26117.$tcC3
|
|
| 296 | +$tcC2 :: GHC.Internal.Types.TrName
|
|
| 297 | +[GblId, Unf=OtherCon []]
|
|
| 298 | +$tcC2 = GHC.Internal.Types.TrNameS $tcC1
|
|
| 410 | 299 | |
| 411 | 300 | -- RHS size: {terms: 7, types: 0, coercions: 0, joins: 0/0}
|
| 412 | -T26117.$tcC :: GHC.Internal.Types.TyCon
|
|
| 413 | -[GblId,
|
|
| 414 | - Unf=Unf{Src=<vanilla>, TopLvl=True,
|
|
| 415 | - Value=True, ConLike=True, WorkFree=True, Expandable=True,
|
|
| 416 | - Guidance=IF_ARGS [] 10 10}]
|
|
| 301 | +T26117.$tcC [InlPrag=[~]] :: GHC.Internal.Types.TyCon
|
|
| 302 | +[GblId, Unf=OtherCon []]
|
|
| 417 | 303 | T26117.$tcC
|
| 418 | 304 | = GHC.Internal.Types.TyCon
|
| 419 | 305 | 6116531860557468422#Word64
|
| 420 | 306 | 17953227584944457497#Word64
|
| 421 | 307 | T26117.$trModule
|
| 422 | - T26117.$tcC2
|
|
| 308 | + $tcC2
|
|
| 423 | 309 | 0#
|
| 424 | - T26117.$tcC1
|
|
| 310 | + $krep1
|
|
| 425 | 311 | |
| 426 | 312 | |
| 427 | 313 | ------ Local rules for imported ids --------
|
| 314 | +"USPEC $cop1 @Int @_"
|
|
| 315 | + forall (@b) ($dEq [Occ=Dead] :: Eq (F Int)) ($dD :: D Int b).
|
|
| 316 | + T26117.$fCaList_$cop1 @Int @b $dEq $dD
|
|
| 317 | + = \ (x :: F Int) (ds [Occ=Dead] :: Int) (ds1 [Occ=Dead] :: [b]) ->
|
|
| 318 | + case GHC.Internal.Prim.dataToTagSmall#
|
|
| 319 | + @GHC.Internal.Types.Lifted
|
|
| 320 | + @Bool
|
|
| 321 | + (x `cast` (Sub T26117.D:R:FInt :: F Int ~R# Bool))
|
|
| 322 | + of a# [Occ=Once1]
|
|
| 323 | + { __DEFAULT ->
|
|
| 324 | + case GHC.Internal.Prim.dataToTagSmall#
|
|
| 325 | + @GHC.Internal.Types.Lifted
|
|
| 326 | + @Bool
|
|
| 327 | + (x `cast` (Sub T26117.D:R:FInt :: F Int ~R# Bool))
|
|
| 328 | + of b# [Occ=Once1]
|
|
| 329 | + { __DEFAULT ->
|
|
| 330 | + case GHC.Internal.Prim.==# a# b# of {
|
|
| 331 | + __DEFAULT -> GHC.Internal.Types.I# 4#;
|
|
| 332 | + 1# -> GHC.Internal.Types.I# 3#
|
|
| 333 | + }
|
|
| 334 | + }
|
|
| 335 | + }
|
|
| 428 | 336 | "USPEC $fCaList @Int @_"
|
| 429 | - forall (@b) ($dD :: D Int b) ($dEq :: Eq (F Int)).
|
|
| 337 | + forall (@b) ($dEq [Occ=Dead] :: Eq (F Int)) ($dD :: D Int b).
|
|
| 430 | 338 | T26117.$fCaList @Int @b $dEq $dD
|
| 431 | 339 | = T26117.$fCaList_$s$fCaList @b $dD
|
| 432 | 340 |