Use isFamFreeTyCon now we have it
authorSimon Peyton Jones <simonpj@microsoft.com>
Mon, 5 Dec 2016 13:50:48 +0000 (13:50 +0000)
committerSimon Peyton Jones <simonpj@microsoft.com>
Mon, 5 Dec 2016 17:40:05 +0000 (17:40 +0000)
Refactoring only

compiler/typecheck/TcFlatten.hs
compiler/types/TyCon.hs
testsuite/tests/perf/compiler/all.T

index 94fdfb8..700412b 100644 (file)
@@ -19,7 +19,6 @@ import TyCoRep   -- performs delicate algorithm on types
 import Coercion
 import Var
 import VarEnv
-import NameEnv
 import Outputable
 import TcSMonad as TcS
 import BasicTypes( SwapFlag(..) )
@@ -895,19 +894,16 @@ flatten_one (AppTy ty1 ty2)
                                    role2 co2 xi2 ty2
                                    role1 ) }  -- output should match fmode
 
-flatten_one ty@(TyConApp tc tys)
+flatten_one (TyConApp tc tys)
   -- Expand type synonyms that mention type families
   -- on the RHS; see Note [Flattening synonyms]
   | Just (tenv, rhs, tys') <- expandSynTyCon_maybe tc tys
   , let expanded_ty = mkAppTys (substTy (mkTvSubstPrs tenv) rhs) tys'
   = do { mode <- getMode
-       ; let used_tcs = tyConsOfType rhs
        ; case mode of
-           FM_FlattenAll | anyNameEnv isTypeFamilyTyCon used_tcs
-                         -> do { traceFlat "flatten_one syn expand" (ppr ty $$ ppr used_tcs)
-                               ; flatten_one expanded_ty }
-           _             -> do { traceFlat "flatten_one syn no expand" (ppr ty)
-                               ; flatten_ty_con_app tc tys } }
+           FM_FlattenAll | not (isFamFreeTyCon tc)
+                         -> flatten_one expanded_ty
+           _             -> flatten_ty_con_app tc tys }
 
   -- Otherwise, it's a type function application, and we have to
   -- flatten it away as well, and generate a new given equality constraint
index ebb18f0..ec2f5d5 100644 (file)
@@ -627,7 +627,7 @@ data TyCon
         synIsTau     :: Bool,   -- True <=> the RHS of this synonym does not
                                  --          have any foralls, after expanding any
                                  --          nested synonyms
-        synIsFamFree  :: Bool    -- True <=> the RHS of this synonym does mention
+        synIsFamFree  :: Bool    -- True <=> the RHS of this synonym does not mention
                                  --          any type synonym families (data families
                                  --          are fine), again after expanding any
                                  --          nested synonyms
index 7ce6562..0ccde15 100644 (file)
@@ -767,7 +767,7 @@ test('T9872c',
 test('T9872d',
      [ only_ways(['normal']),
        compiler_stats_num_field('bytes allocated',
-          [(wordsize(64), 506691240, 5),
+          [(wordsize(64), 478169352, 5),
           # 2014-12-18    796071864   Initally created
           # 2014-12-18    739189056   Reduce type families even more eagerly
           # 2015-01-07    687562440   TrieMap leaf compression
@@ -775,6 +775,8 @@ test('T9872d',
           # 2015-12-11    566134504   TypeInType; see #11196
           # 2016-02-08    534693648   Improved a bit by tyConRolesRepresentational
           # 2016-03-18    506691240   optimize Unify & zonking
+          # 2016-12-05    478169352   using tyConIsTyFamFree, I think, but only
+          #                           a 1% improvement 482 -> 478
            (wordsize(32), 264566040, 5)
           # some date     328810212
           # 2015-07-11    350369584