Add 'addWordC#' PrimOp
authorSebastian Graf <sebastian.graf@kit.edu>
Sat, 5 May 2018 17:30:32 +0000 (13:30 -0400)
committerBen Gamari <ben@smart-cactus.org>
Sat, 5 May 2018 21:06:35 +0000 (17:06 -0400)
This is mostly for congruence with 'subWordC#' and '{add,sub}IntC#'.
I found 'plusWord2#' while implementing this, which both lacks
documentation and has a slightly different specification than
'addWordC#', which means the generic implementation is unnecessarily
complex.

While I was at it, I also added lacking meta-information on PrimOps
and refactored 'subWordC#'s generic implementation to be branchless.

Reviewers: bgamari, simonmar, jrtc27, dfeuer

Reviewed By: bgamari, dfeuer

Subscribers: dfeuer, thomie, carter

Differential Revision: https://phabricator.haskell.org/D4592

74 files changed:
compiler/cmm/CmmMachOp.hs
compiler/cmm/PprC.hs
compiler/codeGen/StgCmmPrim.hs
compiler/llvmGen/LlvmCodeGen/CodeGen.hs
compiler/nativeGen/PPC/CodeGen.hs
compiler/nativeGen/SPARC/CodeGen.hs
compiler/nativeGen/X86/CodeGen.hs
compiler/prelude/primops.txt.pp
docs/users_guide/8.6.1-notes.rst
libraries/ghc-compact/ghc-compact.cabal
libraries/ghc-prim/changelog.md
libraries/ghc-prim/ghc-prim.cabal
testsuite/tests/ado/ado004.stderr
testsuite/tests/backpack/should_compile/bkp16.stderr
testsuite/tests/determinism/determ021/determ021.stdout
testsuite/tests/driver/json2.stderr
testsuite/tests/indexed-types/should_compile/T3017.stderr
testsuite/tests/partial-sigs/should_compile/ADT.stderr
testsuite/tests/partial-sigs/should_compile/AddAndOr1.stderr
testsuite/tests/partial-sigs/should_compile/AddAndOr2.stderr
testsuite/tests/partial-sigs/should_compile/AddAndOr3.stderr
testsuite/tests/partial-sigs/should_compile/AddAndOr4.stderr
testsuite/tests/partial-sigs/should_compile/AddAndOr5.stderr
testsuite/tests/partial-sigs/should_compile/AddAndOr6.stderr
testsuite/tests/partial-sigs/should_compile/BoolToBool.stderr
testsuite/tests/partial-sigs/should_compile/DataFamilyInstanceLHS.stderr
testsuite/tests/partial-sigs/should_compile/Defaulting1MROn.stderr
testsuite/tests/partial-sigs/should_compile/Defaulting2MROff.stderr
testsuite/tests/partial-sigs/should_compile/Defaulting2MROn.stderr
testsuite/tests/partial-sigs/should_compile/Either.stderr
testsuite/tests/partial-sigs/should_compile/EqualityConstraint.stderr
testsuite/tests/partial-sigs/should_compile/Every.stderr
testsuite/tests/partial-sigs/should_compile/EveryNamed.stderr
testsuite/tests/partial-sigs/should_compile/ExpressionSig.stderr
testsuite/tests/partial-sigs/should_compile/ExpressionSigNamed.stderr
testsuite/tests/partial-sigs/should_compile/ExtraConstraints1.stderr
testsuite/tests/partial-sigs/should_compile/ExtraConstraints2.stderr
testsuite/tests/partial-sigs/should_compile/ExtraConstraints3.stderr
testsuite/tests/partial-sigs/should_compile/ExtraNumAMROff.stderr
testsuite/tests/partial-sigs/should_compile/ExtraNumAMROn.stderr
testsuite/tests/partial-sigs/should_compile/Forall1.stderr
testsuite/tests/partial-sigs/should_compile/GenNamed.stderr
testsuite/tests/partial-sigs/should_compile/HigherRank1.stderr
testsuite/tests/partial-sigs/should_compile/HigherRank2.stderr
testsuite/tests/partial-sigs/should_compile/LocalDefinitionBug.stderr
testsuite/tests/partial-sigs/should_compile/Meltdown.stderr
testsuite/tests/partial-sigs/should_compile/MonoLocalBinds.stderr
testsuite/tests/partial-sigs/should_compile/NamedTyVar.stderr
testsuite/tests/partial-sigs/should_compile/NamedWildcardInDataFamilyInstanceLHS.stderr
testsuite/tests/partial-sigs/should_compile/NamedWildcardInTypeFamilyInstanceLHS.stderr
testsuite/tests/partial-sigs/should_compile/ParensAroundContext.stderr
testsuite/tests/partial-sigs/should_compile/PatBind.stderr
testsuite/tests/partial-sigs/should_compile/PatBind2.stderr
testsuite/tests/partial-sigs/should_compile/PatternSig.stderr
testsuite/tests/partial-sigs/should_compile/Recursive.stderr
testsuite/tests/partial-sigs/should_compile/ScopedNamedWildcards.stderr
testsuite/tests/partial-sigs/should_compile/ScopedNamedWildcardsGood.stderr
testsuite/tests/partial-sigs/should_compile/ShowNamed.stderr
testsuite/tests/partial-sigs/should_compile/SimpleGen.stderr
testsuite/tests/partial-sigs/should_compile/SkipMany.stderr
testsuite/tests/partial-sigs/should_compile/SomethingShowable.stderr
testsuite/tests/partial-sigs/should_compile/TypeFamilyInstanceLHS.stderr
testsuite/tests/partial-sigs/should_compile/Uncurry.stderr
testsuite/tests/partial-sigs/should_compile/UncurryNamed.stderr
testsuite/tests/partial-sigs/should_compile/WarningWildcardInstantiations.stderr
testsuite/tests/roles/should_compile/Roles1.stderr
testsuite/tests/roles/should_compile/Roles14.stderr
testsuite/tests/roles/should_compile/Roles2.stderr
testsuite/tests/roles/should_compile/Roles3.stderr
testsuite/tests/roles/should_compile/Roles4.stderr
testsuite/tests/roles/should_compile/T8958.stderr
testsuite/tests/th/TH_Roles2.stderr
testsuite/tests/typecheck/should_compile/T12763.stderr
testsuite/tests/typecheck/should_compile/tc231.stderr

index 9203911..15a5827 100644 (file)
@@ -556,6 +556,7 @@ data CallishMachOp
   | MO_U_QuotRem Width
   | MO_U_QuotRem2 Width
   | MO_Add2      Width
+  | MO_AddWordC  Width
   | MO_SubWordC  Width
   | MO_AddIntC   Width
   | MO_SubIntC   Width
index 76e4d4c..1e50c85 100644 (file)
@@ -803,6 +803,7 @@ pprCallishMachOp_for_C mop
         MO_U_QuotRem  {} -> unsupported
         MO_U_QuotRem2 {} -> unsupported
         MO_Add2       {} -> unsupported
+        MO_AddWordC   {} -> unsupported
         MO_SubWordC   {} -> unsupported
         MO_AddIntC    {} -> unsupported
         MO_SubIntC    {} -> unsupported
index 809dc55..fe89955 100644 (file)
@@ -907,6 +907,11 @@ callishPrimOpSupported dflags op
                          || llvm      -> Left (MO_Add2       (wordWidth dflags))
                      | otherwise      -> Right genericWordAdd2Op
 
+      WordAddCOp     | (ncg && (x86ish
+                                || ppc))
+                         || llvm      -> Left (MO_AddWordC   (wordWidth dflags))
+                     | otherwise      -> Right genericWordAddCOp
+
       WordSubCOp     | (ncg && (x86ish
                                 || ppc))
                          || llvm      -> Left (MO_SubWordC   (wordWidth dflags))
@@ -1043,17 +1048,64 @@ genericWordAdd2Op [res_h, res_l] [arg_x, arg_y]
                    (bottomHalf (CmmReg (CmmLocal r1))))]
 genericWordAdd2Op _ _ = panic "genericWordAdd2Op"
 
+-- | Implements branchless recovery of the carry flag @c@ by checking the
+-- leftmost bits of both inputs @a@ and @b@ and result @r = a + b@:
+--
+-- @
+--    c = a&b | (a|b)&~r
+-- @
+--
+-- https://brodowsky.it-sky.net/2015/04/02/how-to-recover-the-carry-bit/
+genericWordAddCOp :: GenericOp
+genericWordAddCOp [res_r, res_c] [aa, bb]
+ = do dflags <- getDynFlags
+      emit $ catAGraphs [
+        mkAssign (CmmLocal res_r) (CmmMachOp (mo_wordAdd dflags) [aa,bb]),
+        mkAssign (CmmLocal res_c) $
+          CmmMachOp (mo_wordUShr dflags) [
+            CmmMachOp (mo_wordOr dflags) [
+              CmmMachOp (mo_wordAnd dflags) [aa,bb],
+              CmmMachOp (mo_wordAnd dflags) [
+                CmmMachOp (mo_wordOr dflags) [aa,bb],
+                CmmMachOp (mo_wordNot dflags) [CmmReg (CmmLocal res_r)]
+              ]
+            ],
+            mkIntExpr dflags (wORD_SIZE_IN_BITS dflags - 1)
+          ]
+        ]
+genericWordAddCOp _ _ = panic "genericWordAddCOp"
+
+-- | Implements branchless recovery of the carry flag @c@ by checking the
+-- leftmost bits of both inputs @a@ and @b@ and result @r = a - b@:
+--
+-- @
+--    c = ~a&b | (~a|b)&r
+-- @
+--
+-- https://brodowsky.it-sky.net/2015/04/02/how-to-recover-the-carry-bit/
 genericWordSubCOp :: GenericOp
-genericWordSubCOp [res_r, res_c] [aa, bb] = do
-  dflags <- getDynFlags
-  emit $ catAGraphs
-    [ -- Put the result into 'res_r'.
-      mkAssign (CmmLocal res_r) $
-        CmmMachOp (mo_wordSub dflags) [aa, bb]
-      -- Set 'res_c' to 1 if 'bb > aa' and to 0 otherwise.
-    , mkAssign (CmmLocal res_c) $
-        CmmMachOp (mo_wordUGt dflags) [bb, aa]
-    ]
+genericWordSubCOp [res_r, res_c] [aa, bb]
+ = do dflags <- getDynFlags
+      emit $ catAGraphs [
+        mkAssign (CmmLocal res_r) (CmmMachOp (mo_wordSub dflags) [aa,bb]),
+        mkAssign (CmmLocal res_c) $
+          CmmMachOp (mo_wordUShr dflags) [
+            CmmMachOp (mo_wordOr dflags) [
+              CmmMachOp (mo_wordAnd dflags) [
+                CmmMachOp (mo_wordNot dflags) [aa],
+                bb
+              ],
+              CmmMachOp (mo_wordAnd dflags) [
+                CmmMachOp (mo_wordOr dflags) [
+                  CmmMachOp (mo_wordNot dflags) [aa],
+                  bb
+                ],
+                CmmReg (CmmLocal res_r)
+              ]
+            ],
+            mkIntExpr dflags (wORD_SIZE_IN_BITS dflags - 1)
+          ]
+        ]
 genericWordSubCOp _ _ = panic "genericWordSubCOp"
 
 genericIntAddCOp :: GenericOp
index e812dd4..9be0876 100644 (file)
@@ -377,6 +377,9 @@ genCall t@(PrimTarget (MO_SubIntC w)) [dstV, dstO] [lhs, rhs] =
 genCall t@(PrimTarget (MO_Add2 w)) [dstO, dstV] [lhs, rhs] =
     genCallWithOverflow t w [dstV, dstO] [lhs, rhs]
 
+genCall t@(PrimTarget (MO_AddWordC w)) [dstV, dstO] [lhs, rhs] =
+    genCallWithOverflow t w [dstV, dstO] [lhs, rhs]
+
 genCall t@(PrimTarget (MO_SubWordC w)) [dstV, dstO] [lhs, rhs] =
     genCallWithOverflow t w [dstV, dstO] [lhs, rhs]
 
@@ -490,6 +493,7 @@ genCallWithOverflow t@(PrimTarget op) w [dstV, dstO] [lhs, rhs] = do
     let valid = op `elem`   [ MO_Add2 w
                             , MO_AddIntC w
                             , MO_SubIntC w
+                            , MO_AddWordC w
                             , MO_SubWordC w
                             ]
     MASSERT(valid)
@@ -800,6 +804,8 @@ cmmPrimOpFunctions mop = do
                              ++ showSDoc dflags (ppr $ widthToLlvmInt w)
     MO_Add2 w       -> fsLit $ "llvm.uadd.with.overflow."
                              ++ showSDoc dflags (ppr $ widthToLlvmInt w)
+    MO_AddWordC w   -> fsLit $ "llvm.usub.with.overflow."
+                             ++ showSDoc dflags (ppr $ widthToLlvmInt w)
     MO_SubWordC w   -> fsLit $ "llvm.usub.with.overflow."
                              ++ showSDoc dflags (ppr $ widthToLlvmInt w)
 
index 7c345f2..e53d994 100644 (file)
@@ -1333,6 +1333,7 @@ genCCall target dest_regs argsAndHints
         PrimTarget (MO_U_Mul2 width) -> multOp2 platform width dest_regs
                                                 argsAndHints
         PrimTarget (MO_Add2 _) -> add2Op platform dest_regs argsAndHints
+        PrimTarget (MO_AddWordC _) -> addcOp platform dest_regs argsAndHints
         PrimTarget (MO_SubWordC _) -> subcOp platform dest_regs argsAndHints
         PrimTarget (MO_AddIntC width) -> addSubCOp ADDO platform width
                                                    dest_regs argsAndHints
@@ -1523,6 +1524,11 @@ genCCall target dest_regs argsAndHints
               add2Op _ _ _
                 = panic "genCCall: Wrong number of arguments/results for add2"
 
+              addcOp platform [res_r, res_c] [arg_x, arg_y]
+                = add2Op platform [res_c {-hi-}, res_r {-lo-}] [arg_x, arg_y]
+              addcOp _ _ _
+                = panic "genCCall: Wrong number of arguments/results for addc"
+
               -- PowerPC subfc sets the carry for rT = ~(rA) + rB + 1,
               -- which is 0 for borrow and 1 otherwise. We need 1 and 0
               -- so xor with 1.
@@ -2025,6 +2031,7 @@ genCCall' dflags gcp target dest_regs args
                     MO_U_QuotRem {}  -> unsupported
                     MO_U_QuotRem2 {} -> unsupported
                     MO_Add2 {}       -> unsupported
+                    MO_AddWordC {}   -> unsupported
                     MO_SubWordC {}   -> unsupported
                     MO_AddIntC {}    -> unsupported
                     MO_SubIntC {}    -> unsupported
index 6dfd589..90d6b0d 100644 (file)
@@ -667,6 +667,7 @@ outOfLineMachOp_table mop
         MO_U_QuotRem {}  -> unsupported
         MO_U_QuotRem2 {} -> unsupported
         MO_Add2 {}       -> unsupported
+        MO_AddWordC {}   -> unsupported
         MO_SubWordC {}   -> unsupported
         MO_AddIntC {}    -> unsupported
         MO_SubIntC {}    -> unsupported
index a0b0673..9dc1053 100644 (file)
@@ -2229,6 +2229,8 @@ genCCall _ is32Bit target dest_regs args = do
                           ADC format (OpImm (ImmInteger 0)) (OpReg reg_h)
                return code
         _ -> panic "genCCall: Wrong number of arguments/results for add2"
+    (PrimTarget (MO_AddWordC width), [res_r, res_c]) ->
+        addSubIntC platform ADD_CC (const Nothing) CARRY width res_r res_c args
     (PrimTarget (MO_SubWordC width), [res_r, res_c]) ->
         addSubIntC platform SUB_CC (const Nothing) CARRY width res_r res_c args
     (PrimTarget (MO_AddIntC width), [res_r, res_c]) ->
@@ -2788,6 +2790,7 @@ outOfLineCmmOp mop res args
               MO_Add2 {}       -> unsupported
               MO_AddIntC {}    -> unsupported
               MO_SubIntC {}    -> unsupported
+              MO_AddWordC {}   -> unsupported
               MO_SubWordC {}   -> unsupported
               MO_U_Mul2 {}     -> unsupported
               MO_WriteBarrier  -> unsupported
index 4098e80..763a2ca 100644 (file)
@@ -265,6 +265,7 @@ primop   IntAddCOp   "addIntC#"    GenPrimOp   Int# -> Int# -> (# Int#, Int# #)
           nonzero if overflow occurred (the sum is either too large
           or too small to fit in an {\tt Int#}).}
    with code_size = 2
+        commutable = True
 
 primop   IntSubCOp   "subIntC#"    GenPrimOp   Int# -> Int# -> (# Int#, Int# #)
          {Subtract signed integers reporting overflow.
@@ -328,15 +329,25 @@ primtype Word#
 primop   WordAddOp   "plusWord#"   Dyadic   Word# -> Word# -> Word#
    with commutable = True
 
+primop   WordAddCOp   "addWordC#"   GenPrimOp   Word# -> Word# -> (# Word#, Int# #)
+         {Add unsigned integers reporting overflow.
+          The first element of the pair is the result.  The second element is
+          the carry flag, which is nonzero on overflow. See also {\tt plusWord2#}.}
+   with code_size = 2
+        commutable = True
+
 primop   WordSubCOp   "subWordC#"   GenPrimOp   Word# -> Word# -> (# Word#, Int# #)
          {Subtract unsigned integers reporting overflow.
           The first element of the pair is the result.  The second element is
           the carry flag, which is nonzero on overflow.}
+   with code_size = 2
 
--- Returns (# high, low #) (or equivalently, (# carry, low #))
-primop   WordAdd2Op  "plusWord2#"  GenPrimOp
-   Word# -> Word# -> (# Word#, Word# #)
-   with commutable = True
+primop   WordAdd2Op   "plusWord2#"   GenPrimOp   Word# -> Word# -> (# Word#, Word# #)
+         {Add unsigned integers, with the high part (carry) in the first
+          component of the returned pair and the low part in the second
+          component of the pair. See also {\tt addWordC#}.}
+   with code_size = 2
+        commutable = True
 
 primop   WordSubOp   "minusWord#"   Dyadic   Word# -> Word# -> Word#
 
index 8920ea8..bda1ddc 100644 (file)
@@ -126,7 +126,6 @@ Runtime system
 Template Haskell
 ~~~~~~~~~~~~~~~~
 
-
 ``ghc`` library
 ~~~~~~~~~~~~~~~
 
@@ -141,6 +140,12 @@ Template Haskell
   ``contravariant`` (``Data.Functor.Contravariant.Divisible``, etc.)
   have not been moved to ``base``, and they still reside in ``contravariant``.
 
+``ghc-prim`` library
+~~~~~~~~~~~~~~~~~~~~
+
+-  Version number 0.5.2.1 (was 0.5.2.0)
+
+-  Added new ``addWordC#`` operation for unsigned addition with carry.
 
 Build system
 ~~~~~~~~~~~~
index e216a11..6813cd6 100644 (file)
@@ -36,7 +36,7 @@ library
     UnboxedTuples
     CPP
 
-  build-depends: ghc-prim   == 0.5.2.0,
+  build-depends: ghc-prim   == 0.5.2.*,
                  base       >= 4.9.0 && < 4.13,
                  bytestring >= 0.10.6.0
   ghc-options: -Wall
index 6248b2f..3c9d990 100644 (file)
@@ -1,3 +1,10 @@
+## 0.5.2.1 (edit as necessary)
+
+- Shipped with GHC 8.6.1
+
+- Added to `GHC.Prim`:
+        addWordC# :: Word# -> Word# -> (# Word#, Int# #)
+
 ## 0.5.2.0
 
 - Shipped with GHC 8.4.1
index f395c9f..e672301 100644 (file)
@@ -1,6 +1,6 @@
 cabal-version:  2.1
 name:           ghc-prim
-version:        0.5.2.0
+version:        0.5.2.1
 -- NOTE: Don't forget to update ./changelog.md
 license:        BSD-3-Clause
 license-file:   LICENSE
index ddb7afe..1f7cd72 100644 (file)
@@ -44,5 +44,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 82e562c..84da353 100644 (file)
@@ -4,5 +4,5 @@
   Instantiating q
   [1 of 1] Including p[Int=base-4.12.0.0:GHC.Exts]
     Instantiating p[Int=base-4.12.0.0:GHC.Exts]
-    [1 of 1] Including ghc-prim-0.5.2.0
+    [1 of 1] Including ghc-prim-0.5.2.1
     [1 of 1] Compiling Int[sig]         ( p/Int.hsig, bkp16.out/p/p-97PZnzqiJmd2hTwUNGdjod/Int.o )
index f2c310a..8de7e54 100644 (file)
@@ -7,7 +7,7 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
 [1 of 1] Compiling A                ( A.hs, A.o )
 TYPE SIGNATURES
@@ -18,5 +18,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index e3df0e3..1f0940b 100644 (file)
@@ -3,7 +3,7 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
 [
- {"span": null,"doc": "TYPE SIGNATURES\n  foo :: forall a. a -> a\nTYPE CONSTRUCTORS\nCOERCION AXIOMS\nDependent modules: []\nDependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,\n                     integer-gmp-1.0.2.0]","severity": "SevOutput","reason": null}]
+ {"span": null,"doc": "TYPE SIGNATURES\n  foo :: forall a. a -> a\nTYPE CONSTRUCTORS\nCOERCION AXIOMS\nDependent modules: []\nDependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,\n                     integer-gmp-1.0.2.0]","severity": "SevOutput","reason": null}]
index 2385661..1bc9245 100644 (file)
@@ -20,5 +20,5 @@ INSTANCES
 FAMILY INSTANCES
   type Elem (ListColl a)
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 32fa338..cbc8c83 100644 (file)
@@ -5,5 +5,5 @@ TYPE CONSTRUCTORS
   data Foo x y z = Foo x y z
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index b5c1588..5583041 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 9c4a9a8..f73813a 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index cedf9c2..c247732 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 5b43dd4..23a07bb 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 9f02c28..e7e34ef 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index ee06086..3e3689f 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 05e0279..c45a22c 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 5c9c29f..5f9ebc1 100644 (file)
@@ -20,5 +20,5 @@ COERCION AXIOMS
 FAMILY INSTANCES
   data instance Sing
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 6933f8a..bf337bd 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 6d3b4fc..00ad98e 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 6d3b4fc..00ad98e 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 42b8ae8..624309d 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 0026290..b1f8496 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index c91b68d..2114ee3 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 8965bc9..619f8c3 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 05e0279..c45a22c 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 05e0279..c45a22c 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 2f00cbf..e67dddb 100644 (file)
@@ -7,5 +7,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index f0b310a..61cdab8 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 2199235..f6142a3 100644 (file)
@@ -230,5 +230,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index c5426d7..4a27156 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index c5426d7..4a27156 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 891d2ae..85327fe 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 05e0279..c45a22c 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index e7d1c38..68123d9 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index e7d1c38..68123d9 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index d558df7..2210d69 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index be8b961..d61e4d0 100644 (file)
@@ -13,5 +13,5 @@ INSTANCES
     -- Defined at Meltdown.hs:11:10
   instance Monad (NukeMonad a b) -- Defined at Meltdown.hs:15:10
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index d558df7..2210d69 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 29196c6..2a593d2 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 5410655..8c17a41 100644 (file)
@@ -19,5 +19,5 @@ COERCION AXIOMS
 FAMILY INSTANCES
   data instance Sing
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 2f99aee..a1524ea 100644 (file)
@@ -9,5 +9,5 @@ COERCION AXIOMS
     F _t = Int
       -- Defined at NamedWildcardInTypeFamilyInstanceLHS.hs:5:3
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 0fa0d9e..8e9fc7a 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index d449925..8410cb1 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 4c7a19a..5078927 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 05e0279..c45a22c 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 7e90cfa..c47831c 100644 (file)
@@ -5,5 +5,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index d9f384f..50b9abd 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 4ba6a24..b643df5 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index ecfe64a..e134958 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 0833ac8..8cccc0b 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 3c6c581..1650101 100644 (file)
@@ -9,5 +9,5 @@ TYPE CONSTRUCTORS
   data GenParser tok st a = GenParser tok st a
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 46fccf7..5108764 100644 (file)
@@ -3,7 +3,7 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
 
 SomethingShowable.hs:5:1: warning: [-Wsimplifiable-class-constraints (in -Wdefault)]
index acedb29..d381459 100644 (file)
@@ -11,5 +11,5 @@ FAMILY INSTANCES
   type instance F Int _
   type instance F Bool _
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 6b82ab3..29e4092 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 9ed8c66..db9e1b5 100644 (file)
@@ -3,5 +3,5 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 9b03157..fb08dfb 100644 (file)
@@ -4,7 +4,7 @@ TYPE SIGNATURES
 TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
 
 WarningWildcardInstantiations.hs:5:14: warning: [-Wpartial-type-signatures (in -Wdefault)]
index ff3b234..baa2477 100644 (file)
@@ -21,7 +21,7 @@ TYPE CONSTRUCTORS
   data T7 (a :: k) b = K7 b
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
 
 ==================== Typechecker ====================
index e424d8b..ce010fb 100644 (file)
@@ -8,7 +8,7 @@ TYPE CONSTRUCTORS
 COERCION AXIOMS
   axiom Roles12.N:C2 :: C2 a = a -> a -- Defined at Roles14.hs:6:1
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
 
 ==================== Typechecker ====================
index 9217b84..347529b 100644 (file)
@@ -7,7 +7,7 @@ TYPE CONSTRUCTORS
   data T2 a = K2 (FunPtr a)
 COERCION AXIOMS
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
 
 ==================== Typechecker ====================
index 192a4d1..d6e73ee 100644 (file)
@@ -29,7 +29,7 @@ COERCION AXIOMS
   axiom Roles3.N:C4 ::
     C4 a b = a -> F4 b -> F4 b -- Defined at Roles3.hs:18:1
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
 
 ==================== Typechecker ====================
index 75e96b3..360efce 100644 (file)
@@ -14,7 +14,7 @@ COERCION AXIOMS
   axiom Roles4.N:C3 ::
     C3 a = a -> Syn1 a -- Defined at Roles4.hs:11:1
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
 
 ==================== Typechecker ====================
index 657d8a7..e1f9925 100644 (file)
@@ -16,7 +16,7 @@ INSTANCES
     -- Defined at T8958.hs:10:10
   instance [incoherent] Nominal a -- Defined at T8958.hs:7:10
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
 
 ==================== Typechecker ====================
index 09b4bea..a94a52d 100644 (file)
@@ -5,7 +5,7 @@ TYPE CONSTRUCTORS
 COERCION AXIOMS
 Dependent modules: []
 Dependent packages: [array-0.5.2.0, base-4.11.0.0, deepseq-1.4.3.0,
-                     ghc-boot-th-8.3, ghc-prim-0.5.2.0, integer-gmp-1.0.1.0,
+                     ghc-boot-th-8.3, ghc-prim-0.5.2.1, integer-gmp-1.0.1.0,
                      pretty-1.1.3.5, template-haskell-2.14.0.0]
 
 ==================== Typechecker ====================
index aa24ee4..8b4acdd 100644 (file)
@@ -10,5 +10,5 @@ COERCION AXIOMS
 INSTANCES
   instance C Int -- Defined at T12763.hs:9:10
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]
index 766d366..f7cdd7e 100644 (file)
@@ -19,5 +19,5 @@ COERCION AXIOMS
     Zork s a b = forall chain. Q s a chain -> ST s ()
       -- Defined at tc231.hs:25:1
 Dependent modules: []
-Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.0,
+Dependent packages: [base-4.12.0.0, ghc-prim-0.5.2.1,
                      integer-gmp-1.0.2.0]