diff --git a/tests/ghc-regress/perf/should_run/Makefile b/tests/ghc-regress/perf/should_run/Makefile
index f40e014dcf07a1603ded62ce5eecec5e831687e2..3e0bdb1f7a4b6f2f4a39df20846bf526475a7dec 100644
--- a/tests/ghc-regress/perf/should_run/Makefile
+++ b/tests/ghc-regress/perf/should_run/Makefile
@@ -24,5 +24,13 @@ T2902:
 	$(RM) -f T2902_A_PairingSum.o  T2902_B_PairingSum.o  T2902_Sum.o
 	'$(TEST_HC)' -v0 -O --make T2902_A -rtsopts
 	'$(TEST_HC)' -v0 -O --make T2902_B -rtsopts
-	BAA=`./T2902_A +RTS -t --machine-readable 2>&1 | grep '"bytes allocated"' | sed -e 's/.*, "//' -e 's/")//'`; BAB=`./T2902_B +RTS -t --machine-readable 2>&1 | grep '"bytes allocated"' | sed -e 's/.*, "//' -e 's/")//'`; [ "$$BAA" = "" ] && echo 'T2902_A: No "bytes allocated"'; [ "$$BAA" = "$$BAB" ] || echo 'T2902: Mismatch in "bytes allocated"'
+	BAA=`./T2902_A +RTS -t --machine-readable 2>&1 | grep '"bytes allocated"' | sed -e 's/.*, "//' -e 's/")//'`; BAB=`./T2902_B +RTS -t --machine-readable 2>&1 | grep '"bytes allocated"' | sed -e 's/.*, "//' -e 's/")//'`; [ "$$BAA" = "" ] && echo 'T2902_A: No "bytes allocated"'; [ "$$BAA" = "$$BAB" ] || echo "T2902: Mismatch in \"bytes allocated\": $$BAA $$BAB"
+
+.PHONY: T149
+T149:
+	$(RM) -f T149_A T149_A.hi T149_A.o
+	$(RM) -f T149_B T149_B.hi T149_B.o
+	'$(TEST_HC)' -v0 -O --make T149_A -rtsopts
+	'$(TEST_HC)' -v0 -O --make T149_B -rtsopts
+	BAA=`./T149_A +RTS -t --machine-readable 2>&1 | grep '"bytes allocated"' | sed -e 's/.*, "//' -e 's/")//'`; BAB=`./T149_B +RTS -t --machine-readable 2>&1 | grep '"bytes allocated"' | sed -e 's/.*, "//' -e 's/")//'`; [ "$$BAA" = "" ] && echo 'T149_A: No "bytes allocated"'; [ "$$BAA" = "$$BAB" ] || echo "T149: Mismatch in \"bytes allocated\": $$BAA $$BAB"
 
diff --git a/tests/ghc-regress/perf/should_run/T149_A.hs b/tests/ghc-regress/perf/should_run/T149_A.hs
new file mode 100644
index 0000000000000000000000000000000000000000..dd745460c05835daa96256fc7b1c49363df64b62
--- /dev/null
+++ b/tests/ghc-regress/perf/should_run/T149_A.hs
@@ -0,0 +1,25 @@
+module Main (main) where
+
+-- See Trac #149
+
+-- Curently (with GHC 7.0) the CSE works, just,
+-- but it's delicate.
+
+
+import System.CPUTime
+
+main :: IO ()
+main = print $ playerMostOccur1 [1..m]
+
+m :: Int
+m = 22
+
+playerMostOccur1 :: [Int] -> Int
+playerMostOccur1 [a] = a
+playerMostOccur1 (x:xs)
+ | numOccur x (x:xs) > numOccur (playerMostOccur1 xs) xs = x
+ | otherwise = playerMostOccur1 xs
+
+numOccur :: Int -> [Int] -> Int
+numOccur i is = length $ filter (i ==) is
+
diff --git a/tests/ghc-regress/perf/should_run/T149_B.hs b/tests/ghc-regress/perf/should_run/T149_B.hs
new file mode 100644
index 0000000000000000000000000000000000000000..fcc87cdf55cc91a466ab3d071f86e6c9447b5559
--- /dev/null
+++ b/tests/ghc-regress/perf/should_run/T149_B.hs
@@ -0,0 +1,26 @@
+module Main (main) where
+
+-- See Trac #149
+
+-- Curently (with GHC 7.0) the CSE works, just,
+-- but it's delicate.
+
+
+import System.CPUTime
+
+main :: IO ()
+main = print $ playerMostOccur2 [1..m]
+
+m :: Int
+m = 22
+
+playerMostOccur2 :: [Int] -> Int
+playerMostOccur2 [a] = a
+playerMostOccur2 (x:xs)
+ | numOccur x (x:xs) > numOccur pmo xs = x
+ | otherwise = pmo
+    where pmo = playerMostOccur2 xs
+
+numOccur :: Int -> [Int] -> Int
+numOccur i is = length $ filter (i ==) is
+
diff --git a/tests/ghc-regress/perf/should_run/all.T b/tests/ghc-regress/perf/should_run/all.T
index 1886d433d07fe0bbdc9f4f593c995b34ce7e29eb..f1d918d89248cdf31b5f36f1d047f70699665671 100644
--- a/tests/ghc-regress/perf/should_run/all.T
+++ b/tests/ghc-regress/perf/should_run/all.T
@@ -90,14 +90,20 @@ test('MethSharing',
      compile_and_run,
      ['-O'])
 test('T2902',
-     [normal,
-      extra_clean(['T2902_A',    'T2902_B',
-                   'T2902_A.hi', 'T2902_B.hi',
-                   'T2902_A.o',  'T2902_B.o',
-                   'T2902_A_PairingSum.hi', 'T2902_B_PairingSum.hi',
-                   'T2902_A_PairingSum.o',  'T2902_B_PairingSum.o',
-                   'T2902_Sum.hi',
-                   'T2902_Sum.o'])],
+     extra_clean(['T2902_A',    'T2902_B',
+                  'T2902_A.hi', 'T2902_B.hi',
+                  'T2902_A.o',  'T2902_B.o',
+                  'T2902_A_PairingSum.hi', 'T2902_B_PairingSum.hi',
+                  'T2902_A_PairingSum.o',  'T2902_B_PairingSum.o',
+                  'T2902_Sum.hi',
+                  'T2902_Sum.o']),
      run_command,
      ['$MAKE -s --no-print-directory T2902'])
+test('T149',
+     [expect_broken(149),
+      extra_clean(['T149_A',    'T149_B',
+                   'T149_A.hi', 'T149_B.hi',
+                   'T149_A.o',  'T149_B.o'])],
+     run_command,
+     ['$MAKE -s --no-print-directory T149'])
 
diff --git a/tests/ghc-regress/simplCore/should_run/all.T b/tests/ghc-regress/simplCore/should_run/all.T
index 82b1c5924422e2ca1c870b51a618680fda164cd4..a4a2e6c401dc27df77808722d7e1b4e84ec05561 100644
--- a/tests/ghc-regress/simplCore/should_run/all.T
+++ b/tests/ghc-regress/simplCore/should_run/all.T
@@ -15,9 +15,6 @@ test('simplrun003', normal, compile_and_run, [''])
 test('simplrun004', normal, compile_and_run, [''])
 test('simplrun005', normal, compile_and_run, [''])
 
-test('simplrun006', expect_fail, compile_and_run, [''])
-  # This is a CSE test
-
 test('simplrun007', normal, compile_and_run, [''])
 test('simplrun008', normal, compile_and_run, [''])
 test('simplrun009', normal, compile_and_run, [''])
diff --git a/tests/ghc-regress/simplCore/should_run/simplrun006.hs b/tests/ghc-regress/simplCore/should_run/simplrun006.hs
deleted file mode 100644
index 0e43e9ce087d3a741a2b27206caed5a0dd82acab..0000000000000000000000000000000000000000
--- a/tests/ghc-regress/simplCore/should_run/simplrun006.hs
+++ /dev/null
@@ -1,44 +0,0 @@
-module Main (main) where
-
--- See Trac #149
-
--- Curently (with GHC 7.0) the CSE works, just,
--- but it's delicate.
-
-
-import System.CPUTime
-
-main = do start <- getCPUTime
-          putStrLn "Start"
-          print $ playerMostOccur1 [1..m]
-          middle <- getCPUTime
-          putStrLn "Middle"
-          print $ playerMostOccur2 [1..m]
-          end <- getCPUTime
-          putStrLn "End"
-          let d1 = middle - start
-              d2 = end - middle
-          if d1 > 2 * d2
-            then do print d1
-                    print d2
-            else putStrLn "OK!"
-
-m :: Int
-m = 22
-
-playerMostOccur1 :: [Int] -> Int
-playerMostOccur1 [a] = a
-playerMostOccur1 (x:xs)
- | numOccur x (x:xs) > numOccur (playerMostOccur1 xs) xs = x
- | otherwise = playerMostOccur1 xs
-
-playerMostOccur2 :: [Int] -> Int
-playerMostOccur2 [a] = a
-playerMostOccur2 (x:xs)
- | numOccur x (x:xs) > numOccur pmo xs = x
- | otherwise = pmo
-    where pmo = playerMostOccur2 xs
-
-numOccur :: Int -> [Int] -> Int
-numOccur i is = length $ filter (i ==) is
-
diff --git a/tests/ghc-regress/simplCore/should_run/simplrun006.stdout b/tests/ghc-regress/simplCore/should_run/simplrun006.stdout
deleted file mode 100644
index 81857ee52f41f2ecd4761cbb340ce839c4d8c492..0000000000000000000000000000000000000000
--- a/tests/ghc-regress/simplCore/should_run/simplrun006.stdout
+++ /dev/null
@@ -1,6 +0,0 @@
-Start
-22
-Middle
-22
-End
-OK!