{-# LANGUAGE FlexibleContexts #-} module Futhark.Pass.Simplify ( simplify, simplifySOACS, simplifySeq, simplifyMC, simplifyGPU, simplifyGPUMem, simplifySeqMem, simplifyMCMem, ) where import qualified Futhark.IR.GPU.Simplify as GPU import qualified Futhark.IR.GPUMem as GPUMem import qualified Futhark.IR.MC as MC import qualified Futhark.IR.MCMem as MCMem import qualified Futhark.IR.SOACS.Simplify as SOACS import qualified Futhark.IR.Seq as Seq import qualified Futhark.IR.SeqMem as SeqMem import Futhark.IR.Syntax import Futhark.Pass simplify :: (Prog rep -> PassM (Prog rep)) -> Pass rep rep simplify :: forall rep. (Prog rep -> PassM (Prog rep)) -> Pass rep rep simplify = forall fromrep torep. String -> String -> (Prog fromrep -> PassM (Prog torep)) -> Pass fromrep torep Pass String "simplify" String "Perform simple enabling optimisations." simplifySOACS :: Pass SOACS.SOACS SOACS.SOACS simplifySOACS :: Pass SOACS SOACS simplifySOACS = forall rep. (Prog rep -> PassM (Prog rep)) -> Pass rep rep simplify Prog SOACS -> PassM (Prog SOACS) SOACS.simplifySOACS simplifyGPU :: Pass GPU.GPU GPU.GPU simplifyGPU :: Pass GPU GPU simplifyGPU = forall rep. (Prog rep -> PassM (Prog rep)) -> Pass rep rep simplify Prog GPU -> PassM (Prog GPU) GPU.simplifyGPU simplifySeq :: Pass Seq.Seq Seq.Seq simplifySeq :: Pass Seq Seq simplifySeq = forall rep. (Prog rep -> PassM (Prog rep)) -> Pass rep rep simplify Prog Seq -> PassM (Prog Seq) Seq.simplifyProg simplifyMC :: Pass MC.MC MC.MC simplifyMC :: Pass MC MC simplifyMC = forall rep. (Prog rep -> PassM (Prog rep)) -> Pass rep rep simplify Prog MC -> PassM (Prog MC) MC.simplifyProg simplifyGPUMem :: Pass GPUMem.GPUMem GPUMem.GPUMem simplifyGPUMem :: Pass GPUMem GPUMem simplifyGPUMem = forall rep. (Prog rep -> PassM (Prog rep)) -> Pass rep rep simplify Prog GPUMem -> PassM (Prog GPUMem) GPUMem.simplifyProg simplifySeqMem :: Pass SeqMem.SeqMem SeqMem.SeqMem simplifySeqMem :: Pass SeqMem SeqMem simplifySeqMem = forall rep. (Prog rep -> PassM (Prog rep)) -> Pass rep rep simplify Prog SeqMem -> PassM (Prog SeqMem) SeqMem.simplifyProg simplifyMCMem :: Pass MCMem.MCMem MCMem.MCMem simplifyMCMem :: Pass MCMem MCMem simplifyMCMem = forall rep. (Prog rep -> PassM (Prog rep)) -> Pass rep rep simplify Prog MCMem -> PassM (Prog MCMem) MCMem.simplifyProg