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.