From b554c30ddff14ed65373ee63a805ad2e5ce205d1 Mon Sep 17 00:00:00 2001 From: Siu Kwan Lam <1929845+sklam@users.noreply.github.com> Date: Tue, 23 Mar 2021 17:56:17 -0500 Subject: [PATCH] Merge pull request #6851 from bnavigator/llvm-timings-empty-column set non-reported llvm timing values to 0.0 (cherry picked from commit 9dfee63e55ee9fe64aa40bfb52e5ff33727fb4b8) --- numba/misc/llvm_pass_timings.py | 6 +++-- numba/tests/test_llvm_pass_timings.py | 36 +++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/numba/misc/llvm_pass_timings.py b/numba/misc/llvm_pass_timings.py index 205bb339644..b3263dd454c 100644 --- a/numba/misc/llvm_pass_timings.py +++ b/numba/misc/llvm_pass_timings.py @@ -239,12 +239,14 @@ def parse(raw_data): missing[k] = 0.0 # parse timings n = r"\s*((?:[0-9]+\.)?[0-9]+)" - pat = f"\\s+{n}\\s*\\({n}%\\)" * (len(headers) - 1) + r"\s*(.*)" + pat = f"\\s+(?:{n}\\s*\\({n}%\\)|-+)" * (len(headers) - 1) + pat += r"\s*(.*)" for ln in line_iter: m = re.match(pat, ln) if m is not None: raw_data = list(m.groups()) - data = {k: float(v) for k, v in zip(attrs, raw_data)} + data = {k: float(v) if v is not None else 0.0 + for k, v in zip(attrs, raw_data)} data.update(missing) pass_name = raw_data[-1] rec = PassTimingRecord( diff --git a/numba/tests/test_llvm_pass_timings.py b/numba/tests/test_llvm_pass_timings.py index a7e9135cd1d..cdb128fb303 100644 --- a/numba/tests/test_llvm_pass_timings.py +++ b/numba/tests/test_llvm_pass_timings.py @@ -5,6 +5,33 @@ from numba.misc import llvm_pass_timings as lpt +timings_raw1 = """ +===-------------------------------------------------------------------------=== + ... Pass execution timing report ... +===-------------------------------------------------------------------------=== + Total Execution Time: 0.0001 seconds (0.0001 wall clock) + + ---User Time--- --System Time-- --User+System-- ---Wall Time--- --- Name --- + 0.0001 ( 90.1%) 0.0001 ( 90.1%) 0.0001 ( 90.1%) 0.0001 ( 90.1%) A1 + 0.0000 ( 9.9%) 0.0000 ( 9.9%) 0.0000 ( 9.9%) 0.0000 ( 9.9%) A2 + 0.0001 (100.0%) 0.0001 (100.0%) 0.0001 (100.0%) 0.0001 (100.0%) Total + +""" # noqa: E501 + +timings_raw2 = """ +===-------------------------------------------------------------------------=== + ... Pass execution timing report ... +===-------------------------------------------------------------------------=== + Total Execution Time: 0.0001 seconds (0.0001 wall clock) + + ---User Time--- --System Time-- --User+System-- ---Wall Time--- --- Name --- + 0.0001 ( 90.1%) ----- 0.0001 ( 90.1%) 0.0001 ( 90.1%) A1 + 0.0000 ( 9.9%) ----- 0.0000 ( 9.9%) 0.0000 ( 9.9%) A2 + 0.0001 (100.0%) ----- 0.0001 (100.0%) 0.0001 (100.0%) Total + +""" # noqa: E501 + + class TestLLVMPassTimings(TestCase): def test_usage(self): @@ -61,6 +88,15 @@ def foo(n): self.assertGreaterEqual(last, cur) cur = last + def test_parse_raw(self): + timings1 = lpt.ProcessedPassTimings(timings_raw1) + self.assertAlmostEqual(timings1.get_total_time(), 0.0001) + self.assertIsInstance(timings1.summary(), str) + + timings2 = lpt.ProcessedPassTimings(timings_raw2) + self.assertAlmostEqual(timings2.get_total_time(), 0.0001) + self.assertIsInstance(timings2.summary(), str) + class TestLLVMPassTimingsDisabled(TestCase): def test_disabled_behavior(self):