module LoopUnrolling.Plugin ( plugin -- :: Plugin ) where import LoopUnrolling.Pass (peelUnrollLoopsProgram) import GhcPlugins plugin :: Plugin plugin = defaultPlugin { installCoreToDos = install } -- Must simplify before hand to get accurate correct recursive loops install :: [CommandLineOption] -> [CoreToDo] -> CoreM [CoreToDo] install _ todos = do reinitializeGlobals return $ gentle_simpl : unroll : todos where unroll = CoreDoPluginPass "Peel/unroll loops" peelUnrollLoopsProgram gentle_simpl = CoreDoSimplify 10 $ SimplMode { sm_phase = InitialPhase , sm_names = ["Gentle"] , sm_rules = False , sm_inline = False , sm_case_case = False , sm_eta_expand = False }