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

Reply via email to