gcc-2.95.3 internal error on head/MachOp.hs

Donald Bruce Stewart dons at cse.unsw.edu.au
Wed Sep 15 03:45:01 EDT 2004


Looking more into the gcc-2.95 "internal compiler error" issue. This appears to
be a known bug internal to gcc-2.95, fixed by 3.0, though it remained
mysterious:
            http://gcc.gnu.org/bugzilla/show_bug.cgi?id=6050
It is only triggered when gcc optimisation is on. -opc-O0 means no bug.

Attached is the .hs and .hc for the record. The bug isn't unique to OpenBSD
gcc. We can trigger it if I take the .hc over to Linux gcc-2.95.4 as well. For
example:
        $ ghc-6.3 -fvia-C -pgmcgcc-2.95 -c t.hc
        t.hc: In function `s1Ee_ret':
        t.hc:865: Internal compiler error:
        t.hc:865: 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 bug doesn't manifest with 3.2 or 3.3, and the bug report was closed for
3.0.4.

The problem seems to be in the if-goto code sequence marked below. In the old
code generator we had a giant switch, but now we have an if-goto block, which
branches to a switch for some cases. gcc seems to get confused by the if-goto
construct, in this case, and it is dependent on the number of branches in the
function somehow:

        IF_(s1Ee_ret) {
                W_ _c1Es;
                FB_
                _c1Es = (W_)((*((StgWord16*)((*R1.p) + (-0x2)))));
              >>>>>
                if (_c1Es < 0x5) goto _c1EB;
                if (_c1Es < 0x7) goto _c1EC;
                if (_c1Es < 0x8) goto _c1ED;
                if (_c1Es != 0x8) goto _c1EE;
              <<<<< 
                R1.p = (P_)(W_)GHCziBase_True_closure;
                Sp=Sp+1;
                JMP_(*((P_)((*Sp) + (-0x14))));
        ...
            _c1EB:
                switch (_c1Es) {
                    case 0x0: goto _c1EF;
                    case 0x1: goto _c1EG;
                    case 0x2: goto _c1EH;
                    case 0x3: goto _c1EI;
                    case 0x4: goto _c1EE;
                }

The bug is sensitive -- adding extra if-goto branches may mean the code goes
through. 

So what to do? 
        a) Require gcc >= 3.0? Maybe we can get away with that, if they strike
        this bug.

        b) Or modify the code gen to generate a combined switch-goto structure
        instead? Translating the whole thing to a switch was the only trick
        that consistenly worked -- I couldn't get a good enough fix on the bug
        to determine other rules for avoiding it, so this is a bit icky.
        Something like this works:

        IF_(s1Ee_ret) {
                W_ _c1Es;
                FB_
                _c1Es = (W_)((*((StgWord16*)((*R1.p) + (-0x2)))));
                switch (_c1Es) {
                    case 0x0: goto _c1EF;
                    case 0x1: goto _c1EG;
                    case 0x2: goto _c1EH;
                    case 0x3: goto _c1EI;
                    case 0x4: goto _c1EE;
                    case 0x5: /* fall through */
                    case 0x6: goto _c1EC;
                    case 0x7: goto _c1ED;
                    default : if (_c1Es != 0x8) goto _c1EE;
                }
                R1.p = (P_)(W_)GHCziBase_True_closure;
                Sp=Sp+1;
                JMP_(*((P_)((*Sp) + (-0x14))));
            _c1EE:

Which way forward? For now, though, I'm switching to gcc-3.3.

-- Don

-------------- next part --------------
module M where

f :: DT -> Bool
f a = case a of -- any less cases and we don't trigger it
        A -> True
        B -> True
        C -> True
        D -> True
-- need to skip E
        F -> True
        G -> True
        H -> True
        I -> True

-- any less constructors and we don't trigger it
data DT = A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R 
-------------- next part --------------
/* GHC_PACKAGES base rts
*/
#include "Stg.h"
#include "HsBase.h"
EI_(M_zdgfromDT_info);
StgWord M_zdgfromDT_closure[] = {
	(W_)M_zdgfromDT_info
};

static StgWord s1BO_info[] = {
	0x0, 0x24
};

EI_(GHCziBase_Unit_closure);
EI_(GHCziBase_Inl_con_info);
EI_(GHCziBase_Inr_con_info);
IF_(s1BO_ret) {
	FB_
	switch (((W_)((*((StgWord16*)((*R1.p) + (-0x2)))))) + 0x0) {
	    case 0x0: goto _c1BW;
	    case 0x1: goto _c1BY;
	    case 0x2: goto _c1C0;
	    case 0x3: goto _c1C2;
	    case 0x4: goto _c1C4;
	    case 0x5: goto _c1C6;
	    case 0x6: goto _c1C8;
	    case 0x7: goto _c1Ca;
	    case 0x8: goto _c1Cc;
	    case 0x9: goto _c1Ce;
	    case 0xa: goto _c1Cg;
	    case 0xb: goto _c1Ci;
	    case 0xc: goto _c1Ck;
	    case 0xd: goto _c1Cm;
	    case 0xe: goto _c1Co;
	    case 0xf: goto _c1Cq;
	    case 0x10: goto _c1Cs;
	    case 0x11: goto _c1Cu;
	}
    _c1BW:
	Hp=Hp+8;
	if ((W_)Hp > (W_)HpLim) goto _c1CP;
	Hp[-7] = (W_)GHCziBase_Inl_con_info;
	Hp[-6] = (W_)GHCziBase_Unit_closure;
	Hp[-5] = (W_)GHCziBase_Inl_con_info;
	Hp[-4] = (W_)Hp-28;
	Hp[-3] = (W_)GHCziBase_Inl_con_info;
	Hp[-2] = (W_)Hp-20;
	Hp[-1] = (W_)GHCziBase_Inl_con_info;
	*Hp = (W_)Hp-12;
	R1.p=Hp-1;
	Sp=Sp+1;
	JMP_(*((P_)((*Sp) + (-0x10))));
    _c1CP:
	HpAlloc = 0x20;
	JMP_(stg_gc_enter_1);
    _c1BY:
	Hp=Hp+8;
	if ((W_)Hp > (W_)HpLim) goto _c1CS;
	Hp[-7] = (W_)GHCziBase_Inr_con_info;
	Hp[-6] = (W_)GHCziBase_Unit_closure;
	Hp[-5] = (W_)GHCziBase_Inl_con_info;
	Hp[-4] = (W_)Hp-28;
	Hp[-3] = (W_)GHCziBase_Inl_con_info;
	Hp[-2] = (W_)Hp-20;
	Hp[-1] = (W_)GHCziBase_Inl_con_info;
	*Hp = (W_)Hp-12;
	R1.p=Hp-1;
	Sp=Sp+1;
	JMP_(*((P_)((*Sp) + (-0x10))));
    _c1CS:
	HpAlloc = 0x20;
	JMP_(stg_gc_enter_1);
    _c1C0:
	Hp=Hp+8;
	if ((W_)Hp > (W_)HpLim) goto _c1CV;
	Hp[-7] = (W_)GHCziBase_Inl_con_info;
	Hp[-6] = (W_)GHCziBase_Unit_closure;
	Hp[-5] = (W_)GHCziBase_Inr_con_info;
	Hp[-4] = (W_)Hp-28;
	Hp[-3] = (W_)GHCziBase_Inl_con_info;
	Hp[-2] = (W_)Hp-20;
	Hp[-1] = (W_)GHCziBase_Inl_con_info;
	*Hp = (W_)Hp-12;
	R1.p=Hp-1;
	Sp=Sp+1;
	JMP_(*((P_)((*Sp) + (-0x10))));
    _c1CV:
	HpAlloc = 0x20;
	JMP_(stg_gc_enter_1);
    _c1C2:
	Hp=Hp+8;
	if ((W_)Hp > (W_)HpLim) goto _c1CY;
	Hp[-7] = (W_)GHCziBase_Inr_con_info;
	Hp[-6] = (W_)GHCziBase_Unit_closure;
	Hp[-5] = (W_)GHCziBase_Inr_con_info;
	Hp[-4] = (W_)Hp-28;
	Hp[-3] = (W_)GHCziBase_Inl_con_info;
	Hp[-2] = (W_)Hp-20;
	Hp[-1] = (W_)GHCziBase_Inl_con_info;
	*Hp = (W_)Hp-12;
	R1.p=Hp-1;
	Sp=Sp+1;
	JMP_(*((P_)((*Sp) + (-0x10))));
    _c1CY:
	HpAlloc = 0x20;
	JMP_(stg_gc_enter_1);
    _c1C4:
	Hp=Hp+8;
	if ((W_)Hp > (W_)HpLim) goto _c1D1;
	Hp[-7] = (W_)GHCziBase_Inl_con_info;
	Hp[-6] = (W_)GHCziBase_Unit_closure;
	Hp[-5] = (W_)GHCziBase_Inl_con_info;
	Hp[-4] = (W_)Hp-28;
	Hp[-3] = (W_)GHCziBase_Inr_con_info;
	Hp[-2] = (W_)Hp-20;
	Hp[-1] = (W_)GHCziBase_Inl_con_info;
	*Hp = (W_)Hp-12;
	R1.p=Hp-1;
	Sp=Sp+1;
	JMP_(*((P_)((*Sp) + (-0x10))));
    _c1D1:
	HpAlloc = 0x20;
	JMP_(stg_gc_enter_1);
    _c1C6:
	Hp=Hp+8;
	if ((W_)Hp > (W_)HpLim) goto _c1D4;
	Hp[-7] = (W_)GHCziBase_Inr_con_info;
	Hp[-6] = (W_)GHCziBase_Unit_closure;
	Hp[-5] = (W_)GHCziBase_Inl_con_info;
	Hp[-4] = (W_)Hp-28;
	Hp[-3] = (W_)GHCziBase_Inr_con_info;
	Hp[-2] = (W_)Hp-20;
	Hp[-1] = (W_)GHCziBase_Inl_con_info;
	*Hp = (W_)Hp-12;
	R1.p=Hp-1;
	Sp=Sp+1;
	JMP_(*((P_)((*Sp) + (-0x10))));
    _c1D4:
	HpAlloc = 0x20;
	JMP_(stg_gc_enter_1);
    _c1C8:
	Hp=Hp+8;
	if ((W_)Hp > (W_)HpLim) goto _c1D7;
	Hp[-7] = (W_)GHCziBase_Inl_con_info;
	Hp[-6] = (W_)GHCziBase_Unit_closure;
	Hp[-5] = (W_)GHCziBase_Inr_con_info;
	Hp[-4] = (W_)Hp-28;
	Hp[-3] = (W_)GHCziBase_Inr_con_info;
	Hp[-2] = (W_)Hp-20;
	Hp[-1] = (W_)GHCziBase_Inl_con_info;
	*Hp = (W_)Hp-12;
	R1.p=Hp-1;
	Sp=Sp+1;
	JMP_(*((P_)((*Sp) + (-0x10))));
    _c1D7:
	HpAlloc = 0x20;
	JMP_(stg_gc_enter_1);
    _c1Ca:
	Hp=Hp+10;
	if ((W_)Hp > (W_)HpLim) goto _c1Da;
	Hp[-9] = (W_)GHCziBase_Inl_con_info;
	Hp[-8] = (W_)GHCziBase_Unit_closure;
	Hp[-7] = (W_)GHCziBase_Inr_con_info;
	Hp[-6] = (W_)Hp-36;
	Hp[-5] = (W_)GHCziBase_Inr_con_info;
	Hp[-4] = (W_)Hp-28;
	Hp[-3] = (W_)GHCziBase_Inr_con_info;
	Hp[-2] = (W_)Hp-20;
	Hp[-1] = (W_)GHCziBase_Inl_con_info;
	*Hp = (W_)Hp-12;
	R1.p=Hp-1;
	Sp=Sp+1;
	JMP_(*((P_)((*Sp) + (-0x10))));
    _c1Da:
	HpAlloc = 0x28;
	JMP_(stg_gc_enter_1);
    _c1Cc:
	Hp=Hp+10;
	if ((W_)Hp > (W_)HpLim) goto _c1Dd;
	Hp[-9] = (W_)GHCziBase_Inr_con_info;
	Hp[-8] = (W_)GHCziBase_Unit_closure;
	Hp[-7] = (W_)GHCziBase_Inr_con_info;
	Hp[-6] = (W_)Hp-36;
	Hp[-5] = (W_)GHCziBase_Inr_con_info;
	Hp[-4] = (W_)Hp-28;
	Hp[-3] = (W_)GHCziBase_Inr_con_info;
	Hp[-2] = (W_)Hp-20;
	Hp[-1] = (W_)GHCziBase_Inl_con_info;
	*Hp = (W_)Hp-12;
	R1.p=Hp-1;
	Sp=Sp+1;
	JMP_(*((P_)((*Sp) + (-0x10))));
    _c1Dd:
	HpAlloc = 0x28;
	JMP_(stg_gc_enter_1);
    _c1Ce:
	Hp=Hp+8;
	if ((W_)Hp > (W_)HpLim) goto _c1Dg;
	Hp[-7] = (W_)GHCziBase_Inl_con_info;
	Hp[-6] = (W_)GHCziBase_Unit_closure;
	Hp[-5] = (W_)GHCziBase_Inl_con_info;
	Hp[-4] = (W_)Hp-28;
	Hp[-3] = (W_)GHCziBase_Inl_con_info;
	Hp[-2] = (W_)Hp-20;
	Hp[-1] = (W_)GHCziBase_Inr_con_info;
	*Hp = (W_)Hp-12;
	R1.p=Hp-1;
	Sp=Sp+1;
	JMP_(*((P_)((*Sp) + (-0x14))));
    _c1Dg:
	HpAlloc = 0x20;
	JMP_(stg_gc_enter_1);
    _c1Cg:
	Hp=Hp+8;
	if ((W_)Hp > (W_)HpLim) goto _c1Dj;
	Hp[-7] = (W_)GHCziBase_Inr_con_info;
	Hp[-6] = (W_)GHCziBase_Unit_closure;
	Hp[-5] = (W_)GHCziBase_Inl_con_info;
	Hp[-4] = (W_)Hp-28;
	Hp[-3] = (W_)GHCziBase_Inl_con_info;
	Hp[-2] = (W_)Hp-20;
	Hp[-1] = (W_)GHCziBase_Inr_con_info;
	*Hp = (W_)Hp-12;
	R1.p=Hp-1;
	Sp=Sp+1;
	JMP_(*((P_)((*Sp) + (-0x14))));
    _c1Dj:
	HpAlloc = 0x20;
	JMP_(stg_gc_enter_1);
    _c1Ci:
	Hp=Hp+8;
	if ((W_)Hp > (W_)HpLim) goto _c1Dm;
	Hp[-7] = (W_)GHCziBase_Inl_con_info;
	Hp[-6] = (W_)GHCziBase_Unit_closure;
	Hp[-5] = (W_)GHCziBase_Inr_con_info;
	Hp[-4] = (W_)Hp-28;
	Hp[-3] = (W_)GHCziBase_Inl_con_info;
	Hp[-2] = (W_)Hp-20;
	Hp[-1] = (W_)GHCziBase_Inr_con_info;
	*Hp = (W_)Hp-12;
	R1.p=Hp-1;
	Sp=Sp+1;
	JMP_(*((P_)((*Sp) + (-0x14))));
    _c1Dm:
	HpAlloc = 0x20;
	JMP_(stg_gc_enter_1);
    _c1Ck:
	Hp=Hp+8;
	if ((W_)Hp > (W_)HpLim) goto _c1Dp;
	Hp[-7] = (W_)GHCziBase_Inr_con_info;
	Hp[-6] = (W_)GHCziBase_Unit_closure;
	Hp[-5] = (W_)GHCziBase_Inr_con_info;
	Hp[-4] = (W_)Hp-28;
	Hp[-3] = (W_)GHCziBase_Inl_con_info;
	Hp[-2] = (W_)Hp-20;
	Hp[-1] = (W_)GHCziBase_Inr_con_info;
	*Hp = (W_)Hp-12;
	R1.p=Hp-1;
	Sp=Sp+1;
	JMP_(*((P_)((*Sp) + (-0x14))));
    _c1Dp:
	HpAlloc = 0x20;
	JMP_(stg_gc_enter_1);
    _c1Cm:
	Hp=Hp+8;
	if ((W_)Hp > (W_)HpLim) goto _c1Ds;
	Hp[-7] = (W_)GHCziBase_Inl_con_info;
	Hp[-6] = (W_)GHCziBase_Unit_closure;
	Hp[-5] = (W_)GHCziBase_Inl_con_info;
	Hp[-4] = (W_)Hp-28;
	Hp[-3] = (W_)GHCziBase_Inr_con_info;
	Hp[-2] = (W_)Hp-20;
	Hp[-1] = (W_)GHCziBase_Inr_con_info;
	*Hp = (W_)Hp-12;
	R1.p=Hp-1;
	Sp=Sp+1;
	JMP_(*((P_)((*Sp) + (-0x14))));
    _c1Ds:
	HpAlloc = 0x20;
	JMP_(stg_gc_enter_1);
    _c1Co:
	Hp=Hp+8;
	if ((W_)Hp > (W_)HpLim) goto _c1Dv;
	Hp[-7] = (W_)GHCziBase_Inr_con_info;
	Hp[-6] = (W_)GHCziBase_Unit_closure;
	Hp[-5] = (W_)GHCziBase_Inl_con_info;
	Hp[-4] = (W_)Hp-28;
	Hp[-3] = (W_)GHCziBase_Inr_con_info;
	Hp[-2] = (W_)Hp-20;
	Hp[-1] = (W_)GHCziBase_Inr_con_info;
	*Hp = (W_)Hp-12;
	R1.p=Hp-1;
	Sp=Sp+1;
	JMP_(*((P_)((*Sp) + (-0x14))));
    _c1Dv:
	HpAlloc = 0x20;
	JMP_(stg_gc_enter_1);
    _c1Cq:
	Hp=Hp+8;
	if ((W_)Hp > (W_)HpLim) goto _c1Dy;
	Hp[-7] = (W_)GHCziBase_Inl_con_info;
	Hp[-6] = (W_)GHCziBase_Unit_closure;
	Hp[-5] = (W_)GHCziBase_Inr_con_info;
	Hp[-4] = (W_)Hp-28;
	Hp[-3] = (W_)GHCziBase_Inr_con_info;
	Hp[-2] = (W_)Hp-20;
	Hp[-1] = (W_)GHCziBase_Inr_con_info;
	*Hp = (W_)Hp-12;
	R1.p=Hp-1;
	Sp=Sp+1;
	JMP_(*((P_)((*Sp) + (-0x14))));
    _c1Dy:
	HpAlloc = 0x20;
	JMP_(stg_gc_enter_1);
    _c1Cs:
	Hp=Hp+10;
	if ((W_)Hp > (W_)HpLim) goto _c1DB;
	Hp[-9] = (W_)GHCziBase_Inl_con_info;
	Hp[-8] = (W_)GHCziBase_Unit_closure;
	Hp[-7] = (W_)GHCziBase_Inr_con_info;
	Hp[-6] = (W_)Hp-36;
	Hp[-5] = (W_)GHCziBase_Inr_con_info;
	Hp[-4] = (W_)Hp-28;
	Hp[-3] = (W_)GHCziBase_Inr_con_info;
	Hp[-2] = (W_)Hp-20;
	Hp[-1] = (W_)GHCziBase_Inr_con_info;
	*Hp = (W_)Hp-12;
	R1.p=Hp-1;
	Sp=Sp+1;
	JMP_(*((P_)((*Sp) + (-0x14))));
    _c1DB:
	HpAlloc = 0x28;
	JMP_(stg_gc_enter_1);
    _c1Cu:
	Hp=Hp+10;
	if ((W_)Hp > (W_)HpLim) goto _c1DE;
	Hp[-9] = (W_)GHCziBase_Inr_con_info;
	Hp[-8] = (W_)GHCziBase_Unit_closure;
	Hp[-7] = (W_)GHCziBase_Inr_con_info;
	Hp[-6] = (W_)Hp-36;
	Hp[-5] = (W_)GHCziBase_Inr_con_info;
	Hp[-4] = (W_)Hp-28;
	Hp[-3] = (W_)GHCziBase_Inr_con_info;
	Hp[-2] = (W_)Hp-20;
	Hp[-1] = (W_)GHCziBase_Inr_con_info;
	*Hp = (W_)Hp-12;
	R1.p=Hp-1;
	Sp=Sp+1;
	JMP_(*((P_)((*Sp) + (-0x14))));
    _c1DE:
	HpAlloc = 0x28;
	JMP_(stg_gc_enter_1);
	FE_
}

StgWord M_zdgfromDT_info[] = {
	0x10004, 0x0, 0x11
};

II_(s1BO_info);
FN_(M_zdgfromDT_entry) {
	FB_
	R1.p = (P_)(*Sp);
	*Sp = (W_)s1BO_info;
	JMP_(*R1.p);
	FE_
}
EI_(M_zdgtoDT_info);
StgWord M_zdgtoDT_closure[] = {
	(W_)M_zdgtoDT_info
};


EI_(M_A_closure);
IF_(s1Eb_0_alt) {
	FB_
	R1.p = (P_)(W_)M_A_closure;
	Sp=Sp+1;
	JMP_(*Sp);
	FE_
}


EI_(M_B_closure);
IF_(s1Eb_1_alt) {
	FB_
	R1.p = (P_)(W_)M_B_closure;
	Sp=Sp+1;
	JMP_(*Sp);
	FE_
}

static StgWord s1Eb_info[] = {
	(W_)s1Eb_1_alt, (W_)s1Eb_0_alt, 0x0, 0x0, 0x25
};


EI_(M_C_closure);
IF_(s1E8_0_alt) {
	FB_
	R1.p = (P_)(W_)M_C_closure;
	Sp=Sp+1;
	JMP_(*Sp);
	FE_
}


EI_(M_D_closure);
IF_(s1E8_1_alt) {
	FB_
	R1.p = (P_)(W_)M_D_closure;
	Sp=Sp+1;
	JMP_(*Sp);
	FE_
}

static StgWord s1E8_info[] = {
	(W_)s1E8_1_alt, (W_)s1E8_0_alt, 0x0, 0x0, 0x25
};


II_(s1Eb_info);
IF_(s1E7_0_alt) {
	FB_
	R1.p = (P_)(R1.p[1]);
	*Sp = (W_)s1Eb_info;
	JMP_(*R1.p);
	FE_
}


II_(s1E8_info);
IF_(s1E7_1_alt) {
	FB_
	R1.p = (P_)(R1.p[1]);
	*Sp = (W_)s1E8_info;
	JMP_(*R1.p);
	FE_
}

static StgWord s1E7_info[] = {
	(W_)s1E7_1_alt, (W_)s1E7_0_alt, 0x0, 0x0, 0x25
};


EI_(M_E_closure);
IF_(s1E4_0_alt) {
	FB_
	R1.p = (P_)(W_)M_E_closure;
	Sp=Sp+1;
	JMP_(*Sp);
	FE_
}


EI_(M_F_closure);
IF_(s1E4_1_alt) {
	FB_
	R1.p = (P_)(W_)M_F_closure;
	Sp=Sp+1;
	JMP_(*Sp);
	FE_
}

static StgWord s1E4_info[] = {
	(W_)s1E4_1_alt, (W_)s1E4_0_alt, 0x0, 0x0, 0x25
};


EI_(M_H_closure);
IF_(s1E0_0_alt) {
	FB_
	R1.p = (P_)(W_)M_H_closure;
	Sp=Sp+1;
	JMP_(*Sp);
	FE_
}


EI_(M_I_closure);
IF_(s1E0_1_alt) {
	FB_
	R1.p = (P_)(W_)M_I_closure;
	Sp=Sp+1;
	JMP_(*Sp);
	FE_
}

static StgWord s1E0_info[] = {
	(W_)s1E0_1_alt, (W_)s1E0_0_alt, 0x0, 0x0, 0x25
};


EI_(M_G_closure);
IF_(s1DZ_0_alt) {
	FB_
	R1.p = (P_)(W_)M_G_closure;
	Sp=Sp+1;
	JMP_(*Sp);
	FE_
}


II_(s1E0_info);
IF_(s1DZ_1_alt) {
	FB_
	R1.p = (P_)(R1.p[1]);
	*Sp = (W_)s1E0_info;
	JMP_(*R1.p);
	FE_
}

static StgWord s1DZ_info[] = {
	(W_)s1DZ_1_alt, (W_)s1DZ_0_alt, 0x0, 0x0, 0x25
};


II_(s1E4_info);
IF_(s1DY_0_alt) {
	FB_
	R1.p = (P_)(R1.p[1]);
	*Sp = (W_)s1E4_info;
	JMP_(*R1.p);
	FE_
}


II_(s1DZ_info);
IF_(s1DY_1_alt) {
	FB_
	R1.p = (P_)(R1.p[1]);
	*Sp = (W_)s1DZ_info;
	JMP_(*R1.p);
	FE_
}

static StgWord s1DY_info[] = {
	(W_)s1DY_1_alt, (W_)s1DY_0_alt, 0x0, 0x0, 0x25
};


II_(s1E7_info);
IF_(s1DX_0_alt) {
	FB_
	R1.p = (P_)(R1.p[1]);
	*Sp = (W_)s1E7_info;
	JMP_(*R1.p);
	FE_
}


II_(s1DY_info);
IF_(s1DX_1_alt) {
	FB_
	R1.p = (P_)(R1.p[1]);
	*Sp = (W_)s1DY_info;
	JMP_(*R1.p);
	FE_
}

static StgWord s1DX_info[] = {
	(W_)s1DX_1_alt, (W_)s1DX_0_alt, 0x0, 0x0, 0x25
};


EI_(M_J_closure);
IF_(s1DU_0_alt) {
	FB_
	R1.p = (P_)(W_)M_J_closure;
	Sp=Sp+1;
	JMP_(*Sp);
	FE_
}


EI_(M_K_closure);
IF_(s1DU_1_alt) {
	FB_
	R1.p = (P_)(W_)M_K_closure;
	Sp=Sp+1;
	JMP_(*Sp);
	FE_
}

static StgWord s1DU_info[] = {
	(W_)s1DU_1_alt, (W_)s1DU_0_alt, 0x0, 0x0, 0x25
};


EI_(M_L_closure);
IF_(s1DR_0_alt) {
	FB_
	R1.p = (P_)(W_)M_L_closure;
	Sp=Sp+1;
	JMP_(*Sp);
	FE_
}


EI_(M_M_closure);
IF_(s1DR_1_alt) {
	FB_
	R1.p = (P_)(W_)M_M_closure;
	Sp=Sp+1;
	JMP_(*Sp);
	FE_
}

static StgWord s1DR_info[] = {
	(W_)s1DR_1_alt, (W_)s1DR_0_alt, 0x0, 0x0, 0x25
};


II_(s1DU_info);
IF_(s1DQ_0_alt) {
	FB_
	R1.p = (P_)(R1.p[1]);
	*Sp = (W_)s1DU_info;
	JMP_(*R1.p);
	FE_
}


II_(s1DR_info);
IF_(s1DQ_1_alt) {
	FB_
	R1.p = (P_)(R1.p[1]);
	*Sp = (W_)s1DR_info;
	JMP_(*R1.p);
	FE_
}

static StgWord s1DQ_info[] = {
	(W_)s1DQ_1_alt, (W_)s1DQ_0_alt, 0x0, 0x0, 0x25
};


EI_(M_N_closure);
IF_(s1DN_0_alt) {
	FB_
	R1.p = (P_)(W_)M_N_closure;
	Sp=Sp+1;
	JMP_(*Sp);
	FE_
}


EI_(M_O_closure);
IF_(s1DN_1_alt) {
	FB_
	R1.p = (P_)(W_)M_O_closure;
	Sp=Sp+1;
	JMP_(*Sp);
	FE_
}

static StgWord s1DN_info[] = {
	(W_)s1DN_1_alt, (W_)s1DN_0_alt, 0x0, 0x0, 0x25
};


EI_(M_Q_closure);
IF_(s1DJ_0_alt) {
	FB_
	R1.p = (P_)(W_)M_Q_closure;
	Sp=Sp+1;
	JMP_(*Sp);
	FE_
}


EI_(M_R_closure);
IF_(s1DJ_1_alt) {
	FB_
	R1.p = (P_)(W_)M_R_closure;
	Sp=Sp+1;
	JMP_(*Sp);
	FE_
}

static StgWord s1DJ_info[] = {
	(W_)s1DJ_1_alt, (W_)s1DJ_0_alt, 0x0, 0x0, 0x25
};


EI_(M_P_closure);
IF_(s1DI_0_alt) {
	FB_
	R1.p = (P_)(W_)M_P_closure;
	Sp=Sp+1;
	JMP_(*Sp);
	FE_
}


II_(s1DJ_info);
IF_(s1DI_1_alt) {
	FB_
	R1.p = (P_)(R1.p[1]);
	*Sp = (W_)s1DJ_info;
	JMP_(*R1.p);
	FE_
}

static StgWord s1DI_info[] = {
	(W_)s1DI_1_alt, (W_)s1DI_0_alt, 0x0, 0x0, 0x25
};


II_(s1DN_info);
IF_(s1DH_0_alt) {
	FB_
	R1.p = (P_)(R1.p[1]);
	*Sp = (W_)s1DN_info;
	JMP_(*R1.p);
	FE_
}


II_(s1DI_info);
IF_(s1DH_1_alt) {
	FB_
	R1.p = (P_)(R1.p[1]);
	*Sp = (W_)s1DI_info;
	JMP_(*R1.p);
	FE_
}

static StgWord s1DH_info[] = {
	(W_)s1DH_1_alt, (W_)s1DH_0_alt, 0x0, 0x0, 0x25
};


II_(s1DQ_info);
IF_(s1DG_0_alt) {
	FB_
	R1.p = (P_)(R1.p[1]);
	*Sp = (W_)s1DQ_info;
	JMP_(*R1.p);
	FE_
}


II_(s1DH_info);
IF_(s1DG_1_alt) {
	FB_
	R1.p = (P_)(R1.p[1]);
	*Sp = (W_)s1DH_info;
	JMP_(*R1.p);
	FE_
}

static StgWord s1DG_info[] = {
	(W_)s1DG_1_alt, (W_)s1DG_0_alt, 0x0, 0x0, 0x25
};


II_(s1DX_info);
IF_(s1DF_0_alt) {
	FB_
	R1.p = (P_)(R1.p[1]);
	*Sp = (W_)s1DX_info;
	JMP_(*R1.p);
	FE_
}


II_(s1DG_info);
IF_(s1DF_1_alt) {
	FB_
	R1.p = (P_)(R1.p[1]);
	*Sp = (W_)s1DG_info;
	JMP_(*R1.p);
	FE_
}

static StgWord s1DF_info[] = {
	(W_)s1DF_1_alt, (W_)s1DF_0_alt, 0x0, 0x0, 0x25
};

StgWord M_zdgtoDT_info[] = {
	0x10004, 0x0, 0x11
};

II_(s1DF_info);
FN_(M_zdgtoDT_entry) {
	FB_
	R1.p = (P_)(*Sp);
	*Sp = (W_)s1DF_info;
	JMP_(*R1.p);
	FE_
}
EI_(GHCziErr_patError_closure);
StgWord M_f_srt[] = {
	(W_)GHCziErr_patError_closure
};

EI_(M_f_info);
StgWord M_f_closure[] = {
	(W_)M_f_info, 0x0
};

static char c1Ep_str[] = "T.hs:(4,6)-(13,16)|case";

static StgWord s1Ee_info[] = {
	(W_)M_f_srt, 0x0, 0x10024
};

EI_(GHCziErr_patError_closure);
EI_(GHCziBase_True_closure);
IF_(s1Ee_ret) {
	W_ _c1Es;
	FB_
	_c1Es = (W_)((*((StgWord16*)((*R1.p) + (-0x2)))));
	switch (_c1Es) {
	    case 0x0: goto _c1EF;
	    case 0x1: goto _c1EG;
	    case 0x2: goto _c1EH;
	    case 0x3: goto _c1EI;
	    case 0x4: goto _c1EE;
            case 0x5: /* fall through */
            case 0x6: goto _c1EC;
            case 0x7: goto _c1ED;
            default : if (_c1Es != 0x8) goto _c1EE;
        }
	R1.p = (P_)(W_)GHCziBase_True_closure;
	Sp=Sp+1;
	JMP_(*((P_)((*Sp) + (-0x14))));
    _c1EE:
	*Sp = (W_)c1Ep_str;
	R1.p = (P_)(W_)GHCziErr_patError_closure;
	Sp=Sp-1;
	JMP_((W_)stg_ap_n_info);
    _c1EF:
	R1.p = (P_)(W_)GHCziBase_True_closure;
	Sp=Sp+1;
	JMP_(*((P_)((*Sp) + (-0x14))));
    _c1EG:
	R1.p = (P_)(W_)GHCziBase_True_closure;
	Sp=Sp+1;
	JMP_(*((P_)((*Sp) + (-0x14))));
    _c1EH:
	R1.p = (P_)(W_)GHCziBase_True_closure;
	Sp=Sp+1;
	JMP_(*((P_)((*Sp) + (-0x14))));
    _c1EI:
	R1.p = (P_)(W_)GHCziBase_True_closure;
	Sp=Sp+1;
	JMP_(*((P_)((*Sp) + (-0x14))));
    _c1EJ:
	R1.p = (P_)(W_)GHCziBase_True_closure;
	Sp=Sp+1;
	JMP_(*((P_)((*Sp) + (-0x14))));
    _c1ED:
	R1.p = (P_)(W_)GHCziBase_True_closure;
	Sp=Sp+1;
	JMP_(*((P_)((*Sp) + (-0x14))));
    _c1EC:
	if (_c1Es < 0x6) goto _c1EJ;
	R1.p = (P_)(W_)GHCziBase_True_closure;
	Sp=Sp+1;
	JMP_(*((P_)((*Sp) + (-0x14))));

	FE_
}

StgWord M_f_info[] = {
	(W_)M_f_srt, 0x10004, 0x0, 0x10011
};

EI_(M_f_closure);
II_(s1Ee_info);
FN_(M_f_entry) {
	FB_
	if (((W_)Sp - 0x4) < (W_)SpLim) goto _c1EL;
	R1.p = (P_)(*Sp);
	*Sp = (W_)s1Ee_info;
	JMP_(*R1.p);
    _c1EL:
	R1.p = (P_)(W_)M_f_closure;
	JMP_(stg_gc_fun);
	FE_
}
EI_(M_A_static_info);
StgWord M_A_closure[] = {
	(W_)M_A_static_info
};
EI_(M_B_static_info);
StgWord M_B_closure[] = {
	(W_)M_B_static_info
};
EI_(M_C_static_info);
StgWord M_C_closure[] = {
	(W_)M_C_static_info
};
EI_(M_D_static_info);
StgWord M_D_closure[] = {
	(W_)M_D_static_info
};
EI_(M_E_static_info);
StgWord M_E_closure[] = {
	(W_)M_E_static_info
};
EI_(M_F_static_info);
StgWord M_F_closure[] = {
	(W_)M_F_static_info
};
EI_(M_G_static_info);
StgWord M_G_closure[] = {
	(W_)M_G_static_info
};
EI_(M_H_static_info);
StgWord M_H_closure[] = {
	(W_)M_H_static_info
};
EI_(M_I_static_info);
StgWord M_I_closure[] = {
	(W_)M_I_static_info
};
EI_(M_J_static_info);
StgWord M_J_closure[] = {
	(W_)M_J_static_info
};
EI_(M_K_static_info);
StgWord M_K_closure[] = {
	(W_)M_K_static_info
};
EI_(M_L_static_info);
StgWord M_L_closure[] = {
	(W_)M_L_static_info
};
EI_(M_M_static_info);
StgWord M_M_closure[] = {
	(W_)M_M_static_info
};
EI_(M_N_static_info);
StgWord M_N_closure[] = {
	(W_)M_N_static_info
};
EI_(M_O_static_info);
StgWord M_O_closure[] = {
	(W_)M_O_static_info
};
EI_(M_P_static_info);
StgWord M_P_closure[] = {
	(W_)M_P_static_info
};
EI_(M_Q_static_info);
StgWord M_Q_closure[] = {
	(W_)M_Q_static_info
};
EI_(M_R_static_info);
StgWord M_R_closure[] = {
	(W_)M_R_static_info
};
EI_(M_R_closure);
EI_(M_Q_closure);
EI_(M_P_closure);
EI_(M_O_closure);
EI_(M_N_closure);
EI_(M_M_closure);
EI_(M_L_closure);
EI_(M_K_closure);
EI_(M_J_closure);
EI_(M_I_closure);
EI_(M_H_closure);
EI_(M_G_closure);
EI_(M_F_closure);
EI_(M_E_closure);
EI_(M_D_closure);
EI_(M_C_closure);
EI_(M_B_closure);
EI_(M_A_closure);
StgWord M_DT_closure_tbl[] = {
	(W_)M_A_closure, (W_)M_B_closure, (W_)M_C_closure, (W_)M_D_closure, (W_)M_E_closure, (W_)M_F_closure, (W_)M_G_closure, (W_)M_H_closure, (W_)M_I_closure, (W_)M_J_closure, (W_)M_K_closure, (W_)M_L_closure, (W_)M_M_closure, (W_)M_N_closure, (W_)M_O_closure, (W_)M_P_closure, (W_)M_Q_closure, (W_)M_R_closure
};
StgWord M_A_static_info[] = {
	0x0, 0xa
};

FN_(M_A_static_entry) {
	FB_
	JMP_(*Sp);
	FE_
}
StgWord M_B_static_info[] = {
	0x0, 0x1000a
};

FN_(M_B_static_entry) {
	FB_
	JMP_(*Sp);
	FE_
}
StgWord M_C_static_info[] = {
	0x0, 0x2000a
};

FN_(M_C_static_entry) {
	FB_
	JMP_(*Sp);
	FE_
}
StgWord M_D_static_info[] = {
	0x0, 0x3000a
};

FN_(M_D_static_entry) {
	FB_
	JMP_(*Sp);
	FE_
}
StgWord M_E_static_info[] = {
	0x0, 0x4000a
};

FN_(M_E_static_entry) {
	FB_
	JMP_(*Sp);
	FE_
}
StgWord M_F_static_info[] = {
	0x0, 0x5000a
};

FN_(M_F_static_entry) {
	FB_
	JMP_(*Sp);
	FE_
}
StgWord M_G_static_info[] = {
	0x0, 0x6000a
};

FN_(M_G_static_entry) {
	FB_
	JMP_(*Sp);
	FE_
}
StgWord M_H_static_info[] = {
	0x0, 0x7000a
};

FN_(M_H_static_entry) {
	FB_
	JMP_(*Sp);
	FE_
}
StgWord M_I_static_info[] = {
	0x0, 0x8000a
};

FN_(M_I_static_entry) {
	FB_
	JMP_(*Sp);
	FE_
}
StgWord M_J_static_info[] = {
	0x0, 0x9000a
};

FN_(M_J_static_entry) {
	FB_
	JMP_(*Sp);
	FE_
}
StgWord M_K_static_info[] = {
	0x0, 0xa000a
};

FN_(M_K_static_entry) {
	FB_
	JMP_(*Sp);
	FE_
}
StgWord M_L_static_info[] = {
	0x0, 0xb000a
};

FN_(M_L_static_entry) {
	FB_
	JMP_(*Sp);
	FE_
}
StgWord M_M_static_info[] = {
	0x0, 0xc000a
};

FN_(M_M_static_entry) {
	FB_
	JMP_(*Sp);
	FE_
}
StgWord M_N_static_info[] = {
	0x0, 0xd000a
};

FN_(M_N_static_entry) {
	FB_
	JMP_(*Sp);
	FE_
}
StgWord M_O_static_info[] = {
	0x0, 0xe000a
};

FN_(M_O_static_entry) {
	FB_
	JMP_(*Sp);
	FE_
}
StgWord M_P_static_info[] = {
	0x0, 0xf000a
};

FN_(M_P_static_entry) {
	FB_
	JMP_(*Sp);
	FE_
}
StgWord M_Q_static_info[] = {
	0x0, 0x10000a
};

FN_(M_Q_static_entry) {
	FB_
	JMP_(*Sp);
	FE_
}
StgWord M_R_static_info[] = {
	0x0, 0x11000a
};

FN_(M_R_static_entry) {
	FB_
	JMP_(*Sp);
	FE_
}
static StgWord _module_registered[] = {
	0x0
};


EF_(__stginit_Prelude_);
FN_(__stginit_M_) {
	FB_
	if (0x0 != (*((P_)(W_)_module_registered))) goto _c1Fn;
	goto _c1Fp;
    _c1Fn:
	Sp=Sp+1;
	JMP_(Sp[-1]);
    _c1Fp:
	*((P_)(W_)_module_registered) = 0x1;
	Sp=Sp-1;
	*Sp = (W_)__stginit_Prelude_;
	goto _c1Fn;
	FE_
}


EF_(__stginit_M_);
FN_(__stginit_M) {
	FB_
	JMP_((W_)__stginit_M_);
	FE_
}


More information about the Cvs-ghc mailing list