Skip to content

Optimising Name comparisons

In !4986 (closed) we noticed that code like this:

     = if | tc == intTyConName     -> ...
          | tc == int8TyConName    -> ...
          | tc == int16TyConName   -> ...
          | tc == int32TyConName   -> ...
          | tc == int64TyConName   -> ...
          | tc == wordTyConName    -> ...
          | tc == word8TyConName   -> ...
          | tc == word16TyConName  -> ...
          | tc == word32TyConName  -> ...
          | tc == word64TyConName  -> ...
          | tc == naturalTyConName -> ...

turns into:

              case ghc-prim-0.5.3:GHC.Prim.==# dt_aBm5 dt1_aBmc of {
                __DEFAULT ->
                  case wordTyConName of
                  { GHC.Types.Name.Name ds7_XBv6 ds8_XBv8 dt2_XBva ds9_XBvc ->
                  case ghc-prim-0.5.3:GHC.Prim.==# dt_aBm5 dt2_XBva of {
                    __DEFAULT ->
                      case int8TyConName of
                      { GHC.Types.Name.Name ds10_XBvh ds11_XBvj dt3_XBvl ds12_XBvn ->
                      case ghc-prim-0.5.3:GHC.Prim.==# dt_aBm5 dt3_XBvl of {
                        __DEFAULT ->
                          case int16TyConName of
                          { GHC.Types.Name.Name ds13_XBvs ds14_XBvu dt4_XBvw ds15_XBvy ->
                          case ghc-prim-0.5.3:GHC.Prim.==# dt_aBm5 dt4_XBvw of {
                            __DEFAULT ->
                              case int32TyConName of
                              { GHC.Types.Name.Name ds16_XBvD ds17_XBvF dt5_XBvH ds18_XBvJ ->
                              case ghc-prim-0.5.3:GHC.Prim.==# dt_aBm5 dt5_XBvH of {
                                __DEFAULT ->
                                  case int64TyConName of
                                  { GHC.Types.Name.Name ds19_XBvO ds20_XBvQ dt6_XBvS ds21_XBvU ->

While we would expect it to turn into a single case expression on the Name's Unique.

To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information