simonmar:
> > simonmar:
> >> Regardless of the gcc bug, that sequence of ifs looks really dumb.
> >> Can we see the STG fragment that gives rise to this code?
>
> Ok, update and try now. I've cleaned up that code a bit, so hopefully
> gcc won't gag on it.
The test program goes through now:
manzano$ ~/head/i386-unknown-openbsd/ghc/compiler/stage1/ghc-inplace
-fvia-C -c -keep-tmp-files -no-recomp T.hs
mk_switch
%MO_U_Conv I16 I32(I16[I32[R1] + (-2)]) n_tags: 18 dense: 18
mk_switch
%MO_U_Conv I16 I32(I16[I32[R1] + (-2)]) n_tags: 18 dense: 8
mk_switch _c1Eo n_tags: 9 dense: 8
Generating:
_c1Eo = (W_)((*((StgWord16*)((*R1.p) + (-0x2)))));
if (_c1Eo > 0x8) goto _c1Et;
switch (_c1Eo) {
case 0x0: goto _c1Ev;
case 0x1: goto _c1Ex;
case 0x2: goto _c1Ez;
case 0x3: goto _c1EB;
case 0x4: goto _c1Et;
case 0x5: goto _c1ED;
case 0x6: goto _c1EF;
case 0x7: goto _c1EH;
case 0x8: goto _c1EJ;
}
which gcc2 deals with nicely. However, MachOp.hs still falls over:
../../ghc/compiler/stage1/ghc-inplace -H16m -O -istage2/utils
-istage2/basicTypes -istage2/types -istage2/hsSyn -istage2/prelude -istage2/rename
-istage2/typecheck -istage2/deSugar -istage2/coreSyn -istage2/specialise
-istage2/simplCore -istage2/stranal -istage2/stgSyn -istage2/simplStg
-istage2/codeGen -istage2/main -istage2/profiling -istage2/parser
-istage2/cprAnalysis -istage2/compMan -istage2/ndpFlatten -istage2/cbits
-istage2/iface -istage2/cmm -istage2/nativeGen -istage2/ghci -DGHCI -package
template-haskell -package unix -package readline -cpp -fglasgow-exts -fno-generics
-Rghc-timing -I. -IcodeGen -InativeGen -Iparser -recomp -Rghc-timing -O -dcore-lint
-H24m -DDEBUG -H16M '-#include "hschooks.h"' -c cmm/MachOp.hs -o
stage2/cmm/MachOp.o -ohi stage2/cmm/MachOp.hi
mk_switch
%MO_U_Conv I16 I32(I16[I32[R1] + (-2)]) n_tags: 29 dense: 29
mk_switch _c5lO n_tags: 2 dense: 2
mk_switch _c5lT n_tags: 2 dense: 2
mk_switch _c5lY n_tags: 2 dense: 2
mk_switch _c5m3 n_tags: 2 dense: 2
mk_switch _c5m8 n_tags: 2 dense: 2
mk_switch _c5md n_tags: 2 dense: 2
mk_switch _c5mi n_tags: 2 dense: 2
mk_switch _c5mn n_tags: 2 dense: 2
mk_switch _c5ms n_tags: 2 dense: 2
mk_switch _c5mx n_tags: 2 dense: 2
mk_switch _c5mC n_tags: 2 dense: 2
mk_switch _c5mH n_tags: 2 dense: 2
mk_switch _c5mM n_tags: 2 dense: 2
mk_switch _c5mR n_tags: 2 dense: 2
mk_switch _c5mW n_tags: 2 dense: 2
mk_switch _c5n1 n_tags: 2 dense: 2
mk_switch _c5n6 n_tags: 2 dense: 2
mk_switch _c5nb n_tags: 2 dense: 2
mk_switch _c5ng n_tags: 2 dense: 2
mk_switch _c5nl n_tags: 2 dense: 2
mk_switch _c5nq n_tags: 2 dense: 2
mk_switch _c5nv n_tags: 2 dense: 2
mk_switch _c5nA n_tags: 2 dense: 2
mk_switch _c5nF n_tags: 2 dense: 2
mk_switch _c5nK n_tags: 2 dense: 2
mk_switch _c5nP n_tags: 2 dense: 2
mk_switch _c5nU n_tags: 2 dense: 2
mk_switch _c5nZ n_tags: 2 dense: 2
mk_switch _c5o4 n_tags: 2 dense: 2
mk_switch
%MO_U_Conv I16 I32(I16[I32[R1] + (-2)]) n_tags: 26 dense: 26
mk_switch
%MO_U_Conv I16 I32(I16[I32[R1] + (-2)]) n_tags: 29 dense: 29
mk_switch
%MO_U_Conv I16 I32(I16[I32[R1] + (-2)]) n_tags: 29 dense: 29
mk_switch
%MO_U_Conv I16 I32(I16[I32[R1] + (-2)]) n_tags: 29 dense: 10
mk_switch _c5H3 n_tags: 14 dense: 5
mk_switch _c5H3 n_tags: 5 dense: 5
mk_switch _c5H3 n_tags: 15 dense: 5
mk_switch _c5H3 n_tags: 3 dense: 3
mk_switch _c5H3 n_tags: 12 dense: 2
mk_switch _c5H3 n_tags: 10 dense: 2
mk_switch _c5H3 n_tags: 2 dense: 2
mk_switch
%MO_U_Conv I16 I32(I16[I32[R1] + (-2)]) n_tags: 29 dense: 10
mk_switch _c5IS n_tags: 14 dense: 5
mk_switch _c5IS n_tags: 5 dense: 5
mk_switch _c5IS n_tags: 15 dense: 5
mk_switch _c5IS n_tags: 3 dense: 3
mk_switch _c5IS n_tags: 12 dense: 2
mk_switch _c5IS n_tags: 10 dense: 2
mk_switch _c5IS n_tags: 2 dense: 2
mk_switch
%MO_U_Conv I16 I32(I16[I32[R1] + (-2)]) n_tags: 29 dense: 5
mk_switch _c5Jo n_tags: 23 dense: 5
mk_switch _c5Jo n_tags: 3 dense: 3
mk_switch _c5Jo n_tags: 20 dense: 2
mk_switch _c5Jo n_tags: 5 dense: 2
mk_switch
%MO_U_Conv I16 I32(I16[I32[R1] + (-2)]) n_tags: 29 dense: 9
mk_switch _c5JI n_tags: 24 dense: 5
mk_switch _c5JI n_tags: 18 dense: 5
mk_switch _c5JI n_tags: 3 dense: 3
mk_switch _c5JI n_tags: 15 dense: 2
mk_switch _c5JI n_tags: 5 dense: 2
mk_switch _c5JI n_tags: 5 dense: 4
mk_switch _c5Mc n_tags: 2 dense: 2
mk_switch _c5Mi n_tags: 2 dense: 2
mk_switch _c5Mo n_tags: 2 dense: 2
mk_switch _c5Mu n_tags: 2 dense: 2
mk_switch _c5MA n_tags: 2 dense: 2
mk_switch _c5MG n_tags: 2 dense: 2
mk_switch _c5MM n_tags: 2 dense: 2
mk_switch _c5MS n_tags: 2 dense: 2
mk_switch
%MO_U_Conv I16 I32(I16[I32[R1] + (-2)]) n_tags: 29 dense: 29
mk_switch _c5W8 n_tags: 2 dense: 2
/tmp/ghc31130.hc: In function `s5ey_ret':
/tmp/ghc31130.hc:10886: Internal compiler error in `build_insn_chain', at
global.c:1756
Please submit a full bug report.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
The problem C code appears to be:
IF_(s5ey_ret) {
W_ _c5JI;
FB_
_c5JI = (W_)((*((StgWord16*)((*R1.p) + (-0x2)))));
if (_c5JI < 0x5) goto _c5JT;
if (_c5JI > 0x16) goto _c5JU;
if (_c5JI < 0x14) goto _c5JV;
switch (_c5JI-20) {
case 0xe: goto _c5JW;
case 0x1: goto _c5JX;
case 0x2: goto _c5JY;
}
...
switch (_c5JI) {
case 0x0: goto _c5JZ;
case 0x1: goto _c5JU;
case 0x2: goto _c5K0;
case 0x3: goto _c5K1;
case 0x4: goto _c5K2;
}
I've constructed another test case (based on isCommutableMachOp in MachOp.hs)
that fails. The difference to the original test is more gaps between
constructors.
module M where
f a = case a of
A -> True
C -> True
D -> True
E -> True
F -> True
J -> True
U -> True
V -> True
W -> True
data D= A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z
failing with:
mk_switch
%MO_U_Conv I16 I32(I16[I32[R1] + (-2)]) n_tags: 26 dense: 26
mk_switch
%MO_U_Conv I16 I32(I16[I32[R1] + (-2)]) n_tags: 26 dense: 9
mk_switch _c1Uq n_tags: 21 dense: 5
mk_switch _c1Uq n_tags: 6 dense: 3
mk_switch _c1Uq n_tags: 3 dense: 3
mk_switch _c1Uq n_tags: 15 dense: 2
mk_switch _c1Uq n_tags: 5 dense: 2
mk_switch _c1Uq n_tags: 5 dense: 4
/tmp/ghc3752.hc: In function `s1Ug_ret':
/tmp/ghc3752.hc:1244: Internal compiler error in `build_insn_chain', at
global.c:1756
Please submit a full bug report.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
Problem .hc code:
IF_(s1Ug_ret) {
W_ _c1Uq;
FB_
_c1Uq = (W_)((*((StgWord16*)((*R1.p) + (-0x2)))));
if (_c1Uq < 0x5) goto _c1UF;
if (_c1Uq < 0x14) goto _c1UG;
if (_c1Uq > 0x16) goto _c1UH;
switch (_c1Uq-20) {
case 0x0: goto _c1UI;
case 0x1: goto _c1UJ;
case 0x2: goto _c1UK;
}
...
_c1UF:
switch (_c1Uq) {
case 0x0: goto _c1UL;
case 0x1: goto _c1UH;
case 0x2: goto _c1UM;
case 0x3: goto _c1UN;
case 0x4: goto _c1UO;
}
And the STG code for the test case (MachOp.hs is a bit big):
==================== STG syntax: ====================
M.$gfromD =
\r [ds]
case ds of wild {
M.Z ->
let { sat_s1Lx = NO_CCS GHC.Base.Inr! [GHC.Base.Unit]; } in
let { sat_s1Lz = NO_CCS GHC.Base.Inr! [sat_s1Lx]; } in
let { sat_s1LB = NO_CCS GHC.Base.Inr! [sat_s1Lz]; } in
let { sat_s1LD = NO_CCS GHC.Base.Inr! [sat_s1LB]; } in GHC.Base.Inr
[sat_s1LD];
M.Y ->
let { sat_s1LF = NO_CCS GHC.Base.Inl! [GHC.Base.Unit]; } in
let { sat_s1LH = NO_CCS GHC.Base.Inr! [sat_s1LF]; } in
let { sat_s1LJ = NO_CCS GHC.Base.Inr! [sat_s1LH]; } in
let { sat_s1LL = NO_CCS GHC.Base.Inr! [sat_s1LJ]; } in GHC.Base.Inr
[sat_s1LL];
M.X ->
let { sat_s1LN = NO_CCS GHC.Base.Inr! [GHC.Base.Unit]; } in
let { sat_s1LP = NO_CCS GHC.Base.Inl! [sat_s1LN]; } in
let { sat_s1LR = NO_CCS GHC.Base.Inr! [sat_s1LP]; } in
let { sat_s1LT = NO_CCS GHC.Base.Inr! [sat_s1LR]; } in GHC.Base.Inr
[sat_s1LT];
M.W ->
let { sat_s1LV = NO_CCS GHC.Base.Inl! [GHC.Base.Unit]; } in
let { sat_s1LX = NO_CCS GHC.Base.Inl! [sat_s1LV]; } in
let { sat_s1LZ = NO_CCS GHC.Base.Inr! [sat_s1LX]; } in
let { sat_s1M1 = NO_CCS GHC.Base.Inr! [sat_s1LZ]; } in GHC.Base.Inr
[sat_s1M1];
M.V ->
let { sat_s1M3 = NO_CCS GHC.Base.Inr! [GHC.Base.Unit]; } in
let { sat_s1M5 = NO_CCS GHC.Base.Inr! [sat_s1M3]; } in
let { sat_s1M7 = NO_CCS GHC.Base.Inl! [sat_s1M5]; } in
let { sat_s1M9 = NO_CCS GHC.Base.Inr! [sat_s1M7]; } in GHC.Base.Inr
[sat_s1M9];
M.U ->
let { sat_s1Mb = NO_CCS GHC.Base.Inl! [GHC.Base.Unit]; } in
let { sat_s1Md = NO_CCS GHC.Base.Inr! [sat_s1Mb]; } in
let { sat_s1Mf = NO_CCS GHC.Base.Inl! [sat_s1Md]; } in
let { sat_s1Mh = NO_CCS GHC.Base.Inr! [sat_s1Mf]; } in GHC.Base.Inr
[sat_s1Mh];
M.T ->
let { sat_s1Mj = NO_CCS GHC.Base.Inl! [GHC.Base.Unit]; } in
let { sat_s1Ml = NO_CCS GHC.Base.Inl! [sat_s1Mj]; } in
let { sat_s1Mn = NO_CCS GHC.Base.Inr! [sat_s1Ml]; } in GHC.Base.Inr
[sat_s1Mn];
M.S ->
let { sat_s1Mp = NO_CCS GHC.Base.Inr! [GHC.Base.Unit]; } in
let { sat_s1Mr = NO_CCS GHC.Base.Inr! [sat_s1Mp]; } in
let { sat_s1Mt = NO_CCS GHC.Base.Inr! [sat_s1Mr]; } in
let { sat_s1Mv = NO_CCS GHC.Base.Inl! [sat_s1Mt]; } in GHC.Base.Inr
[sat_s1Mv];
M.R ->
let { sat_s1Mx = NO_CCS GHC.Base.Inl! [GHC.Base.Unit]; } in
let { sat_s1Mz = NO_CCS GHC.Base.Inr! [sat_s1Mx]; } in
let { sat_s1MB = NO_CCS GHC.Base.Inr! [sat_s1Mz]; } in
let { sat_s1MD = NO_CCS GHC.Base.Inl! [sat_s1MB]; } in GHC.Base.Inr
[sat_s1MD];
M.Q ->
let { sat_s1MF = NO_CCS GHC.Base.Inl! [GHC.Base.Unit]; } in
let { sat_s1MH = NO_CCS GHC.Base.Inr! [sat_s1MF]; } in
let { sat_s1MJ = NO_CCS GHC.Base.Inl! [sat_s1MH]; } in GHC.Base.Inr
[sat_s1MJ];
M.P ->
let { sat_s1ML = NO_CCS GHC.Base.Inr! [GHC.Base.Unit]; } in
let { sat_s1MN = NO_CCS GHC.Base.Inr! [sat_s1ML]; } in
let { sat_s1MP = NO_CCS GHC.Base.Inl! [sat_s1MN]; } in
let { sat_s1MR = NO_CCS GHC.Base.Inl! [sat_s1MP]; } in GHC.Base.Inr
[sat_s1MR];
M.O ->
let { sat_s1MT = NO_CCS GHC.Base.Inl! [GHC.Base.Unit]; } in
let { sat_s1MV = NO_CCS GHC.Base.Inr! [sat_s1MT]; } in
let { sat_s1MX = NO_CCS GHC.Base.Inl! [sat_s1MV]; } in
let { sat_s1MZ = NO_CCS GHC.Base.Inl! [sat_s1MX]; } in GHC.Base.Inr
[sat_s1MZ];
M.N ->
let { sat_s1N1 = NO_CCS GHC.Base.Inl! [GHC.Base.Unit]; } in
let { sat_s1N3 = NO_CCS GHC.Base.Inl! [sat_s1N1]; } in
let { sat_s1N5 = NO_CCS GHC.Base.Inl! [sat_s1N3]; } in GHC.Base.Inr
[sat_s1N5];
M.M ->
let { sat_s1N7 = NO_CCS GHC.Base.Inr! [GHC.Base.Unit]; } in
let { sat_s1N9 = NO_CCS GHC.Base.Inr! [sat_s1N7]; } in
let { sat_s1Nb = NO_CCS GHC.Base.Inr! [sat_s1N9]; } in
let { sat_s1Nd = NO_CCS GHC.Base.Inr! [sat_s1Nb]; } in GHC.Base.Inl
[sat_s1Nd];
M.L ->
let { sat_s1Nf = NO_CCS GHC.Base.Inl! [GHC.Base.Unit]; } in
let { sat_s1Nh = NO_CCS GHC.Base.Inr! [sat_s1Nf]; } in
let { sat_s1Nj = NO_CCS GHC.Base.Inr! [sat_s1Nh]; } in
let { sat_s1Nl = NO_CCS GHC.Base.Inr! [sat_s1Nj]; } in GHC.Base.Inl
[sat_s1Nl];
M.K ->
let { sat_s1Nn = NO_CCS GHC.Base.Inr! [GHC.Base.Unit]; } in
let { sat_s1Np = NO_CCS GHC.Base.Inl! [sat_s1Nn]; } in
let { sat_s1Nr = NO_CCS GHC.Base.Inr! [sat_s1Np]; } in
let { sat_s1Nt = NO_CCS GHC.Base.Inr! [sat_s1Nr]; } in GHC.Base.Inl
[sat_s1Nt];
M.J ->
let { sat_s1Nv = NO_CCS GHC.Base.Inl! [GHC.Base.Unit]; } in
let { sat_s1Nx = NO_CCS GHC.Base.Inl! [sat_s1Nv]; } in
let { sat_s1Nz = NO_CCS GHC.Base.Inr! [sat_s1Nx]; } in
let { sat_s1NB = NO_CCS GHC.Base.Inr! [sat_s1Nz]; } in GHC.Base.Inl
[sat_s1NB];
M.I ->
let { sat_s1ND = NO_CCS GHC.Base.Inr! [GHC.Base.Unit]; } in
let { sat_s1NF = NO_CCS GHC.Base.Inr! [sat_s1ND]; } in
let { sat_s1NH = NO_CCS GHC.Base.Inl! [sat_s1NF]; } in
let { sat_s1NJ = NO_CCS GHC.Base.Inr! [sat_s1NH]; } in GHC.Base.Inl
[sat_s1NJ];
M.H ->
let { sat_s1NL = NO_CCS GHC.Base.Inl! [GHC.Base.Unit]; } in
let { sat_s1NN = NO_CCS GHC.Base.Inr! [sat_s1NL]; } in
let { sat_s1NP = NO_CCS GHC.Base.Inl! [sat_s1NN]; } in
let { sat_s1NR = NO_CCS GHC.Base.Inr! [sat_s1NP]; } in GHC.Base.Inl
[sat_s1NR];
M.G ->
let { sat_s1NT = NO_CCS GHC.Base.Inl! [GHC.Base.Unit]; } in
let { sat_s1NV = NO_CCS GHC.Base.Inl! [sat_s1NT]; } in
let { sat_s1NX = NO_CCS GHC.Base.Inr! [sat_s1NV]; } in GHC.Base.Inl
[sat_s1NX];
M.F ->
let { sat_s1NZ = NO_CCS GHC.Base.Inr! [GHC.Base.Unit]; } in
let { sat_s1O1 = NO_CCS GHC.Base.Inr! [sat_s1NZ]; } in
let { sat_s1O3 = NO_CCS GHC.Base.Inr! [sat_s1O1]; } in
let { sat_s1O5 = NO_CCS GHC.Base.Inl! [sat_s1O3]; } in GHC.Base.Inl
[sat_s1O5];
M.E ->
let { sat_s1O7 = NO_CCS GHC.Base.Inl! [GHC.Base.Unit]; } in
let { sat_s1O9 = NO_CCS GHC.Base.Inr! [sat_s1O7]; } in
let { sat_s1Ob = NO_CCS GHC.Base.Inr! [sat_s1O9]; } in
let { sat_s1Od = NO_CCS GHC.Base.Inl! [sat_s1Ob]; } in GHC.Base.Inl
[sat_s1Od];
M.D ->
let { sat_s1Of = NO_CCS GHC.Base.Inl! [GHC.Base.Unit]; } in
let { sat_s1Oh = NO_CCS GHC.Base.Inr! [sat_s1Of]; } in
let { sat_s1Oj = NO_CCS GHC.Base.Inl! [sat_s1Oh]; } in GHC.Base.Inl
[sat_s1Oj];
M.C ->
let { sat_s1Ol = NO_CCS GHC.Base.Inr! [GHC.Base.Unit]; } in
let { sat_s1On = NO_CCS GHC.Base.Inr! [sat_s1Ol]; } in
let { sat_s1Op = NO_CCS GHC.Base.Inl! [sat_s1On]; } in
let { sat_s1Or = NO_CCS GHC.Base.Inl! [sat_s1Op]; } in GHC.Base.Inl
[sat_s1Or];
M.B ->
let { sat_s1Ot = NO_CCS GHC.Base.Inl! [GHC.Base.Unit]; } in
let { sat_s1Ov = NO_CCS GHC.Base.Inr! [sat_s1Ot]; } in
let { sat_s1Ox = NO_CCS GHC.Base.Inl! [sat_s1Ov]; } in
let { sat_s1Oz = NO_CCS GHC.Base.Inl! [sat_s1Ox]; } in GHC.Base.Inl
[sat_s1Oz];
M.A ->
let { sat_s1OB = NO_CCS GHC.Base.Inl! [GHC.Base.Unit]; } in
let { sat_s1OD = NO_CCS GHC.Base.Inl! [sat_s1OB]; } in
let { sat_s1OF = NO_CCS GHC.Base.Inl! [sat_s1OD]; } in GHC.Base.Inl
[sat_s1OF];
};
SRT(M.$gfromD): []
M.$gtoD =
\r [g1]
case g1 of wild {
GHC.Base.Inl g2 ->
case g2 of wild1 {
GHC.Base.Inl g3 ->
case g3 of wild2 {
GHC.Base.Inl g4 ->
case g4 of wild3 {
GHC.Base.Inl g5 -> M.A [];
GHC.Base.Inr g5 ->
case g5 of wild4 {
GHC.Base.Inl g6 -> M.B [];
GHC.Base.Inr g6 -> M.C [];
};
};
GHC.Base.Inr g4 ->
case g4 of wild3 {
GHC.Base.Inl g5 -> M.D [];
GHC.Base.Inr g5 ->
case g5 of wild4 {
GHC.Base.Inl g6 -> M.E [];
GHC.Base.Inr g6 -> M.F [];
};
};
};
GHC.Base.Inr g3 ->
case g3 of wild2 {
GHC.Base.Inl g4 ->
case g4 of wild3 {
GHC.Base.Inl g5 -> M.G [];
GHC.Base.Inr g5 ->
case g5 of wild4 {
GHC.Base.Inl g6 -> M.H [];
GHC.Base.Inr g6 -> M.I [];
};
};
GHC.Base.Inr g4 ->
case g4 of wild3 {
GHC.Base.Inl g5 ->
case g5 of wild4 {
GHC.Base.Inl g6 -> M.J [];
GHC.Base.Inr g6 -> M.K [];
};
GHC.Base.Inr g5 ->
case g5 of wild4 {
GHC.Base.Inl g6 -> M.L [];
GHC.Base.Inr g6 -> M.M [];
};
};
};
};
GHC.Base.Inr g2 ->
case g2 of wild1 {
GHC.Base.Inl g3 ->
case g3 of wild2 {
GHC.Base.Inl g4 ->
case g4 of wild3 {
GHC.Base.Inl g5 -> M.N [];
GHC.Base.Inr g5 ->
case g5 of wild4 {
GHC.Base.Inl g6 -> M.O [];
GHC.Base.Inr g6 -> M.P [];
};
};
GHC.Base.Inr g4 ->
case g4 of wild3 {
GHC.Base.Inl g5 -> M.Q [];
GHC.Base.Inr g5 ->
case g5 of wild4 {
GHC.Base.Inl g6 -> M.R [];
GHC.Base.Inr g6 -> M.S [];
};
};
};
GHC.Base.Inr g3 ->
case g3 of wild2 {
GHC.Base.Inl g4 ->
case g4 of wild3 {
GHC.Base.Inl g5 -> M.T [];
GHC.Base.Inr g5 ->
case g5 of wild4 {
GHC.Base.Inl g6 -> M.U [];
GHC.Base.Inr g6 -> M.V [];
};
};
GHC.Base.Inr g4 ->
case g4 of wild3 {
GHC.Base.Inl g5 ->
case g5 of wild4 {
GHC.Base.Inl g6 -> M.W [];
GHC.Base.Inr g6 -> M.X [];
};
GHC.Base.Inr g5 ->
case g5 of wild4 {
GHC.Base.Inl g6 -> M.Y [];
GHC.Base.Inr g6 -> M.Z [];
};
};
};
};
};
SRT(M.$gtoD): []
M.f =
\r srt:(0,*bitmap*) [a]
case a of wild {
__DEFAULT -> GHC.Err.patError "T.hs:(3,6)-(12,16)|case";
M.W -> GHC.Base.True [];
M.V -> GHC.Base.True [];
M.U -> GHC.Base.True [];
M.J -> GHC.Base.True [];
M.F -> GHC.Base.True [];
M.E -> GHC.Base.True [];
M.D -> GHC.Base.True [];
M.C -> GHC.Base.True [];
M.A -> GHC.Base.True [];
};
SRT(M.f): [GHC.Err.patError]
M.A = NO_CCS M.A! [];
SRT(M.A): []
M.B = NO_CCS M.B! [];
SRT(M.B): []
M.C = NO_CCS M.C! [];
SRT(M.C): []
M.D = NO_CCS M.D! [];
SRT(M.D): []
M.E = NO_CCS M.E! [];
SRT(M.E): []
M.F = NO_CCS M.F! [];
SRT(M.F): []
M.G = NO_CCS M.G! [];
SRT(M.G): []
M.H = NO_CCS M.H! [];
SRT(M.H): []
M.I = NO_CCS M.I! [];
SRT(M.I): []
M.J = NO_CCS M.J! [];
SRT(M.J): []
M.K = NO_CCS M.K! [];
SRT(M.K): []
M.L = NO_CCS M.L! [];
SRT(M.L): []
M.M = NO_CCS M.M! [];
SRT(M.M): []
M.N = NO_CCS M.N! [];
SRT(M.N): []
M.O = NO_CCS M.O! [];
SRT(M.O): []
M.P = NO_CCS M.P! [];
SRT(M.P): []
M.Q = NO_CCS M.Q! [];
SRT(M.Q): []
M.R = NO_CCS M.R! [];
SRT(M.R): []
M.S = NO_CCS M.S! [];
SRT(M.S): []
M.T = NO_CCS M.T! [];
SRT(M.T): []
M.U = NO_CCS M.U! [];
SRT(M.U): []
M.V = NO_CCS M.V! [];
SRT(M.V): []
M.W = NO_CCS M.W! [];
SRT(M.W): []
M.X = NO_CCS M.X! [];
SRT(M.X): []
M.Y = NO_CCS M.Y! [];
SRT(M.Y): []
M.Z = NO_CCS M.Z! [];
SRT(M.Z): []
_______________________________________________
Cvs-ghc mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/cvs-ghc