five

LLVM APR Benchmark

收藏
github2025-01-21 更新2025-01-23 收录
下载链接:
https://github.com/dtcxzyw/llvm-apr-benchmark
下载链接
链接失效反馈
官方服务:
资源简介:
该数据集收集了自2024年1月1日以来GitHub问题中修复的LLVM中间端错误。每个问题包含问题描述、测试用例、参考补丁和一些提示。数据集专注于三种类型的错误:崩溃、错误编译和挂起。所有错误都可以通过`opt`命令和一小段LLVM文本IR触发。

This dataset collects fixed LLVM middle-end bugs from GitHub issues since January 1, 2024. Each entry includes the issue description, test cases, reference patches, and additional hints. The dataset focuses on three types of bugs: crashes, incorrect compilations, and hangs. All bugs can be triggered using the `opt` command and a short snippet of LLVM textual IR.
创建时间:
2025-01-06
原始信息汇总

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_helperlab_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}, }

搜集汇总
数据集介绍
main_image_url
构建方式
LLVM APR Benchmark 数据集的构建过程聚焦于LLVM编译器中端的三类错误:崩溃、错误编译和挂起。这些错误通过`opt`命令和一小段LLVM文本IR触发。数据集收集了自2024年1月1日以来GitHub上已修复的LLVM中端错误,每个问题包括问题描述、测试用例、参考补丁和一些提示。所有问题都经过严格验证,确保在特定提交下能够复现错误,并在应用参考补丁后通过所有测试。
特点
该数据集的特点在于其专注于LLVM编译器中端的真实错误,涵盖了崩溃、错误编译和挂起三种类型。数据集中的每个错误都附有详细的复现步骤和修复补丁,确保了数据的实用性和可靠性。此外,数据集还提供了错误定位的提示信息,如修复提交、组件、错误位置的行号和函数名等,为研究人员提供了丰富的上下文信息。
使用方法
使用LLVM APR Benchmark数据集时,研究人员需要配置C++17兼容的编译器、ninja、ccache以及预构建的LLVM核心库和alive-tv工具。通过克隆数据集仓库并设置环境变量,研究人员可以利用提供的Python脚本与LLVM和数据集进行交互。数据集提供了两个辅助模块`llvm_helper`和`lab_env`,帮助研究人员执行Git命令、获取测试失败信息、重置源代码树、构建LLVM以及执行测试。研究人员可以通过这些工具实现自动化的错误修复循环,并与大型语言模型进行交互以生成修复补丁。
背景与挑战
背景概述
LLVM APR Benchmark 数据集由 Yingwei Zheng 于 2025 年创建,旨在为自动化程序修复(APR)技术提供一个大规模的真实世界 LLVM 中间端错误修复基准。LLVM 编译器基础设施在学术界和工业界广泛应用,但其复杂的代码库和逻辑使得错误修复成为一项极具挑战的任务。该数据集聚焦于 LLVM 中间端的三种主要错误类型:崩溃、错误编译和挂起,涵盖了自 2024 年 1 月 1 日以来从 GitHub 问题中收集的 226 个已修复错误。通过结合大语言模型(LLM)和 APR 技术,该数据集为软件工程研究者和 LLVM 社区提供了一个评估自动化修复工具性能的平台,推动了编译器错误修复领域的研究进展。
当前挑战
LLVM APR Benchmark 数据集面临的主要挑战包括:1) 领域问题的复杂性,LLVM 中间端错误的修复需要深入理解 C/C++ 代码库和编译器逻辑,这对自动化修复技术提出了极高的要求;2) 数据集的构建过程中,确保每个错误的可复现性和修复验证的准确性是一项艰巨的任务,尤其是在处理错误编译和挂起问题时,需要依赖复杂的工具链(如 alive2 和 lli)进行验证;3) 尽管数据集中的大多数错误可以通过单一补丁修复,但如何在大规模代码库中准确定位错误并生成有效的修复方案,仍然是自动化程序修复技术面临的核心挑战。
常用场景
经典使用场景
LLVM APR Benchmark 数据集主要用于评估和验证自动化程序修复(APR)技术在LLVM编译器中间端错误修复中的应用。该数据集通过提供真实的LLVM中间端错误案例,帮助研究人员测试和优化基于大语言模型(LLM)的自动化修复工具。经典使用场景包括在LLVM编译器的InstCombine、LoopVectorize等模块中,针对崩溃、错误编译和死循环等类型的错误进行自动化修复实验。
实际应用
在实际应用中,LLVM APR Benchmark 数据集被广泛用于开发和支持自动化程序修复工具,特别是在编译器维护和优化领域。通过使用该数据集,开发人员可以快速定位和修复LLVM编译器中的中间端错误,从而减少手动修复的工作量并提高编译器的稳定性和性能。此外,该数据集还被用于培训和教育目的,帮助开发人员理解编译器内部机制和自动化修复技术的实际应用。
衍生相关工作
LLVM APR Benchmark 数据集衍生了许多相关研究工作,特别是在自动化程序修复和编译器优化领域。基于该数据集的研究成果包括改进的LLM-based APR算法、针对LLVM中间端错误的特定修复策略,以及新的编译器测试和验证方法。这些工作不仅推动了自动化修复技术的发展,还为LLVM社区的维护工作提供了有力支持,进一步提升了编译器的可靠性和性能。
以上内容由遇见数据集搜集并总结生成
5,000+
优质数据集
54 个
任务类型
进入经典数据集
二维码
社区交流群

面向社区/商业的数据集话题

二维码
科研交流群

面向高校/科研机构的开源数据集话题

数据驱动未来

携手共赢发展

商业合作