[PATCH] D18089: [lit] Hack lit to allow a test suite to request that it is run "early".

Rafael EspĂ­ndola via llvm-commits llvm-commits at lists.llvm.org
Fri Mar 11 13:51:18 PST 2016


Nice!

I can also reproduce the speedup, from 35.66s to 29.46s in a Release+Asserts!


On 11 March 2016 at 12:52, Chandler Carruth via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
> chandlerc created this revision.
> chandlerc added a subscriber: llvm-commits.
> Herald added a subscriber: mcrosier.
>
> This lets us for example start running the unit test suite early. For
> 'check-llvm' on my machine, this drops the tim e from 44s to 32s!!!!!
>
> It's pretty ugly. I barely know how to write Python, so feel free to
> just tell me how I should write it instead. =D
>
> http://reviews.llvm.org/D18089
>
> Files:
>   test/Unit/lit.cfg
>   utils/lit/lit/Test.py
>   utils/lit/lit/TestingConfig.py
>   utils/lit/lit/main.py
>
> Index: utils/lit/lit/main.py
> ===================================================================
> --- utils/lit/lit/main.py
> +++ utils/lit/lit/main.py
> @@ -367,7 +367,8 @@
>      elif opts.incremental:
>          sort_by_incremental_cache(run)
>      else:
> -        run.tests.sort(key = lambda result_test: result_test.getFullName())
> +        run.tests.sort(key = lambda t: (('a' if t.isEarlyTest() else 'b') +
> +                                        t.getFullName()))
>
>      # Finally limit the number of tests, if desired.
>      if opts.maxTests is not None:
> Index: utils/lit/lit/TestingConfig.py
> ===================================================================
> --- utils/lit/lit/TestingConfig.py
> +++ utils/lit/lit/TestingConfig.py
> @@ -118,7 +118,8 @@
>      def __init__(self, parent, name, suffixes, test_format,
>                   environment, substitutions, unsupported,
>                   test_exec_root, test_source_root, excludes,
> -                 available_features, pipefail, limit_to_features = []):
> +                 available_features, pipefail, limit_to_features = [],
> +                 is_early = False):
>          self.parent = parent
>          self.name = str(name)
>          self.suffixes = set(suffixes)
> @@ -135,6 +136,8 @@
>          # require one of the features in this list if this list is non-empty.
>          # Configurations can set this list to restrict the set of tests to run.
>          self.limit_to_features = set(limit_to_features)
> +        # Whether the suite should be tested early in a given run.
> +        self.is_early = bool(is_early)
>
>      def finish(self, litConfig):
>          """finish() - Finish this config object, after loading is complete."""
> Index: utils/lit/lit/Test.py
> ===================================================================
> --- utils/lit/lit/Test.py
> +++ utils/lit/lit/Test.py
> @@ -235,6 +235,15 @@
>
>          return False
>
> +    def isEarlyTest(self):
> +        """
> +        isEarlyTest() -> bool
> +
> +        Check whether this test should be executed early in a particular run.
> +        This can be used for test suites with long running tests to maximize
> +        parallelism or where it is desirable to surface their failures early.
> +        """
> +        return self.suite.config.is_early
>
>      def getJUnitXML(self):
>          test_name = self.path_in_suite[-1]
> Index: test/Unit/lit.cfg
> ===================================================================
> --- test/Unit/lit.cfg
> +++ test/Unit/lit.cfg
> @@ -12,6 +12,9 @@
>  # suffixes: A list of file extensions to treat as test files.
>  config.suffixes = []
>
> +# is_early; Request to run this suite early.
> +config.is_early = True
> +
>  # test_source_root: The root path where tests are located.
>  # test_exec_root: The root path where tests should be run.
>  llvm_obj_root = getattr(config, 'llvm_obj_root', None)
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>


More information about the llvm-commits mailing list