[all-commits] [llvm/llvm-project] 761550: [LifetimeSafety] Add script for performance benchm...

Utkarsh Saxena via All-commits all-commits at lists.llvm.org
Mon Jul 14 11:24:16 PDT 2025


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 7615503409f19ad7e2e2f946437919d0689d4b3e
      https://github.com/llvm/llvm-project/commit/7615503409f19ad7e2e2f946437919d0689d4b3e
  Author: Utkarsh Saxena <usx at google.com>
  Date:   2025-07-14 (Mon, 14 Jul 2025)

  Changed paths:
    A clang/test/Analysis/LifetimeSafety/CMakeLists.txt
    A clang/test/Analysis/LifetimeSafety/benchmark.py
    A clang/test/Analysis/LifetimeSafety/requirements.txt
    M clang/test/CMakeLists.txt

  Log Message:
  -----------
  [LifetimeSafety] Add script for performance benchmarking (#147315)

This patch introduces a new Python-based benchmarking tool for Clang's Lifetime Safety analysis. This script automates the process of generating targeted C++ test cases, measuring the performance of the analysis, and determining its empirical computational complexity.

The tool helps track and validate the performance of the dataflow analysis, ensuring that future optimizations have a measurable impact and that the analysis scales efficiently.

Components:

* **Generate**: Creates pathological C++ test cases with specific patterns (pointer cycles and CFG merges) designed to stress-test the analysis.

* **Compile & Trace**: Compiles the generated code using `-ftime-trace`.

* **Analyze & Report**: Performs a curve-fit on the timing data to determine the empirical complexity ( **O(n<sup>k</sup>)**) and outputs a markdown report.

---

**Usage**:
<details>
  <summary>ninja benchmark_lifetime_safety_analysis</summary>

[12/13] Running Lifetime Analysis performance benchmarks...
Benchmark files will be saved in: <BUILD_DIR_REDACTED>/tools/clang/test/Analysis/LifetimeSafety/benchmark_results

Running performance benchmarks...
--- Running Test: Cycle with N=10 ---
    Total: 10.11 ms | Analysis: 2.70 ms
--- Running Test: Cycle with N=25 ---
    Total: 61.51 ms | Analysis: 53.05 ms
--- Running Test: Cycle with N=50 ---
    Total: 688.56 ms | Analysis: 677.32 ms
--- Running Test: Cycle with N=75 ---
    Total: 3.09 s | Analysis: 3.07 s
--- Running Test: Cycle with N=100 ---
    Total: 9.31 s | Analysis: 9.30 s
--- Running Test: Cycle with N=150 ---
    Total: 44.92 s | Analysis: 44.91 s
--- Running Test: Merge with N=10 ---
    Total: 8.54 ms | Analysis: 0.00 ms
--- Running Test: Merge with N=50 ---
    Total: 38.79 ms | Analysis: 27.13 ms
--- Running Test: Merge with N=100 ---
    Total: 219.45 ms | Analysis: 205.20 ms
--- Running Test: Merge with N=200 ---
    Total: 1.67 s | Analysis: 1.65 s
--- Running Test: Merge with N=400 ---
    Total: 12.57 s | Analysis: 12.55 s
--- Running Test: Merge with N=800 ---
    Total: 100.48 s | Analysis: 100.43 s


Generating Markdown Report...
</details>

<details>
  <summary>Sample Report: </summary>

# Lifetime Analysis Performance Report
> Generated on: 2025-07-08 14:18:52 

---

## Test Case: Pointer Cycle in Loop

| N   | Analysis Time | Total Clang Time |
|:----|--------------:|-----------------:|
| 10  |       2.70 ms |         10.11 ms |
| 25  |      53.05 ms |         61.51 ms |
| 50  |     677.32 ms |        688.56 ms |
| 75  |        3.07 s |           3.09 s |
| 100 |        9.30 s |           9.31 s |
| 150 |       44.91 s |          44.92 s |

**Complexity Analysis:**
- The performance for this case scales approx. as **O(n<sup>3.88</sup>)**.
- **95% Confidence interval for exponent:** `[3.86, 3.90]`.

---

## Test Case: CFG Merges

| N   | Analysis Time | Total Clang Time |
|:----|--------------:|-----------------:|
| 10  |       0.00 ms |          8.54 ms |
| 50  |      27.13 ms |         38.79 ms |
| 100 |     205.20 ms |        219.45 ms |
| 200 |        1.65 s |           1.67 s |
| 400 |       12.55 s |          12.57 s |
| 800 |      100.43 s |         100.48 s |

**Complexity Analysis:**
- The performance for this case scales approx. as **O(n<sup>3.00</sup>)**.
- **95% Confidence interval for exponent:** `[2.99, 3.01]`.

---

</details>



To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list