import Var ( Id, Var )
import Id ( idType, idInfo, idName, idCoreRules, isGlobalId,
isExportedId, mkVanillaGlobal, isLocalId, isNaughtyRecordSelector,
- idArity, idCafInfo, idUnfolding, isImplicitId, setIdInfo
+ idArity, idCafInfo, idUnfolding, isImplicitId, setIdInfo,
+ isTickBoxOp
)
import IdInfo {- loads of stuff -}
import InstEnv ( Instance, DFunId, instanceDFunId, setInstanceDFunId )
localiseName, isExternalName, nameSrcLoc,
isWiredInName, getName
)
-import NameSet ( NameSet, elemNameSet )
+import NameSet ( NameSet, elemNameSet, filterNameSet )
import IfaceEnv ( allocateGlobalBinder )
import NameEnv ( filterNameEnv, mapNameEnv )
import OccName ( TidyOccEnv, initTidyOccEnv, tidyOccName )
, mg_exports = exports
, mg_types = type_env
, mg_insts = insts
- , mg_fam_insts = fam_insts })
+ , mg_fam_insts = fam_insts
+ , mg_modBreaks = modBreaks
+ })
= do { let dflags = hsc_dflags hsc_env
; showPass dflags "Tidy [hoot] type env"
, md_insts = insts'
, md_fam_insts = fam_insts
, md_rules = []
- , md_exports = exports })
+ , md_exports = exports
+ , md_modBreaks = modBreaks
+ , md_vect_info = noVectInfo
+ })
}
where
mg_insts = insts, mg_fam_insts = fam_insts,
mg_binds = binds,
mg_rules = imp_rules,
+ mg_vect_info = vect_info,
mg_dir_imps = dir_imps, mg_deps = deps,
mg_foreign = foreign_stubs,
- mg_hpc_info = hpc_info })
+ mg_hpc_info = hpc_info,
+ mg_modBreaks = modBreaks })
= do { let dflags = hsc_dflags hsc_env
; showPass dflags "Tidy Core"
; implicit_binds = getImplicitBinds type_env
; all_tidy_binds = implicit_binds ++ tidy_binds
; alg_tycons = filter isAlgTyCon (typeEnvTyCons type_env)
+
+ ; tidy_vect_info = VectInfo
+ (filterNameSet (isElemId type_env)
+ (vectInfoCCVar vect_info))
+ -- filter against `type_env', not `tidy_type_env', as we must
+ -- keep all implicit names
}
; endPass dflags "Tidy Core" Opt_D_dump_simpl all_tidy_binds
md_rules = tidy_rules,
md_insts = tidy_insts,
md_fam_insts = fam_insts,
- md_exports = exports })
+ md_exports = exports,
+ md_modBreaks = modBreaks,
+ md_vect_info = tidy_vect_info
+ })
}
lookup_dfun type_env dfun_id
Just (AnId dfun_id') -> dfun_id'
other -> pprPanic "lookup_dfun" (ppr dfun_id)
+isElemId type_env name
+ = case lookupTypeEnv type_env name of
+ Just (AnId _) -> True
+ _ -> False
+
tidyTypeEnv :: Bool -> NameSet -> TypeEnv -> [CoreBind] -> TypeEnv
-- The competed type environment is gotten from
\begin{code}
hasCafRefs :: PackageId -> VarEnv Var -> Arity -> CoreExpr -> CafInfo
hasCafRefs this_pkg p arity expr
- | is_caf || mentions_cafs || is_tick
+ | is_caf || mentions_cafs
= MayHaveCafRefs
| otherwise = NoCafRefs
where
mentions_cafs = isFastTrue (cafRefs p expr)
is_caf = not (arity > 0 || rhsIsStatic this_pkg expr)
- is_tick = case expr of
- Note (TickBox {}) _ -> True
- Note (BinaryTickBox {}) _ -> True
- _ -> False
-
+
-- NB. we pass in the arity of the expression, which is expected
-- to be calculated by exprArity. This is because exprArity
-- knows how much eta expansion is going to be done by