[llvm] [lit] Allow to filter tests when using `--time-trace-output` (PR #228523)

Eric Miotto via llvm-commits llvm-commits at lists.llvm.org
Fri Oct 2 10:04:13 PDT 2026


https://github.com/edymtt created https://github.com/llvm/llvm-project/pull/228523

This helps avoid failures like

```
Traceback (most recent call last):
  File "<dir>/llvm-project/llvm/utils/lit/lit.py", line 6, in
ule>
    main()
  File "<dir>/llvm-project/llvm/utils/lit/lit/main.py", line 142, in
main
    report.write_results(tests_for_report, elapsed)
  File "<dir>/llvm-project/llvm/utils/lit/lit/reports.py", line 38,

write_results
    self._write_results_to_file(tests, elapsed, report_file)
  File "<dir>/llvm-project/llvm/utils/lit/lit/reports.py", line 281,

_write_results_to_file
    first_start_time = min([t.result.start for t in tests])
TypeError: '<' not supported between instances of 'NoneType' and
'float'
```

and can be useful for profiling a subset of tests at desk.

Assisted-By: Gemini

>From a950e54a27dd4d5b5789bdaa98b6344187db5794 Mon Sep 17 00:00:00 2001
From: Eric Miotto <emiotto at apple.com>
Date: Fri, 2 Oct 2026 09:42:45 -0700
Subject: [PATCH] [lit] Allow to filter tests when using `--time-trace-output`

This helps avoid failures like

```
Traceback (most recent call last):
  File "<dir>/llvm-project/llvm/utils/lit/lit.py", line 6, in
ule>
    main()
  File "<dir>/llvm-project/llvm/utils/lit/lit/main.py", line 142, in
main
    report.write_results(tests_for_report, elapsed)
  File "<dir>/llvm-project/llvm/utils/lit/lit/reports.py", line 38,

write_results
    self._write_results_to_file(tests, elapsed, report_file)
  File "<dir>/llvm-project/llvm/utils/lit/lit/reports.py", line 281,

_write_results_to_file
    first_start_time = min([t.result.start for t in tests])
TypeError: '<' not supported between instances of 'NoneType' and
'float'
```

and can be useful for profiling a subset of tests at desk.

Assisted-By: Gemini
---
 llvm/utils/lit/lit/reports.py                   | 17 ++++++++++-------
 llvm/utils/lit/tests/Inputs/time-trace/lit.cfg  |  8 ++++++++
 .../utils/lit/tests/Inputs/time-trace/test1.txt |  1 +
 .../utils/lit/tests/Inputs/time-trace/test2.txt |  1 +
 llvm/utils/lit/tests/time-trace-run-no-test.py  |  3 +++
 .../lit/tests/time-trace-run-only-test1.py      |  9 +++++++++
 llvm/utils/lit/tests/time-trace.py              |  9 +++++++++
 7 files changed, 41 insertions(+), 7 deletions(-)
 create mode 100644 llvm/utils/lit/tests/Inputs/time-trace/lit.cfg
 create mode 100644 llvm/utils/lit/tests/Inputs/time-trace/test1.txt
 create mode 100644 llvm/utils/lit/tests/Inputs/time-trace/test2.txt
 create mode 100644 llvm/utils/lit/tests/time-trace-run-no-test.py
 create mode 100644 llvm/utils/lit/tests/time-trace-run-only-test1.py
 create mode 100644 llvm/utils/lit/tests/time-trace.py

diff --git a/llvm/utils/lit/lit/reports.py b/llvm/utils/lit/lit/reports.py
index c2ab010d1ae93a..ee6c721010e702 100755
--- a/llvm/utils/lit/lit/reports.py
+++ b/llvm/utils/lit/lit/reports.py
@@ -278,13 +278,16 @@ class TimeTraceReport(Report):
     skipped_codes = {lit.Test.EXCLUDED, lit.Test.SKIPPED, lit.Test.UNSUPPORTED}
 
     def _write_results_to_file(self, tests, elapsed, file):
-        # Find when first test started so we can make start times relative.
-        first_start_time = min([t.result.start for t in tests])
-        events = [
-            self._get_test_event(x, first_start_time)
-            for x in tests
-            if x.result.code not in self.skipped_codes
-        ]
+        events = []
+        tests = [t for t in tests if t.result.code not in self.skipped_codes]
+
+        if tests:
+            # Find when first test started so we can make start times relative.
+            first_start_time = min([t.result.start for t in tests])
+            events = [
+                self._get_test_event(x, first_start_time)
+                for x in tests
+            ]
 
         json_data = {"traceEvents": events}
 
diff --git a/llvm/utils/lit/tests/Inputs/time-trace/lit.cfg b/llvm/utils/lit/tests/Inputs/time-trace/lit.cfg
new file mode 100644
index 00000000000000..79248fe6f03f6e
--- /dev/null
+++ b/llvm/utils/lit/tests/Inputs/time-trace/lit.cfg
@@ -0,0 +1,8 @@
+import lit.formats
+
+config.name = "time-trace"
+config.suffixes = [".txt"]
+config.test_format = lit.formats.ShTest()
+config.test_source_root = None
+config.test_exec_root = None
+
diff --git a/llvm/utils/lit/tests/Inputs/time-trace/test1.txt b/llvm/utils/lit/tests/Inputs/time-trace/test1.txt
new file mode 100644
index 00000000000000..c6b9f3b8cfcdc7
--- /dev/null
+++ b/llvm/utils/lit/tests/Inputs/time-trace/test1.txt
@@ -0,0 +1 @@
+# RUN: true
\ No newline at end of file
diff --git a/llvm/utils/lit/tests/Inputs/time-trace/test2.txt b/llvm/utils/lit/tests/Inputs/time-trace/test2.txt
new file mode 100644
index 00000000000000..c6b9f3b8cfcdc7
--- /dev/null
+++ b/llvm/utils/lit/tests/Inputs/time-trace/test2.txt
@@ -0,0 +1 @@
+# RUN: true
\ No newline at end of file
diff --git a/llvm/utils/lit/tests/time-trace-run-no-test.py b/llvm/utils/lit/tests/time-trace-run-no-test.py
new file mode 100644
index 00000000000000..98fb1b899de6a3
--- /dev/null
+++ b/llvm/utils/lit/tests/time-trace-run-no-test.py
@@ -0,0 +1,3 @@
+# RUN: rm -fr %t.json 
+# RUN: %{lit} --filter 'nonexistent' --allow-empty-runs --time-trace-output %t.json %{inputs}/time-trace
+# RUN: not test -e %t.json
diff --git a/llvm/utils/lit/tests/time-trace-run-only-test1.py b/llvm/utils/lit/tests/time-trace-run-only-test1.py
new file mode 100644
index 00000000000000..224ad358b07c71
--- /dev/null
+++ b/llvm/utils/lit/tests/time-trace-run-only-test1.py
@@ -0,0 +1,9 @@
+# RUN: rm -fr %t.json 
+# RUN: %{lit} --filter 'test1' --time-trace-output %t.json %{inputs}/time-trace
+# RUN: FileCheck < %t.json %s
+
+# CHECK: {
+# CHECK-NEXT:   "traceEvents": [
+# CHECK-NEXT: {
+# CHECK-NOT: "name": "time-trace :: test2.txt",
+# CHECK-DAG: "name": "time-trace :: test1.txt",
diff --git a/llvm/utils/lit/tests/time-trace.py b/llvm/utils/lit/tests/time-trace.py
new file mode 100644
index 00000000000000..53226c97d18649
--- /dev/null
+++ b/llvm/utils/lit/tests/time-trace.py
@@ -0,0 +1,9 @@
+# RUN: rm -fr %t.json 
+# RUN: %{lit} --time-trace-output %t.json %{inputs}/time-trace
+# RUN: FileCheck < %t.json %s
+
+# CHECK: {
+# CHECK-NEXT:   "traceEvents": [
+# CHECK-NEXT: {
+# CHECK-DAG: "name": "time-trace :: test1.txt",
+# CHECK-DAG: "name": "time-trace :: test2.txt",



More information about the llvm-commits mailing list