diff --git a/test/Analysis/analyzer_test.py b/test/Analysis/analyzer_test.py
new file mode 100644
index 0000000000000000000000000000000000000000..58df11a4ba4791a63e891090b26f458cc7420da2
--- /dev/null
+++ b/test/Analysis/analyzer_test.py
@@ -0,0 +1,28 @@
+import lit.formats
+import lit.TestRunner
+
+# Custom format class for static analyzer tests
+class AnalyzerTest(lit.formats.ShTest):
+
+    def execute(self, test, litConfig):
+        result = self.executeWithAnalyzeSubstitution(
+            test, litConfig, '-analyzer-constraints=range')
+
+        if result.code == lit.Test.FAIL:
+            return result
+
+        # If z3 backend available, add an additional run line for it
+        if test.config.clang_staticanalyzer_z3 == '1':
+            result = self.executeWithAnalyzeSubstitution(
+                test, litConfig, '-analyzer-constraints=z3 -DANALYZER_CM_Z3')
+
+        return result
+
+    def executeWithAnalyzeSubstitution(self, test, litConfig, substitution):
+        saved_substitutions = list(test.config.substitutions)
+        test.config.substitutions.append(('%analyze', substitution))
+        result = lit.TestRunner.executeShTest(test, litConfig,
+                                              self.execute_external)
+        test.config.substitutions = saved_substitutions
+
+        return result
diff --git a/test/Analysis/lit.local.cfg b/test/Analysis/lit.local.cfg
index 563d4188ab3f444fda0462fd46a24de2e6c30d9d..a594c5dada58fe2a2a284b4391c65dbafd194366 100644
--- a/test/Analysis/lit.local.cfg
+++ b/test/Analysis/lit.local.cfg
@@ -1,34 +1,13 @@
-import lit.TestRunner
-import sys
+# -*- Python -*- vim: set ft=python ts=4 sw=4 expandtab tw=79:
 
-# Custom format class for static analyzer tests
-class AnalyzerTest(lit.formats.ShTest, object):
+import site
 
-    def execute(self, test, litConfig):
-        result = self.executeWithAnalyzeSubstitution(test, litConfig, '-analyzer-constraints=range')
-
-        if result.code == lit.Test.FAIL:
-            return result
-
-        # If z3 backend available, add an additional run line for it
-        if test.config.clang_staticanalyzer_z3 == '1':
-            result = self.executeWithAnalyzeSubstitution(test, litConfig, '-analyzer-constraints=z3 -DANALYZER_CM_Z3')
-
-        return result
-
-    def executeWithAnalyzeSubstitution(self, test, litConfig, substitution):
-        saved_substitutions = list(test.config.substitutions)
-        test.config.substitutions.append(('%analyze', substitution))
-        result = lit.TestRunner.executeShTest(test, litConfig, self.execute_external)
-        test.config.substitutions = saved_substitutions
-
-        return result
-
-# This results in a pickling-related failure on Windows
-if (not sys.platform in ['win32']):
-    config.test_format = AnalyzerTest(config.test_format.execute_external)
-else:
-    config.substitutions.append(('%analyze', '-analyzer-constraints=range'))
+# Load the custom analyzer test format, which runs the test again with Z3 if it
+# is available.
+site.addsitedir(os.path.dirname(__file__))
+import analyzer_test
+config.test_format = analyzer_test.AnalyzerTest(
+        config.test_format.execute_external)
 
 if not config.root.clang_staticanalyzer:
     config.unsupported = True