summaryrefslogtreecommitdiff
path: root/testsuite/tests/ghc-regress/perf/compiler/T5030.hs
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/tests/ghc-regress/perf/compiler/T5030.hs')
-rw-r--r--testsuite/tests/ghc-regress/perf/compiler/T5030.hs194
1 files changed, 0 insertions, 194 deletions
diff --git a/testsuite/tests/ghc-regress/perf/compiler/T5030.hs b/testsuite/tests/ghc-regress/perf/compiler/T5030.hs
deleted file mode 100644
index b65e9cdd3c..0000000000
--- a/testsuite/tests/ghc-regress/perf/compiler/T5030.hs
+++ /dev/null
@@ -1,194 +0,0 @@
-{-# LANGUAGE TypeFamilies, GADTs, EmptyDataDecls, FlexibleContexts #-}
-{-# LANGUAGE UndecidableInstances #-}
-
-module SlowComp where
-
-import Control.Monad
-
--------------------------------------------------------------------------------
--- Usual Peano integers.
-
-
-class NatInt a where
- natInt :: a -> Int
-
-data D0 n = D0 {d0Arg :: n}
-data D1 n = D1 {d1Arg :: n}
-
-data C0
-data C1
-
-class DPosInt n where posInt :: n -> (Int,Int)
-instance DPosInt () where posInt _ = (0,1)
-instance DPosInt n => DPosInt (D0 n) where
- posInt a = (dsum,w*2)
- where
- (dsum,w) = posInt $ d0Arg a
-instance DPosInt n => DPosInt (D1 n) where
- posInt a = (dsum+w,w*2)
- where
- (dsum,w) = posInt $ d1Arg a
-
-instance NatInt () where natInt _ = 0
-instance DPosInt n => NatInt (D0 n) where natInt a = fst $ posInt a
-instance DPosInt n => NatInt (D1 n) where natInt a = fst $ posInt a
-
-type family DRev a
-type instance DRev a = DRev' a ()
-
-type family DRev' x acc
-type instance DRev' () acc = acc
-type instance DRev' (D0 a) acc = DRev' a (D0 acc)
-type instance DRev' (D1 a) acc = DRev' a (D1 acc)
-
-type family DAddC c a b
-type instance DAddC C0 (D0 a) (D0 b) = D0 (DAddC C0 a b)
-type instance DAddC C0 (D1 a) (D0 b) = D1 (DAddC C0 a b)
-type instance DAddC C0 (D0 a) (D1 b) = D1 (DAddC C0 a b)
-type instance DAddC C0 (D1 a) (D1 b) = D0 (DAddC C1 a b)
-type instance DAddC C1 (D0 a) (D0 b) = D1 (DAddC C0 a b)
-type instance DAddC C1 (D1 a) (D0 b) = D0 (DAddC C1 a b)
-type instance DAddC C1 (D0 a) (D1 b) = D0 (DAddC C1 a b)
-type instance DAddC C1 (D1 a) (D1 b) = D1 (DAddC C1 a b)
-type instance DAddC C0 () () = ()
-type instance DAddC C1 () () = D1 ()
-type instance DAddC c (D0 a) () = DAddC c (D0 a) (D0 ())
-type instance DAddC c (D1 a) () = DAddC c (D1 a) (D0 ())
-type instance DAddC c () (D0 b) = DAddC c (D0 b) (D0 ())
-type instance DAddC c () (D1 b) = DAddC c (D1 b) (D0 ())
-
-type family DNorm a
-type instance DNorm () = D0 ()
-type instance DNorm (D0 ()) = D0 ()
-type instance DNorm (D0 (D1 a)) = D1 a
-type instance DNorm (D0 (D0 a)) = DNorm a
-type instance DNorm (D1 a) = D1 a
-
-type family DPlus a b
-type instance DPlus a b = DNorm (DRev (DAddC C0 (DRev a) (DRev b)))
-
-type family DDepth a
-type instance DDepth () = D0 ()
-type instance DDepth (D0 ()) = D0 ()
-type instance DDepth (D1 ()) = D1 ()
-type instance DDepth (D1 (D0 n)) = DPlus ONE (DDepth (D1 n))
-type instance DDepth (D1 (D1 n)) = DPlus ONE (DDepth (D1 n))
-
-type family DLog2 a
-type instance DLog2 a = DDepth a
-
-type ZERO = D0 ()
-
-type ONE = D1 ()
-type TWO = DPlus ONE ONE
-type THREE = DPlus ONE TWO
-type FOUR = DPlus TWO TWO
-type FIVE = DPlus ONE FOUR
-type SIX = DPlus TWO FOUR
-type SEVEN = DPlus ONE SIX
-type EIGHT = DPlus FOUR FOUR
-type NINE = DPlus FOUR FIVE
-type TEN = DPlus EIGHT TWO
-type SIZE8 = EIGHT
-type SIZE9 = NINE
-type SIZE10 = TEN
-type SIZE12 = DPlus SIX SIX
-type SIZE15 = DPlus EIGHT SEVEN
-type SIZE16 = DPlus EIGHT EIGHT
-type SIZE17 = DPlus ONE SIZE16
-type SIZE24 = DPlus SIZE8 SIZE16
-type SIZE32 = DPlus SIZE8 SIZE24
-type SIZE30 = DPlus SIZE24 SIX
-
--------------------------------------------------------------------------------
--- Description of CPU.
-
-class CPU cpu where
- -- register address.
- type RegAddrSize cpu
- -- register width
- type RegDataSize cpu
- -- immediate width.
- type ImmSize cpu
- -- variables in CPU - register indices, command format variables, etc.
- type CPUVars cpu :: * -> *
-
-data Const size = Const Integer
-
-data Var cpu size where
- Temp :: Int -> Var cpu size
- Var :: CPUVars cpu size -> Var cpu size
-
--------------------------------------------------------------------------------
--- Command description monad.
-
-data Command cpu where
- Command :: (Var cpu size) -> (Operation cpu size) -> Command cpu
-
-type RegVar cpu = Var cpu (RegDataSize cpu)
-type Immediate cpu = Const (ImmSize cpu)
-
-data Operation cpu resultSize where
- Add :: RegVar cpu -> Either (Immediate cpu) (RegVar cpu) -> Operation cpu (RegDataSize cpu)
- Sub :: RegVar cpu -> Either (Immediate cpu) (RegVar cpu) -> Operation cpu (RegDataSize cpu)
-
-type CDM cpu a = IO a
-
-($=) :: CPU cpu => Var cpu size -> Operation cpu size -> CDM cpu ()
-var $= op = undefined
-
-tempVar :: CPU cpu => CDM cpu (Var cpu size)
-tempVar = do
- cnt <- liftM fst undefined
- return $ Temp cnt
-
-op :: CPU cpu => Operation cpu size -> CDM cpu (Var cpu size)
-op operation = do
- v <- tempVar
- v $= operation
- return v
-
--------------------------------------------------------------------------------
--- Dummy CPU.
-
-data DummyCPU = DummyCPU
-
-data DummyVar size where
- DummyFlag :: Flag -> DummyVar ONE
- DummyReg :: Int -> DummyVar SIZE16
- DummyZero :: DummyVar SIZE16
-
-data Flag = C | Z | N | V
-
-instance CPU DummyCPU where
- type RegAddrSize DummyCPU = FIVE
- type RegDataSize DummyCPU = SIZE16
- type ImmSize DummyCPU = SIZE12
- type CPUVars DummyCPU = DummyVar
-
--------------------------------------------------------------------------------
--- Long compiling program.
-
-cnst :: Integer -> Either (Immediate DummyCPU) (RegVar DummyCPU)
-cnst x = Left (Const x)
-
-longCompilingProgram :: CDM DummyCPU ()
-longCompilingProgram = do
--- the number of lines below greatly affects compilation time.
- x10 <- op $ Add (Var DummyZero) (cnst 10)
- x10 <- op $ Add (Var DummyZero) (cnst 10)
- x10 <- op $ Add (Var DummyZero) (cnst 10)
- x10 <- op $ Add (Var DummyZero) (cnst 10)
- x10 <- op $ Add (Var DummyZero) (cnst 10)
- x10 <- op $ Add (Var DummyZero) (cnst 10)
- x10 <- op $ Add (Var DummyZero) (cnst 10)
- x10 <- op $ Add (Var DummyZero) (cnst 10)
- x10 <- op $ Add (Var DummyZero) (cnst 10)
- x10 <- op $ Add (Var DummyZero) (cnst 10)
- x10 <- op $ Add (Var DummyZero) (cnst 10)
- x10 <- op $ Add (Var DummyZero) (cnst 10)
- x10 <- op $ Add (Var DummyZero) (cnst 10)
- x10 <- op $ Add (Var DummyZero) (cnst 10)
- x10 <- op $ Add (Var DummyZero) (cnst 10)
- x10 <- op $ Add (Var DummyZero) (cnst 10)
- return ()