[llvm-branch-commits] [clang] [LifetimeSafety] Enhance benchmark script for ExpiredLoans analysis (PR #149577)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Jul 18 12:52:24 PDT 2025
github-actions[bot] wrote:
<!--LLVM CODE FORMAT COMMENT: {darker}-->
:warning: Python code formatter, darker found issues in your code. :warning:
<details>
<summary>
You can test this locally with the following command:
</summary>
``````````bash
darker --check --diff -r HEAD~1...HEAD clang/test/Analysis/LifetimeSafety/benchmark.py
``````````
</details>
<details>
<summary>
View the diff from darker here.
</summary>
``````````diff
--- benchmark.py 2025-07-18 19:49:32.000000 +0000
+++ benchmark.py 2025-07-18 19:51:58.973643 +0000
@@ -115,20 +115,20 @@
return "// Nesting depth must be positive."
cpp_code = "struct MyObj { int id; ~MyObj() {} };\n\n"
cpp_code += f"void nested_loops_{n}() {{\n"
cpp_code += " MyObj* p = nullptr;\n"
-
+
for i in range(n):
indent = " " * (i + 1)
cpp_code += f"{indent}for(int i{i}=0; i{i}<2; ++i{i}) {{\n"
cpp_code += f"{indent} MyObj s{i}; p = &s{i};\n"
for i in range(n - 1, -1, -1):
indent = " " * (i + 1)
cpp_code += f"{indent}}}\n"
-
+
cpp_code += "}\n"
cpp_code += f"\nint main() {{ nested_loops_{n}(); return 0; }}\n"
return cpp_code
@@ -238,18 +238,18 @@
report.append(" ".join(row))
report.append("\n**Complexity Analysis:**\n")
report.append("| Analysis Phase | Complexity O(n<sup>k</sup>) |")
report.append("|:------------------|:--------------------------|")
-
+
analysis_phases = {
"Total Analysis": data["lifetime_ms"],
"FactGenerator": data["fact_gen_ms"],
"LoanPropagation": data["loan_prop_ms"],
"ExpiredLoans": data["expired_loans_ms"],
}
-
+
for phase_name, y_data in analysis_phases.items():
k, delta = calculate_complexity(n_data, np.array(y_data))
if k is not None and delta is not None:
complexity_str = f"O(n<sup>{k:.2f}</sup> ± {delta:.2f})"
else:
@@ -291,11 +291,13 @@
print(f"Compilation failed for N={n}!", file=sys.stderr)
print(result.stderr, file=sys.stderr)
return {}
durations_us = analyze_trace_file(trace_file)
- return {key.replace('_us', '_ms'): value / 1000.0 for key, value in durations_us.items()}
+ return {
+ key.replace("_us", "_ms"): value / 1000.0 for key, value in durations_us.items()
+ }
if __name__ == "__main__":
parser = argparse.ArgumentParser(
description="Generate, compile, and benchmark C++ test cases for Clang's lifetime analysis."
@@ -360,11 +362,11 @@
)
if durations_ms:
results[test_name]["n"].append(n)
for key, value in durations_ms.items():
results[test_name][key].append(value)
-
+
print(
f" Total Analysis: {human_readable_time(durations_ms['lifetime_ms'])} | "
f"FactGen: {human_readable_time(durations_ms['fact_gen_ms'])} | "
f"LoanProp: {human_readable_time(durations_ms['loan_prop_ms'])} | "
f"ExpiredLoans: {human_readable_time(durations_ms['expired_loans_ms'])}"
@@ -374,10 +376,10 @@
print("Generating Markdown Report...")
print("=" * 80 + "\n")
markdown_report = generate_markdown_report(results)
print(markdown_report)
-
+
report_filename = os.path.join(args.output_dir, "performance_report.md")
with open(report_filename, "w") as f:
f.write(markdown_report)
print(f"Report saved to: {report_filename}")
``````````
</details>
https://github.com/llvm/llvm-project/pull/149577
More information about the llvm-branch-commits
mailing list