Derive the Generic instance in perf/compiler/T5642
authorRyan Scott <ryan.gl.scott@gmail.com>
Mon, 5 Sep 2016 19:45:38 +0000 (15:45 -0400)
committerRyan Scott <ryan.gl.scott@gmail.com>
Mon, 5 Sep 2016 19:45:40 +0000 (15:45 -0400)
Summary:
For some inexplicable reason, the `Generic` instance in
`perf/compiler/T5642` is written out entirely by hand. This is not only
strange, since Trac #5642 is about derived `Generic` instances, but it also
annoying to maintain, since it requires manually changing a bunch of code
whenever the algorithm behind `deriving Generic` changes. (See D2304 for a
recent example of this.)

It seems more sensible to just derive the `Generic` instance. It shifts the
goalposts of what allocations we're measuring a bit, since we no longer have
to parse a large amount of code (and as a knock-on effect, the allocations go
down a bit). But I think this program is morally equivalent to what we were
benchmarking before, so it's not too unreasonable to change.

Test Plan: make test TEST=T5642

Reviewers: austin, thomie, bgamari

Reviewed By: bgamari

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

GHC Trac Issues: #5642

testsuite/tests/perf/compiler/T5642.hs
testsuite/tests/perf/compiler/all.T

index cc4a980..c607fe5 100644 (file)
@@ -1,13 +1,10 @@
-{-# LANGUAGE TypeOperators #-}
-{-# LANGUAGE TypeFamilies #-}
-{-# LANGUAGE DataKinds #-}
 {-# LANGUAGE DeriveGeneric #-}
 
 module GenBigTypes where
 
-  import GHC.Generics
+import GHC.Generics
 
-  data BigSum =
+data BigSum =
             C0   |  C1  | C2   | C3   | C4   | C5   | C6   | C7   | C8   | C9
           | C10  | C11  | C12  | C13  | C14  | C15  | C16  | C17  | C18  | C19
           | C20  | C21  | C22  | C23  | C24  | C25  | C26  | C27  | C28  | C29
@@ -18,872 +15,4 @@ module GenBigTypes where
           | C70  | C71  | C72  | C73  | C74  | C75  | C76  | C77  | C78  | C79
           | C80  | C81  | C82  | C83  | C84  | C85  | C86  | C87  | C88  | C89
           | C90  | C91  | C92  | C93  | C94  | C95  | C96  | C97  | C98  | C99
-{-
-          | C100 | C101 | C102 | C103 | C104 | C105 | C106 | C107 | C108 | C109
-          | C110 | C111 | C112 | C113 | C114 | C115 | C116 | C117 | C118 | C119
-          | C120 | C121 | C122 | C123 | C124 | C125 | C126 | C127 | C128 | C129
-          | C130 | C131 | C132 | C133 | C134 | C135 | C136 | C137 | C138 | C139
-          | C140 | C141 | C142 | C143 | C144 | C145 | C146 | C147 | C148 | C149
-          | C150 | C151 | C152 | C153 | C154 | C155 | C156 | C157 | C158 | C159
-          | C160 | C161 | C162 | C163 | C164 | C165 | C166 | C167 | C168 | C169
-          | C170 | C171 | C172 | C173 | C174 | C175 | C176 | C177 | C178 | C179
-          | C180 | C181 | C182 | C183 | C184 | C185 | C186 | C187 | C188 | C189
-          | C190 | C191 | C192 | C193 | C194 | C195 | C196 | C197 | C198 | C199
-          | C200 | C201 | C202 | C203 | C204 | C205 | C206 | C207 | C208 | C209
-          | C210 | C211 | C212 | C213 | C214 | C215 | C216 | C217 | C218 | C219
-          | C220 | C221 | C222 | C223 | C224 | C225 | C226 | C227 | C228 | C229
-          | C230 | C231 | C232 | C233 | C234 | C235 | C236 | C237 | C238 | C239
-          | C240 | C241 | C242 | C243 | C244 | C245 | C246 | C247 | C248 | C249
-          | C250 | C251 | C252 | C253 | C254 | C255 | C256 | C257 | C258 | C259
-          | C260 | C261 | C262 | C263 | C264 | C265 | C266 | C267 | C268 | C269
-          | C270 | C271 | C272 | C273 | C274 | C275 | C276 | C277 | C278 | C279
-          | C280 | C281 | C282 | C283 | C284 | C285 | C286 | C287 | C288 | C289
-          | C290 | C291 | C292 | C293 | C294 | C295 | C296 | C297 | C298 | C299
-    --deriving Generic
--}
-
-  instance Generic BigSum where
-    type Rep BigSum = Rep_BigSum
-    from x = M1 (case x of
-      C0  -> L1 (L1 (L1 (L1 (L1 (L1 (M1 U1))))))
-      C1  -> L1 (L1 (L1 (L1 (L1 (R1 (L1 (M1 U1)))))))
-      C2  -> L1 (L1 (L1 (L1 (L1 (R1 (R1 (M1 U1)))))))
-      C3  -> L1 (L1 (L1 (L1 (R1 (L1 (M1 U1))))))
-      C4  -> L1 (L1 (L1 (L1 (R1 (R1 (L1 (M1 U1)))))))
-      C5  -> L1 (L1 (L1 (L1 (R1 (R1 (R1 (M1 U1)))))))
-      C6  -> L1 (L1 (L1 (R1 (L1 (L1 (M1 U1))))))
-      C7  -> L1 (L1 (L1 (R1 (L1 (R1 (L1 (M1 U1)))))))
-      C8  -> L1 (L1 (L1 (R1 (L1 (R1 (R1 (M1 U1)))))))
-      C9  -> L1 (L1 (L1 (R1 (R1 (L1 (M1 U1))))))
-      C10 -> L1 (L1 (L1 (R1 (R1 (R1 (L1 (M1 U1)))))))
-      C11 -> L1 (L1 (L1 (R1 (R1 (R1 (R1 (M1 U1)))))))
-      C12 -> L1 (L1 (R1 (L1 (L1 (L1 (M1 U1))))))
-      C13 -> L1 (L1 (R1 (L1 (L1 (R1 (L1 (M1 U1)))))))
-      C14 -> L1 (L1 (R1 (L1 (L1 (R1 (R1 (M1 U1)))))))
-      C15 -> L1 (L1 (R1 (L1 (R1 (L1 (M1 U1))))))
-      C16 -> L1 (L1 (R1 (L1 (R1 (R1 (L1 (M1 U1)))))))
-      C17 -> L1 (L1 (R1 (L1 (R1 (R1 (R1 (M1 U1)))))))
-      C18 -> L1 (L1 (R1 (R1 (L1 (L1 (M1 U1))))))
-      C19 -> L1 (L1 (R1 (R1 (L1 (R1 (L1 (M1 U1)))))))
-      C20 -> L1 (L1 (R1 (R1 (L1 (R1 (R1 (M1 U1)))))))
-      C21 -> L1 (L1 (R1 (R1 (R1 (L1 (L1 (M1 U1)))))))
-      C22 -> L1 (L1 (R1 (R1 (R1 (L1 (R1 (M1 U1)))))))
-      C23 -> L1 (L1 (R1 (R1 (R1 (R1 (L1 (M1 U1)))))))
-      C24 -> L1 (L1 (R1 (R1 (R1 (R1 (R1 (M1 U1)))))))
-      C25 -> L1 (R1 (L1 (L1 (L1 (L1 (M1 U1))))))
-      C26 -> L1 (R1 (L1 (L1 (L1 (R1 (L1 (M1 U1)))))))
-      C27 -> L1 (R1 (L1 (L1 (L1 (R1 (R1 (M1 U1)))))))
-      C28 -> L1 (R1 (L1 (L1 (R1 (L1 (M1 U1))))))
-      C29 -> L1 (R1 (L1 (L1 (R1 (R1 (L1 (M1 U1)))))))
-      C30 -> L1 (R1 (L1 (L1 (R1 (R1 (R1 (M1 U1)))))))
-      C31 -> L1 (R1 (L1 (R1 (L1 (L1 (M1 U1))))))
-      C32 -> L1 (R1 (L1 (R1 (L1 (R1 (L1 (M1 U1)))))))
-      C33 -> L1 (R1 (L1 (R1 (L1 (R1 (R1 (M1 U1)))))))
-      C34 -> L1 (R1 (L1 (R1 (R1 (L1 (M1 U1))))))
-      C35 -> L1 (R1 (L1 (R1 (R1 (R1 (L1 (M1 U1)))))))
-      C36 -> L1 (R1 (L1 (R1 (R1 (R1 (R1 (M1 U1)))))))
-      C37 -> L1 (R1 (R1 (L1 (L1 (L1 (M1 U1))))))
-      C38 -> L1 (R1 (R1 (L1 (L1 (R1 (L1 (M1 U1)))))))
-      C39 -> L1 (R1 (R1 (L1 (L1 (R1 (R1 (M1 U1)))))))
-      C40 -> L1 (R1 (R1 (L1 (R1 (L1 (M1 U1))))))
-      C41 -> L1 (R1 (R1 (L1 (R1 (R1 (L1 (M1 U1)))))))
-      C42 -> L1 (R1 (R1 (L1 (R1 (R1 (R1 (M1 U1)))))))
-      C43 -> L1 (R1 (R1 (R1 (L1 (L1 (M1 U1))))))
-      C44 -> L1 (R1 (R1 (R1 (L1 (R1 (L1 (M1 U1)))))))
-      C45 -> L1 (R1 (R1 (R1 (L1 (R1 (R1 (M1 U1)))))))
-      C46 -> L1 (R1 (R1 (R1 (R1 (L1 (L1 (M1 U1)))))))
-      C47 -> L1 (R1 (R1 (R1 (R1 (L1 (R1 (M1 U1)))))))
-      C48 -> L1 (R1 (R1 (R1 (R1 (R1 (L1 (M1 U1)))))))
-      C49 -> L1 (R1 (R1 (R1 (R1 (R1 (R1 (M1 U1)))))))
-      C50 -> R1 (L1 (L1 (L1 (L1 (L1 (M1 U1))))))
-      C51 -> R1 (L1 (L1 (L1 (L1 (R1 (L1 (M1 U1)))))))
-      C52 -> R1 (L1 (L1 (L1 (L1 (R1 (R1 (M1 U1)))))))
-      C53 -> R1 (L1 (L1 (L1 (R1 (L1 (M1 U1))))))
-      C54 -> R1 (L1 (L1 (L1 (R1 (R1 (L1 (M1 U1)))))))
-      C55 -> R1 (L1 (L1 (L1 (R1 (R1 (R1 (M1 U1)))))))
-      C56 -> R1 (L1 (L1 (R1 (L1 (L1 (M1 U1))))))
-      C57 -> R1 (L1 (L1 (R1 (L1 (R1 (L1 (M1 U1)))))))
-      C58 -> R1 (L1 (L1 (R1 (L1 (R1 (R1 (M1 U1)))))))
-      C59 -> R1 (L1 (L1 (R1 (R1 (L1 (M1 U1))))))
-      C60 -> R1 (L1 (L1 (R1 (R1 (R1 (L1 (M1 U1)))))))
-      C61 -> R1 (L1 (L1 (R1 (R1 (R1 (R1 (M1 U1)))))))
-      C62 -> R1 (L1 (R1 (L1 (L1 (L1 (M1 U1))))))
-      C63 -> R1 (L1 (R1 (L1 (L1 (R1 (L1 (M1 U1)))))))
-      C64 -> R1 (L1 (R1 (L1 (L1 (R1 (R1 (M1 U1)))))))
-      C65 -> R1 (L1 (R1 (L1 (R1 (L1 (M1 U1))))))
-      C66 -> R1 (L1 (R1 (L1 (R1 (R1 (L1 (M1 U1)))))))
-      C67 -> R1 (L1 (R1 (L1 (R1 (R1 (R1 (M1 U1)))))))
-      C68 -> R1 (L1 (R1 (R1 (L1 (L1 (M1 U1))))))
-      C69 -> R1 (L1 (R1 (R1 (L1 (R1 (L1 (M1 U1)))))))
-      C70 -> R1 (L1 (R1 (R1 (L1 (R1 (R1 (M1 U1)))))))
-      C71 -> R1 (L1 (R1 (R1 (R1 (L1 (L1 (M1 U1)))))))
-      C72 -> R1 (L1 (R1 (R1 (R1 (L1 (R1 (M1 U1)))))))
-      C73 -> R1 (L1 (R1 (R1 (R1 (R1 (L1 (M1 U1)))))))
-      C74 -> R1 (L1 (R1 (R1 (R1 (R1 (R1 (M1 U1)))))))
-      C75 -> R1 (R1 (L1 (L1 (L1 (L1 (M1 U1))))))
-      C76 -> R1 (R1 (L1 (L1 (L1 (R1 (L1 (M1 U1)))))))
-      C77 -> R1 (R1 (L1 (L1 (L1 (R1 (R1 (M1 U1)))))))
-      C78 -> R1 (R1 (L1 (L1 (R1 (L1 (M1 U1))))))
-      C79 -> R1 (R1 (L1 (L1 (R1 (R1 (L1 (M1 U1)))))))
-      C80 -> R1 (R1 (L1 (L1 (R1 (R1 (R1 (M1 U1)))))))
-      C81 -> R1 (R1 (L1 (R1 (L1 (L1 (M1 U1))))))
-      C82 -> R1 (R1 (L1 (R1 (L1 (R1 (L1 (M1 U1)))))))
-      C83 -> R1 (R1 (L1 (R1 (L1 (R1 (R1 (M1 U1)))))))
-      C84 -> R1 (R1 (L1 (R1 (R1 (L1 (M1 U1))))))
-      C85 -> R1 (R1 (L1 (R1 (R1 (R1 (L1 (M1 U1)))))))
-      C86 -> R1 (R1 (L1 (R1 (R1 (R1 (R1 (M1 U1)))))))
-      C87 -> R1 (R1 (R1 (L1 (L1 (L1 (M1 U1))))))
-      C88 -> R1 (R1 (R1 (L1 (L1 (R1 (L1 (M1 U1)))))))
-      C89 -> R1 (R1 (R1 (L1 (L1 (R1 (R1 (M1 U1)))))))
-      C90 -> R1 (R1 (R1 (L1 (R1 (L1 (M1 U1))))))
-      C91 -> R1 (R1 (R1 (L1 (R1 (R1 (L1 (M1 U1)))))))
-      C92 -> R1 (R1 (R1 (L1 (R1 (R1 (R1 (M1 U1)))))))
-      C93 -> R1 (R1 (R1 (R1 (L1 (L1 (M1 U1))))))
-      C94 -> R1 (R1 (R1 (R1 (L1 (R1 (L1 (M1 U1)))))))
-      C95 -> R1 (R1 (R1 (R1 (L1 (R1 (R1 (M1 U1)))))))
-      C96 -> R1 (R1 (R1 (R1 (R1 (L1 (L1 (M1 U1)))))))
-      C97 -> R1 (R1 (R1 (R1 (R1 (L1 (R1 (M1 U1)))))))
-      C98 -> R1 (R1 (R1 (R1 (R1 (R1 (L1 (M1 U1)))))))
-      C99 -> R1 (R1 (R1 (R1 (R1 (R1 (R1 (M1 U1))))))))
-    to (M1 x) = case x of
-      L1 (L1 (L1 (L1 (L1 (L1 (M1 U1)))))) -> C0
-      L1 (L1 (L1 (L1 (L1 (R1 (L1 (M1 U1))))))) -> C1
-      L1 (L1 (L1 (L1 (L1 (R1 (R1 (M1 U1))))))) -> C2
-      L1 (L1 (L1 (L1 (R1 (L1 (M1 U1)))))) -> C3
-      L1 (L1 (L1 (L1 (R1 (R1 (L1 (M1 U1))))))) -> C4
-      L1 (L1 (L1 (L1 (R1 (R1 (R1 (M1 U1))))))) -> C5
-      L1 (L1 (L1 (R1 (L1 (L1 (M1 U1)))))) -> C6
-      L1 (L1 (L1 (R1 (L1 (R1 (L1 (M1 U1))))))) -> C7
-      L1 (L1 (L1 (R1 (L1 (R1 (R1 (M1 U1))))))) -> C8
-      L1 (L1 (L1 (R1 (R1 (L1 (M1 U1)))))) -> C9
-      L1 (L1 (L1 (R1 (R1 (R1 (L1 (M1 U1))))))) -> C10
-      L1 (L1 (L1 (R1 (R1 (R1 (R1 (M1 U1))))))) -> C11
-      L1 (L1 (R1 (L1 (L1 (L1 (M1 U1)))))) -> C12
-      L1 (L1 (R1 (L1 (L1 (R1 (L1 (M1 U1))))))) -> C13
-      L1 (L1 (R1 (L1 (L1 (R1 (R1 (M1 U1))))))) -> C14
-      L1 (L1 (R1 (L1 (R1 (L1 (M1 U1)))))) -> C15
-      L1 (L1 (R1 (L1 (R1 (R1 (L1 (M1 U1))))))) -> C16
-      L1 (L1 (R1 (L1 (R1 (R1 (R1 (M1 U1))))))) -> C17
-      L1 (L1 (R1 (R1 (L1 (L1 (M1 U1)))))) -> C18
-      L1 (L1 (R1 (R1 (L1 (R1 (L1 (M1 U1))))))) -> C19
-      L1 (L1 (R1 (R1 (L1 (R1 (R1 (M1 U1))))))) -> C20
-      L1 (L1 (R1 (R1 (R1 (L1 (L1 (M1 U1))))))) -> C21
-      L1 (L1 (R1 (R1 (R1 (L1 (R1 (M1 U1))))))) -> C22
-      L1 (L1 (R1 (R1 (R1 (R1 (L1 (M1 U1))))))) -> C23
-      L1 (L1 (R1 (R1 (R1 (R1 (R1 (M1 U1))))))) -> C24
-      L1 (R1 (L1 (L1 (L1 (L1 (M1 U1)))))) -> C25
-      L1 (R1 (L1 (L1 (L1 (R1 (L1 (M1 U1))))))) -> C26
-      L1 (R1 (L1 (L1 (L1 (R1 (R1 (M1 U1))))))) -> C27
-      L1 (R1 (L1 (L1 (R1 (L1 (M1 U1)))))) -> C28
-      L1 (R1 (L1 (L1 (R1 (R1 (L1 (M1 U1))))))) -> C29
-      L1 (R1 (L1 (L1 (R1 (R1 (R1 (M1 U1))))))) -> C30
-      L1 (R1 (L1 (R1 (L1 (L1 (M1 U1)))))) -> C31
-      L1 (R1 (L1 (R1 (L1 (R1 (L1 (M1 U1))))))) -> C32
-      L1 (R1 (L1 (R1 (L1 (R1 (R1 (M1 U1))))))) -> C33
-      L1 (R1 (L1 (R1 (R1 (L1 (M1 U1)))))) -> C34
-      L1 (R1 (L1 (R1 (R1 (R1 (L1 (M1 U1))))))) -> C35
-      L1 (R1 (L1 (R1 (R1 (R1 (R1 (M1 U1))))))) -> C36
-      L1 (R1 (R1 (L1 (L1 (L1 (M1 U1)))))) -> C37
-      L1 (R1 (R1 (L1 (L1 (R1 (L1 (M1 U1))))))) -> C38
-      L1 (R1 (R1 (L1 (L1 (R1 (R1 (M1 U1))))))) -> C39
-      L1 (R1 (R1 (L1 (R1 (L1 (M1 U1)))))) -> C40
-      L1 (R1 (R1 (L1 (R1 (R1 (L1 (M1 U1))))))) -> C41
-      L1 (R1 (R1 (L1 (R1 (R1 (R1 (M1 U1))))))) -> C42
-      L1 (R1 (R1 (R1 (L1 (L1 (M1 U1)))))) -> C43
-      L1 (R1 (R1 (R1 (L1 (R1 (L1 (M1 U1))))))) -> C44
-      L1 (R1 (R1 (R1 (L1 (R1 (R1 (M1 U1))))))) -> C45
-      L1 (R1 (R1 (R1 (R1 (L1 (L1 (M1 U1))))))) -> C46
-      L1 (R1 (R1 (R1 (R1 (L1 (R1 (M1 U1))))))) -> C47
-      L1 (R1 (R1 (R1 (R1 (R1 (L1 (M1 U1))))))) -> C48
-      L1 (R1 (R1 (R1 (R1 (R1 (R1 (M1 U1))))))) -> C49
-      R1 (L1 (L1 (L1 (L1 (L1 (M1 U1)))))) -> C50
-      R1 (L1 (L1 (L1 (L1 (R1 (L1 (M1 U1))))))) -> C51
-      R1 (L1 (L1 (L1 (L1 (R1 (R1 (M1 U1))))))) -> C52
-      R1 (L1 (L1 (L1 (R1 (L1 (M1 U1)))))) -> C53
-      R1 (L1 (L1 (L1 (R1 (R1 (L1 (M1 U1))))))) -> C54
-      R1 (L1 (L1 (L1 (R1 (R1 (R1 (M1 U1))))))) -> C55
-      R1 (L1 (L1 (R1 (L1 (L1 (M1 U1)))))) -> C56
-      R1 (L1 (L1 (R1 (L1 (R1 (L1 (M1 U1))))))) -> C57
-      R1 (L1 (L1 (R1 (L1 (R1 (R1 (M1 U1))))))) -> C58
-      R1 (L1 (L1 (R1 (R1 (L1 (M1 U1)))))) -> C59
-      R1 (L1 (L1 (R1 (R1 (R1 (L1 (M1 U1))))))) -> C60
-      R1 (L1 (L1 (R1 (R1 (R1 (R1 (M1 U1))))))) -> C61
-      R1 (L1 (R1 (L1 (L1 (L1 (M1 U1)))))) -> C62
-      R1 (L1 (R1 (L1 (L1 (R1 (L1 (M1 U1))))))) -> C63
-      R1 (L1 (R1 (L1 (L1 (R1 (R1 (M1 U1))))))) -> C64
-      R1 (L1 (R1 (L1 (R1 (L1 (M1 U1)))))) -> C65
-      R1 (L1 (R1 (L1 (R1 (R1 (L1 (M1 U1))))))) -> C66
-      R1 (L1 (R1 (L1 (R1 (R1 (R1 (M1 U1))))))) -> C67
-      R1 (L1 (R1 (R1 (L1 (L1 (M1 U1)))))) -> C68
-      R1 (L1 (R1 (R1 (L1 (R1 (L1 (M1 U1))))))) -> C69
-      R1 (L1 (R1 (R1 (L1 (R1 (R1 (M1 U1))))))) -> C70
-      R1 (L1 (R1 (R1 (R1 (L1 (L1 (M1 U1))))))) -> C71
-      R1 (L1 (R1 (R1 (R1 (L1 (R1 (M1 U1))))))) -> C72
-      R1 (L1 (R1 (R1 (R1 (R1 (L1 (M1 U1))))))) -> C73
-      R1 (L1 (R1 (R1 (R1 (R1 (R1 (M1 U1))))))) -> C74
-      R1 (R1 (L1 (L1 (L1 (L1 (M1 U1)))))) -> C75
-      R1 (R1 (L1 (L1 (L1 (R1 (L1 (M1 U1))))))) -> C76
-      R1 (R1 (L1 (L1 (L1 (R1 (R1 (M1 U1))))))) -> C77
-      R1 (R1 (L1 (L1 (R1 (L1 (M1 U1)))))) -> C78
-      R1 (R1 (L1 (L1 (R1 (R1 (L1 (M1 U1))))))) -> C79
-      R1 (R1 (L1 (L1 (R1 (R1 (R1 (M1 U1))))))) -> C80
-      R1 (R1 (L1 (R1 (L1 (L1 (M1 U1)))))) -> C81
-      R1 (R1 (L1 (R1 (L1 (R1 (L1 (M1 U1))))))) -> C82
-      R1 (R1 (L1 (R1 (L1 (R1 (R1 (M1 U1))))))) -> C83
-      R1 (R1 (L1 (R1 (R1 (L1 (M1 U1)))))) -> C84
-      R1 (R1 (L1 (R1 (R1 (R1 (L1 (M1 U1))))))) -> C85
-      R1 (R1 (L1 (R1 (R1 (R1 (R1 (M1 U1))))))) -> C86
-      R1 (R1 (R1 (L1 (L1 (L1 (M1 U1)))))) -> C87
-      R1 (R1 (R1 (L1 (L1 (R1 (L1 (M1 U1))))))) -> C88
-      R1 (R1 (R1 (L1 (L1 (R1 (R1 (M1 U1))))))) -> C89
-      R1 (R1 (R1 (L1 (R1 (L1 (M1 U1)))))) -> C90
-      R1 (R1 (R1 (L1 (R1 (R1 (L1 (M1 U1))))))) -> C91
-      R1 (R1 (R1 (L1 (R1 (R1 (R1 (M1 U1))))))) -> C92
-      R1 (R1 (R1 (R1 (L1 (L1 (M1 U1)))))) -> C93
-      R1 (R1 (R1 (R1 (L1 (R1 (L1 (M1 U1))))))) -> C94
-      R1 (R1 (R1 (R1 (L1 (R1 (R1 (M1 U1))))))) -> C95
-      R1 (R1 (R1 (R1 (R1 (L1 (L1 (M1 U1))))))) -> C96
-      R1 (R1 (R1 (R1 (R1 (L1 (R1 (M1 U1))))))) -> C97
-      R1 (R1 (R1 (R1 (R1 (R1 (L1 (M1 U1))))))) -> C98
-      R1 (R1 (R1 (R1 (R1 (R1 (R1 (M1 U1))))))) -> C99
-
-  type Rep_BigSum = D1
-                                       ('MetaData
-                                          "BigSum" "Wat" "main" 'False)
-                                       ((((((C1
-                                               ('MetaCons
-                                                  "C0" 'PrefixI 'False)
-                                               U1
-                                             :+: (C1
-                                                                 ('MetaCons
-                                                                    "C1"
-                                                                    'PrefixI
-                                                                    'False)
-                                                                 U1
-                                                               :+: C1
-                                                                                  ('MetaCons
-                                                                                     "C2"
-                                                                                     'PrefixI
-                                                                                     'False)
-                                                                                  U1))
-                                            :+: (C1
-                                                                ('MetaCons
-                                                                   "C3"
-                                                                   'PrefixI
-                                                                   'False)
-                                                                U1
-                                                              :+: (C1
-                                                                                  ('MetaCons
-                                                                                     "C4"
-                                                                                     'PrefixI
-                                                                                     'False)
-                                                                                  U1
-                                                                                :+: C1
-                                                                                                   ('MetaCons
-                                                                                                      "C5"
-                                                                                                      'PrefixI
-                                                                                                      'False)
-                                                                                                   U1)))
-                                           :+: ((C1
-                                                                ('MetaCons
-                                                                   "C6"
-                                                                   'PrefixI
-                                                                   'False)
-                                                                U1
-                                                              :+: (C1
-                                                                                  ('MetaCons
-                                                                                     "C7"
-                                                                                     'PrefixI
-                                                                                     'False)
-                                                                                  U1
-                                                                                :+: C1
-                                                                                                   ('MetaCons
-                                                                                                      "C8"
-                                                                                                      'PrefixI
-                                                                                                      'False)
-                                                                                                   U1))
-                                                             :+: (C1
-                                                                                 ('MetaCons
-                                                                                    "C9"
-                                                                                    'PrefixI
-                                                                                    'False)
-                                                                                 U1
-                                                                               :+: (C1
-                                                                                                   ('MetaCons
-                                                                                                      "C10"
-                                                                                                      'PrefixI
-                                                                                                      'False)
-                                                                                                   U1
-                                                                                                 :+: C1
-                                                                                                                    ('MetaCons
-                                                                                                                       "C11"
-                                                                                                                       'PrefixI
-                                                                                                                       'False)
-                                                                                                                    U1))))
-                                          :+: (((C1
-                                                                ('MetaCons
-                                                                   "C12"
-                                                                   'PrefixI
-                                                                   'False)
-                                                                U1
-                                                              :+: (C1
-                                                                                  ('MetaCons
-                                                                                     "C13"
-                                                                                     'PrefixI
-                                                                                     'False)
-                                                                                  U1
-                                                                                :+: C1
-                                                                                                   ('MetaCons
-                                                                                                      "C14"
-                                                                                                      'PrefixI
-                                                                                                      'False)
-                                                                                                   U1))
-                                                             :+: (C1
-                                                                                 ('MetaCons
-                                                                                    "C15"
-                                                                                    'PrefixI
-                                                                                    'False)
-                                                                                 U1
-                                                                               :+: (C1
-                                                                                                   ('MetaCons
-                                                                                                      "C16"
-                                                                                                      'PrefixI
-                                                                                                      'False)
-                                                                                                   U1
-                                                                                                 :+: C1
-                                                                                                                    ('MetaCons
-                                                                                                                       "C17"
-                                                                                                                       'PrefixI
-                                                                                                                       'False)
-                                                                                                                    U1)))
-                                                            :+: ((C1
-                                                                                 ('MetaCons
-                                                                                    "C18"
-                                                                                    'PrefixI
-                                                                                    'False)
-                                                                                 U1
-                                                                               :+: (C1
-                                                                                                   ('MetaCons
-                                                                                                      "C19"
-                                                                                                      'PrefixI
-                                                                                                      'False)
-                                                                                                   U1
-                                                                                                 :+: C1
-                                                                                                                    ('MetaCons
-                                                                                                                       "C20"
-                                                                                                                       'PrefixI
-                                                                                                                       'False)
-                                                                                                                    U1))
-                                                                              :+: ((C1
-                                                                                                   ('MetaCons
-                                                                                                      "C21"
-                                                                                                      'PrefixI
-                                                                                                      'False)
-                                                                                                   U1
-                                                                                                 :+: C1
-                                                                                                                    ('MetaCons
-                                                                                                                       "C22"
-                                                                                                                       'PrefixI
-                                                                                                                       'False)
-                                                                                                                    U1)
-                                                                                                :+: (C1
-                                                                                                                    ('MetaCons
-                                                                                                                       "C23"
-                                                                                                                       'PrefixI
-                                                                                                                       'False)
-                                                                                                                    U1
-                                                                                                                  :+: C1
-                                                                                                                                     ('MetaCons
-                                                                                                                                        "C24"
-                                                                                                                                        'PrefixI
-                                                                                                                                        'False)
-                                                                                                                                     U1)))))
-                                         :+: ((((C1
-                                                                ('MetaCons
-                                                                   "C25"
-                                                                   'PrefixI
-                                                                   'False)
-                                                                U1
-                                                              :+: (C1
-                                                                                  ('MetaCons
-                                                                                     "C26"
-                                                                                     'PrefixI
-                                                                                     'False)
-                                                                                  U1
-                                                                                :+: C1
-                                                                                                   ('MetaCons
-                                                                                                      "C27"
-                                                                                                      'PrefixI
-                                                                                                      'False)
-                                                                                                   U1))
-                                                             :+: (C1
-                                                                                 ('MetaCons
-                                                                                    "C28"
-                                                                                    'PrefixI
-                                                                                    'False)
-                                                                                 U1
-                                                                               :+: (C1
-                                                                                                   ('MetaCons
-                                                                                                      "C29"
-                                                                                                      'PrefixI
-                                                                                                      'False)
-                                                                                                   U1
-                                                                                                 :+: C1
-                                                                                                                    ('MetaCons
-                                                                                                                       "C30"
-                                                                                                                       'PrefixI
-                                                                                                                       'False)
-                                                                                                                    U1)))
-                                                            :+: ((C1
-                                                                                 ('MetaCons
-                                                                                    "C31"
-                                                                                    'PrefixI
-                                                                                    'False)
-                                                                                 U1
-                                                                               :+: (C1
-                                                                                                   ('MetaCons
-                                                                                                      "C32"
-                                                                                                      'PrefixI
-                                                                                                      'False)
-                                                                                                   U1
-                                                                                                 :+: C1
-                                                                                                                    ('MetaCons
-                                                                                                                       "C33"
-                                                                                                                       'PrefixI
-                                                                                                                       'False)
-                                                                                                                    U1))
-                                                                              :+: (C1
-                                                                                                  ('MetaCons
-                                                                                                     "C34"
-                                                                                                     'PrefixI
-                                                                                                     'False)
-                                                                                                  U1
-                                                                                                :+: (C1
-                                                                                                                    ('MetaCons
-                                                                                                                       "C35"
-                                                                                                                       'PrefixI
-                                                                                                                       'False)
-                                                                                                                    U1
-                                                                                                                  :+: C1
-                                                                                                                                     ('MetaCons
-                                                                                                                                        "C36"
-                                                                                                                                        'PrefixI
-                                                                                                                                        'False)
-                                                                                                                                     U1))))
-                                                           :+: (((C1
-                                                                                 ('MetaCons
-                                                                                    "C37"
-                                                                                    'PrefixI
-                                                                                    'False)
-                                                                                 U1
-                                                                               :+: (C1
-                                                                                                   ('MetaCons
-                                                                                                      "C38"
-                                                                                                      'PrefixI
-                                                                                                      'False)
-                                                                                                   U1
-                                                                                                 :+: C1
-                                                                                                                    ('MetaCons
-                                                                                                                       "C39"
-                                                                                                                       'PrefixI
-                                                                                                                       'False)
-                                                                                                                    U1))
-                                                                              :+: (C1
-                                                                                                  ('MetaCons
-                                                                                                     "C40"
-                                                                                                     'PrefixI
-                                                                                                     'False)
-                                                                                                  U1
-                                                                                                :+: (C1
-                                                                                                                    ('MetaCons
-                                                                                                                       "C41"
-                                                                                                                       'PrefixI
-                                                                                                                       'False)
-                                                                                                                    U1
-                                                                                                                  :+: C1
-                                                                                                                                     ('MetaCons
-                                                                                                                                        "C42"
-                                                                                                                                        'PrefixI
-                                                                                                                                        'False)
-                                                                                                                                     U1)))
-                                                                             :+: ((C1
-                                                                                                  ('MetaCons
-                                                                                                     "C43"
-                                                                                                     'PrefixI
-                                                                                                     'False)
-                                                                                                  U1
-                                                                                                :+: (C1
-                                                                                                                    ('MetaCons
-                                                                                                                       "C44"
-                                                                                                                       'PrefixI
-                                                                                                                       'False)
-                                                                                                                    U1
-                                                                                                                  :+: C1
-                                                                                                                                     ('MetaCons
-                                                                                                                                        "C45"
-                                                                                                                                        'PrefixI
-                                                                                                                                        'False)
-                                                                                                                                     U1))
-                                                                                               :+: ((C1
-                                                                                                                    ('MetaCons
-                                                                                                                       "C46"
-                                                                                                                       'PrefixI
-                                                                                                                       'False)
-                                                                                                                    U1
-                                                                                                                  :+: C1
-                                                                                                                                     ('MetaCons
-                                                                                                                                        "C47"
-                                                                                                                                        'PrefixI
-                                                                                                                                        'False)
-                                                                                                                                     U1)
-                                                                                                                 :+: (C1
-                                                                                                                                     ('MetaCons
-                                                                                                                                        "C48"
-                                                                                                                                        'PrefixI
-                                                                                                                                        'False)
-                                                                                                                                     U1
-                                                                                                                                   :+: C1
-                                                                                                                                                      ('MetaCons
-                                                                                                                                                         "C49"
-                                                                                                                                                         'PrefixI
-                                                                                                                                                         'False)
-                                                                                                                                                      U1))))))
-                                        :+: (((((C1
-                                                                ('MetaCons
-                                                                   "C50"
-                                                                   'PrefixI
-                                                                   'False)
-                                                                U1
-                                                              :+: (C1
-                                                                                  ('MetaCons
-                                                                                     "C51"
-                                                                                     'PrefixI
-                                                                                     'False)
-                                                                                  U1
-                                                                                :+: C1
-                                                                                                   ('MetaCons
-                                                                                                      "C52"
-                                                                                                      'PrefixI
-                                                                                                      'False)
-                                                                                                   U1))
-                                                             :+: (C1
-                                                                                 ('MetaCons
-                                                                                    "C53"
-                                                                                    'PrefixI
-                                                                                    'False)
-                                                                                 U1
-                                                                               :+: (C1
-                                                                                                   ('MetaCons
-                                                                                                      "C54"
-                                                                                                      'PrefixI
-                                                                                                      'False)
-                                                                                                   U1
-                                                                                                 :+: C1
-                                                                                                                    ('MetaCons
-                                                                                                                       "C55"
-                                                                                                                       'PrefixI
-                                                                                                                       'False)
-                                                                                                                    U1)))
-                                                            :+: ((C1
-                                                                                 ('MetaCons
-                                                                                    "C56"
-                                                                                    'PrefixI
-                                                                                    'False)
-                                                                                 U1
-                                                                               :+: (C1
-                                                                                                   ('MetaCons
-                                                                                                      "C57"
-                                                                                                      'PrefixI
-                                                                                                      'False)
-                                                                                                   U1
-                                                                                                 :+: C1
-                                                                                                                    ('MetaCons
-                                                                                                                       "C58"
-                                                                                                                       'PrefixI
-                                                                                                                       'False)
-                                                                                                                    U1))
-                                                                              :+: (C1
-                                                                                                  ('MetaCons
-                                                                                                     "C59"
-                                                                                                     'PrefixI
-                                                                                                     'False)
-                                                                                                  U1
-                                                                                                :+: (C1
-                                                                                                                    ('MetaCons
-                                                                                                                       "C60"
-                                                                                                                       'PrefixI
-                                                                                                                       'False)
-                                                                                                                    U1
-                                                                                                                  :+: C1
-                                                                                                                                     ('MetaCons
-                                                                                                                                        "C61"
-                                                                                                                                        'PrefixI
-                                                                                                                                        'False)
-                                                                                                                                     U1))))
-                                                           :+: (((C1
-                                                                                 ('MetaCons
-                                                                                    "C62"
-                                                                                    'PrefixI
-                                                                                    'False)
-                                                                                 U1
-                                                                               :+: (C1
-                                                                                                   ('MetaCons
-                                                                                                      "C63"
-                                                                                                      'PrefixI
-                                                                                                      'False)
-                                                                                                   U1
-                                                                                                 :+: C1
-                                                                                                                    ('MetaCons
-                                                                                                                       "C64"
-                                                                                                                       'PrefixI
-                                                                                                                       'False)
-                                                                                                                    U1))
-                                                                              :+: (C1
-                                                                                                  ('MetaCons
-                                                                                                     "C65"
-                                                                                                     'PrefixI
-                                                                                                     'False)
-                                                                                                  U1
-                                                                                                :+: (C1
-                                                                                                                    ('MetaCons
-                                                                                                                       "C66"
-                                                                                                                       'PrefixI
-                                                                                                                       'False)
-                                                                                                                    U1
-                                                                                                                  :+: C1
-                                                                                                                                     ('MetaCons
-                                                                                                                                        "C67"
-                                                                                                                                        'PrefixI
-                                                                                                                                        'False)
-                                                                                                                                     U1)))
-                                                                             :+: ((C1
-                                                                                                  ('MetaCons
-                                                                                                     "C68"
-                                                                                                     'PrefixI
-                                                                                                     'False)
-                                                                                                  U1
-                                                                                                :+: (C1
-                                                                                                                    ('MetaCons
-                                                                                                                       "C69"
-                                                                                                                       'PrefixI
-                                                                                                                       'False)
-                                                                                                                    U1
-                                                                                                                  :+: C1
-                                                                                                                                     ('MetaCons
-                                                                                                                                        "C70"
-                                                                                                                                        'PrefixI
-                                                                                                                                        'False)
-                                                                                                                                     U1))
-                                                                                               :+: ((C1
-                                                                                                                    ('MetaCons
-                                                                                                                       "C71"
-                                                                                                                       'PrefixI
-                                                                                                                       'False)
-                                                                                                                    U1
-                                                                                                                  :+: C1
-                                                                                                                                     ('MetaCons
-                                                                                                                                        "C72"
-                                                                                                                                        'PrefixI
-                                                                                                                                        'False)
-                                                                                                                                     U1)
-                                                                                                                 :+: (C1
-                                                                                                                                     ('MetaCons
-                                                                                                                                        "C73"
-                                                                                                                                        'PrefixI
-                                                                                                                                        'False)
-                                                                                                                                     U1
-                                                                                                                                   :+: C1
-                                                                                                                                                      ('MetaCons
-                                                                                                                                                         "C74"
-                                                                                                                                                         'PrefixI
-                                                                                                                                                         'False)
-                                                                                                                                                      U1)))))
-                                                          :+: ((((C1
-                                                                                 ('MetaCons
-                                                                                    "C75"
-                                                                                    'PrefixI
-                                                                                    'False)
-                                                                                 U1
-                                                                               :+: (C1
-                                                                                                   ('MetaCons
-                                                                                                      "C76"
-                                                                                                      'PrefixI
-                                                                                                      'False)
-                                                                                                   U1
-                                                                                                 :+: C1
-                                                                                                                    ('MetaCons
-                                                                                                                       "C77"
-                                                                                                                       'PrefixI
-                                                                                                                       'False)
-                                                                                                                    U1))
-                                                                              :+: (C1
-                                                                                                  ('MetaCons
-                                                                                                     "C78"
-                                                                                                     'PrefixI
-                                                                                                     'False)
-                                                                                                  U1
-                                                                                                :+: (C1
-                                                                                                                    ('MetaCons
-                                                                                                                       "C79"
-                                                                                                                       'PrefixI
-                                                                                                                       'False)
-                                                                                                                    U1
-                                                                                                                  :+: C1
-                                                                                                                                     ('MetaCons
-                                                                                                                                        "C80"
-                                                                                                                                        'PrefixI
-                                                                                                                                        'False)
-                                                                                                                                     U1)))
-                                                                             :+: ((C1
-                                                                                                  ('MetaCons
-                                                                                                     "C81"
-                                                                                                     'PrefixI
-                                                                                                     'False)
-                                                                                                  U1
-                                                                                                :+: (C1
-                                                                                                                    ('MetaCons
-                                                                                                                       "C82"
-                                                                                                                       'PrefixI
-                                                                                                                       'False)
-                                                                                                                    U1
-                                                                                                                  :+: C1
-                                                                                                                                     ('MetaCons
-                                                                                                                                        "C83"
-                                                                                                                                        'PrefixI
-                                                                                                                                        'False)
-                                                                                                                                     U1))
-                                                                                               :+: (C1
-                                                                                                                   ('MetaCons
-                                                                                                                      "C84"
-                                                                                                                      'PrefixI
-                                                                                                                      'False)
-                                                                                                                   U1
-                                                                                                                 :+: (C1
-                                                                                                                                     ('MetaCons
-                                                                                                                                        "C85"
-                                                                                                                                        'PrefixI
-                                                                                                                                        'False)
-                                                                                                                                     U1
-                                                                                                                                   :+: C1
-                                                                                                                                                      ('MetaCons
-                                                                                                                                                         "C86"
-                                                                                                                                                         'PrefixI
-                                                                                                                                                         'False)
-                                                                                                                                                      U1))))
-                                                                            :+: (((C1
-                                                                                                  ('MetaCons
-                                                                                                     "C87"
-                                                                                                     'PrefixI
-                                                                                                     'False)
-                                                                                                  U1
-                                                                                                :+: (C1
-                                                                                                                    ('MetaCons
-                                                                                                                       "C88"
-                                                                                                                       'PrefixI
-                                                                                                                       'False)
-                                                                                                                    U1
-                                                                                                                  :+: C1
-                                                                                                                                     ('MetaCons
-                                                                                                                                        "C89"
-                                                                                                                                        'PrefixI
-                                                                                                                                        'False)
-                                                                                                                                     U1))
-                                                                                               :+: (C1
-                                                                                                                   ('MetaCons
-                                                                                                                      "C90"
-                                                                                                                      'PrefixI
-                                                                                                                      'False)
-                                                                                                                   U1
-                                                                                                                 :+: (C1
-                                                                                                                                     ('MetaCons
-                                                                                                                                        "C91"
-                                                                                                                                        'PrefixI
-                                                                                                                                        'False)
-                                                                                                                                     U1
-                                                                                                                                   :+: C1
-                                                                                                                                                      ('MetaCons
-                                                                                                                                                         "C92"
-                                                                                                                                                         'PrefixI
-                                                                                                                                                         'False)
-                                                                                                                                                      U1)))
-                                                                                              :+: ((C1
-                                                                                                                   ('MetaCons
-                                                                                                                      "C93"
-                                                                                                                      'PrefixI
-                                                                                                                      'False)
-                                                                                                                   U1
-                                                                                                                 :+: (C1
-                                                                                                                                     ('MetaCons
-                                                                                                                                        "C94"
-                                                                                                                                        'PrefixI
-                                                                                                                                        'False)
-                                                                                                                                     U1
-                                                                                                                                   :+: C1
-                                                                                                                                                      ('MetaCons
-                                                                                                                                                         "C95"
-                                                                                                                                                         'PrefixI
-                                                                                                                                                         'False)
-                                                                                                                                                      U1))
-                                                                                                                :+: ((C1
-                                                                                                                                     ('MetaCons
-                                                                                                                                        "C96"
-                                                                                                                                        'PrefixI
-                                                                                                                                        'False)
-                                                                                                                                     U1
-                                                                                                                                   :+: C1
-                                                                                                                                                      ('MetaCons
-                                                                                                                                                         "C97"
-                                                                                                                                                         'PrefixI
-                                                                                                                                                         'False)
-                                                                                                                                                      U1)
-                                                                                                                                  :+: (C1
-                                                                                                                                                      ('MetaCons
-                                                                                                                                                         "C98"
-                                                                                                                                                         'PrefixI
-                                                                                                                                                         'False)
-                                                                                                                                                      U1
-                                                                                                                                                    :+: C1
-                                                                                                                                                                       ('MetaCons
-                                                                                                                                                                          "C99"
-                                                                                                                                                                          'PrefixI
-                                                                                                                                                                          'False)
-                                                                                                                                                                       U1)))))))
-
-
-
-
-
-{-
-data BigProduct = C
-    () () () () () () () () () ()
-    () () () () () () () () () ()
-    () () () () () () () () () ()
-    () () () () () () () () () ()
-    () () () () () () () () () ()
-    () () () () () () () () () ()
-    () () () () () () () () () ()
-    () () () () () () () () () ()
-    () () () () () () () () () ()
-    () () () () () () () () () ()
-    () () () () () () () () () ()
-    () () () () () () () () () ()
-    () () () () () () () () () ()
-    () () () () () () () () () ()
-    () () () () () () () () () ()
-    () () () () () () () () () ()
-    () () () () () () () () () ()
-    () () () () () () () () () ()
-    () () () () () () () () () ()
-    () () () () () () () () () ()
-    () () () () () () () () () ()
-    () () () () () () () () () ()
-    () () () () () () () () () ()
-    () () () () () () () () () ()
-    () () () () () () () () () ()
-    () () () () () () () () () ()
-    () () () () () () () () () ()
-    () () () () () () () () () ()
-    () () () () () () () () () ()
-    () () () () () () () () () ()
     deriving Generic
--}
index 130ba44..7594d19 100644 (file)
@@ -554,7 +554,7 @@ test('T5642',
             # 2014-12-10:  641085256 Improvements in constraints solver
             # 2016-04-06:  462677300
 
-            (wordsize(64),  916484672, 10)])
+            (wordsize(64),  838316496, 10)])
             # prev:        1300000000
             # 2014-07-17:  1358833928 (general round of updates)
             # 2014-08-07:  1402242360 (caused by 1fc60ea)
@@ -570,6 +570,7 @@ test('T5642',
             # 2016-02-08:   950004816 Pattern match checker re-rework
             # 2016-05-12:  1300685592 Make Generic1 poly-kinded
             # 2016-06-05:   916484672 Refactor derived Generic instances to reduce allocations
+            # 2016-09-03:   838316496 Derive the Generic instance in perf/compiler/T5642
       ],
       compile,['-O'])