simonmar:
> On 15 September 2004 08:45, Donald Bruce Stewart wrote:
> > 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;
> > }
>
> Regardless of the gcc bug, that sequence of ifs looks really dumb. Can
> we see the STG fragment that gives rise to this code?
-ddump-stg attached.
Cheers,
Don
==================== STG syntax: ====================
M.$gfromDT =
\r [ds]
case ds of wild {
M.R ->
let { sat_s1yt = NO_CCS GHC.Base.Inr! [GHC.Base.Unit]; } in
let { sat_s1yv = NO_CCS GHC.Base.Inr! [sat_s1yt]; } in
let { sat_s1yx = NO_CCS GHC.Base.Inr! [sat_s1yv]; } in
let { sat_s1yz = NO_CCS GHC.Base.Inr! [sat_s1yx]; } in GHC.Base.Inr
[sat_s1yz];
M.Q ->
let { sat_s1yB = NO_CCS GHC.Base.Inl! [GHC.Base.Unit]; } in
let { sat_s1yD = NO_CCS GHC.Base.Inr! [sat_s1yB]; } in
let { sat_s1yF = NO_CCS GHC.Base.Inr! [sat_s1yD]; } in
let { sat_s1yH = NO_CCS GHC.Base.Inr! [sat_s1yF]; } in GHC.Base.Inr
[sat_s1yH];
M.P ->
let { sat_s1yJ = NO_CCS GHC.Base.Inl! [GHC.Base.Unit]; } in
let { sat_s1yL = NO_CCS GHC.Base.Inr! [sat_s1yJ]; } in
let { sat_s1yN = NO_CCS GHC.Base.Inr! [sat_s1yL]; } in GHC.Base.Inr
[sat_s1yN];
M.O ->
let { sat_s1yP = NO_CCS GHC.Base.Inr! [GHC.Base.Unit]; } in
let { sat_s1yR = NO_CCS GHC.Base.Inl! [sat_s1yP]; } in
let { sat_s1yT = NO_CCS GHC.Base.Inr! [sat_s1yR]; } in GHC.Base.Inr
[sat_s1yT];
M.N ->
let { sat_s1yV = NO_CCS GHC.Base.Inl! [GHC.Base.Unit]; } in
let { sat_s1yX = NO_CCS GHC.Base.Inl! [sat_s1yV]; } in
let { sat_s1yZ = NO_CCS GHC.Base.Inr! [sat_s1yX]; } in GHC.Base.Inr
[sat_s1yZ];
M.M ->
let { sat_s1z1 = NO_CCS GHC.Base.Inr! [GHC.Base.Unit]; } in
let { sat_s1z3 = NO_CCS GHC.Base.Inr! [sat_s1z1]; } in
let { sat_s1z5 = NO_CCS GHC.Base.Inl! [sat_s1z3]; } in GHC.Base.Inr
[sat_s1z5];
M.L ->
let { sat_s1z7 = NO_CCS GHC.Base.Inl! [GHC.Base.Unit]; } in
let { sat_s1z9 = NO_CCS GHC.Base.Inr! [sat_s1z7]; } in
let { sat_s1zb = NO_CCS GHC.Base.Inl! [sat_s1z9]; } in GHC.Base.Inr
[sat_s1zb];
M.K ->
let { sat_s1zd = NO_CCS GHC.Base.Inr! [GHC.Base.Unit]; } in
let { sat_s1zf = NO_CCS GHC.Base.Inl! [sat_s1zd]; } in
let { sat_s1zh = NO_CCS GHC.Base.Inl! [sat_s1zf]; } in GHC.Base.Inr
[sat_s1zh];
M.J ->
let { sat_s1zj = NO_CCS GHC.Base.Inl! [GHC.Base.Unit]; } in
let { sat_s1zl = NO_CCS GHC.Base.Inl! [sat_s1zj]; } in
let { sat_s1zn = NO_CCS GHC.Base.Inl! [sat_s1zl]; } in GHC.Base.Inr
[sat_s1zn];
M.I ->
let { sat_s1zp = NO_CCS GHC.Base.Inr! [GHC.Base.Unit]; } in
let { sat_s1zr = NO_CCS GHC.Base.Inr! [sat_s1zp]; } in
let { sat_s1zt = NO_CCS GHC.Base.Inr! [sat_s1zr]; } in
let { sat_s1zv = NO_CCS GHC.Base.Inr! [sat_s1zt]; } in GHC.Base.Inl
[sat_s1zv];
M.H ->
let { sat_s1zx = NO_CCS GHC.Base.Inl! [GHC.Base.Unit]; } in
let { sat_s1zz = NO_CCS GHC.Base.Inr! [sat_s1zx]; } in
let { sat_s1zB = NO_CCS GHC.Base.Inr! [sat_s1zz]; } in
let { sat_s1zD = NO_CCS GHC.Base.Inr! [sat_s1zB]; } in GHC.Base.Inl
[sat_s1zD];
M.G ->
let { sat_s1zF = NO_CCS GHC.Base.Inl! [GHC.Base.Unit]; } in
let { sat_s1zH = NO_CCS GHC.Base.Inr! [sat_s1zF]; } in
let { sat_s1zJ = NO_CCS GHC.Base.Inr! [sat_s1zH]; } in GHC.Base.Inl
[sat_s1zJ];
M.F ->
let { sat_s1zL = NO_CCS GHC.Base.Inr! [GHC.Base.Unit]; } in
let { sat_s1zN = NO_CCS GHC.Base.Inl! [sat_s1zL]; } in
let { sat_s1zP = NO_CCS GHC.Base.Inr! [sat_s1zN]; } in GHC.Base.Inl
[sat_s1zP];
M.E ->
let { sat_s1zR = NO_CCS GHC.Base.Inl! [GHC.Base.Unit]; } in
let { sat_s1zT = NO_CCS GHC.Base.Inl! [sat_s1zR]; } in
let { sat_s1zV = NO_CCS GHC.Base.Inr! [sat_s1zT]; } in GHC.Base.Inl
[sat_s1zV];
M.D ->
let { sat_s1zX = NO_CCS GHC.Base.Inr! [GHC.Base.Unit]; } in
let { sat_s1zZ = NO_CCS GHC.Base.Inr! [sat_s1zX]; } in
let { sat_s1A1 = NO_CCS GHC.Base.Inl! [sat_s1zZ]; } in GHC.Base.Inl
[sat_s1A1];
M.C ->
let { sat_s1A3 = NO_CCS GHC.Base.Inl! [GHC.Base.Unit]; } in
let { sat_s1A5 = NO_CCS GHC.Base.Inr! [sat_s1A3]; } in
let { sat_s1A7 = NO_CCS GHC.Base.Inl! [sat_s1A5]; } in GHC.Base.Inl
[sat_s1A7];
M.B ->
let { sat_s1A9 = NO_CCS GHC.Base.Inr! [GHC.Base.Unit]; } in
let { sat_s1Ab = NO_CCS GHC.Base.Inl! [sat_s1A9]; } in
let { sat_s1Ad = NO_CCS GHC.Base.Inl! [sat_s1Ab]; } in GHC.Base.Inl
[sat_s1Ad];
M.A ->
let { sat_s1Af = NO_CCS GHC.Base.Inl! [GHC.Base.Unit]; } in
let { sat_s1Ah = NO_CCS GHC.Base.Inl! [sat_s1Af]; } in
let { sat_s1Aj = NO_CCS GHC.Base.Inl! [sat_s1Ah]; } in GHC.Base.Inl
[sat_s1Aj];
};
SRT(M.$gfromDT): []
M.$gtoDT =
\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 -> M.B [];
};
GHC.Base.Inr g4 ->
case g4 of wild3 {
GHC.Base.Inl g5 -> M.C [];
GHC.Base.Inr g5 -> M.D [];
};
};
GHC.Base.Inr g3 ->
case g3 of wild2 {
GHC.Base.Inl g4 ->
case g4 of wild3 {
GHC.Base.Inl g5 -> M.E [];
GHC.Base.Inr g5 -> M.F [];
};
GHC.Base.Inr 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 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.J [];
GHC.Base.Inr g5 -> M.K [];
};
GHC.Base.Inr g4 ->
case g4 of wild3 {
GHC.Base.Inl g5 -> M.L [];
GHC.Base.Inr g5 -> M.M [];
};
};
GHC.Base.Inr g3 ->
case g3 of wild2 {
GHC.Base.Inl g4 ->
case g4 of wild3 {
GHC.Base.Inl g5 -> M.N [];
GHC.Base.Inr g5 -> M.O [];
};
GHC.Base.Inr g4 ->
case g4 of wild3 {
GHC.Base.Inl g5 -> M.P [];
GHC.Base.Inr g5 ->
case g5 of wild4 {
GHC.Base.Inl g6 -> M.Q [];
GHC.Base.Inr g6 -> M.R [];
};
};
};
};
};
SRT(M.$gtoDT): []
M.f =
\r srt:(0,*bitmap*) [a]
case a of wild {
__DEFAULT -> GHC.Err.patError "T.hs:(4,6)-(13,16)|case";
M.I -> GHC.Base.True [];
M.H -> GHC.Base.True [];
M.G -> GHC.Base.True [];
M.F -> GHC.Base.True [];
M.D -> GHC.Base.True [];
M.C -> GHC.Base.True [];
M.B -> 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): []
_______________________________________________
Cvs-ghc mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/cvs-ghc