LLVM APR Benchmark
收藏LLVM APR Benchmark 数据集概述
数据集简介
LLVM APR Benchmark 是一个大规模自动化程序修复(APR)基准测试,专注于真实世界的LLVM中间端(Middle-End)错误。该数据集旨在帮助软件工程研究人员和LLVM社区了解APR技术在大规模、真实世界的C/C++项目中的应用。
数据集内容
-
错误类型:数据集包含三类LLVM中间端错误:
- 崩溃(Crash):编译器异常终止或触发断言失败。
- 错误编译(Miscompilation):编译器从定义良好的源代码生成错误的程序。
- 挂起(Hang):编译器进入无限循环或无法达到固定点。
-
数据来源:数据集收集了自2024年1月1日以来GitHub上已修复的LLVM中间端错误。每个问题包含问题描述、测试用例、参考补丁和一些提示。
-
数据集规模:截至2025年1月20日,数据集包含226个已验证的问题。
数据集统计
-
错误类型分布:
- 错误编译:84个
- 崩溃:135个
- 挂起:7个
-
错误组件分布(共43个组件):
- LoopVectorize:60个
- SLPVectorizer:50个
- InstCombine:47个
- 其他组件:ScalarEvolution、VectorCombine、ValueTracking等。
-
标签分布:
- 错误编译:86个
- 崩溃:82个
- 向量化器:67个
- 其他标签:llvm:instcombine、llvm:SLPVectorizer、crash-on-valid等。
-
文件修改统计:
- 平均修改文件数:1.15
- 最大修改文件数:4
- 最小修改文件数:1
- 中位数修改文件数:1
-
代码行修改统计:
- 平均插入行数:11.04
- 最大插入行数:164
- 最小插入行数:0
- 中位数插入行数:6
- 平均删除行数:5.64
- 最大删除行数:169
- 最小删除行数:0
- 中位数删除行数:2
-
测试用例统计:
- 平均测试用例数:3.73
- 最大测试用例数:107
- 最小测试用例数:1
- 中位数测试用例数:1
-
补丁统计:
- 单文件修复:201个(88.94%)
- 单函数修复:173个(76.55%)
- 单块修复:129个(57.08%)
使用指南
-
环境要求:
- C++17兼容编译器
- ninja
- ccache
- 预构建的LLVM核心库
- alive-tv工具
-
安装步骤: bash git clone https://github.com/dtcxzyw/llvm-apr-benchmark.git cd llvm-apr-benchmark pip3 install -r requirements.txt mkdir -p work && cd work git clone https://github.com/llvm/llvm-project.git
-
环境变量设置: bash export LAB_LLVM_DIR=<path-to-llvm-src> export LAB_LLVM_BUILD_DIR=<path-to-llvm-build-dir> export LAB_LLVM_ALIVE_TV=<path-to-alive-tv> export LAB_DATASET_DIR=<path-to-llvm-apr-benchmark>/dataset export LAB_FIX_DIR=<path-to-llvm-apr-benchmark>/examples/fixes
-
使用示例:
- 通过
llvm_helper和lab_env模块与LLVM和数据集进行交互。 - 提供修复循环示例代码,展示如何使用环境变量和LLM进行错误修复。
- 通过
规则
-
允许使用的知识:
lab_env.Environment提供的静态内容或动态反馈。- 基础提交之前的LLVM源代码树中的任何内容。
- 在知识截止日期之前训练的大型语言模型。
- 在知识截止日期之前创建的任何其他网络内容。
-
修复验证规则:
- 使用补丁后,
opt必须通过给定的测试和回归测试套件。
- 使用补丁后,
许可证
该项目采用Apache License 2.0许可证,详细信息请参阅LICENSE。
引用
bibtex @misc{llvm-apr-benchmark, title = {LLVM APR Benchmark: A Large-Scale Automated Program Repair Benchmark of Real-World LLVM Middle-End Bugs}, url = {https://github.com/dtcxzyw/llvm-apr-benchmark}, author = {Yingwei Zheng}, year = {2025}, }




