llvm-reduce - LLVM 自动测试用例精简工具。

概要

llvm-reduce [选项] [输入…]

描述

llvm-reduce 工具项目可用于减小 LLVM 测试用例的大小。它通过从 LLVM 测试用例中删除冗余或不必要的代码来工作,同时仍然保持其检测错误的能力。

如果 input 是 “-”,llvm-reduce 从标准输入读取。否则,它将从指定的 filenames 读取。

LLVM-Reduce 是一个有用的工具,用于减小 LLVM 测试用例的大小和复杂性,从而更容易识别和调试 LLVM 编译器基础设施中的问题。

通用选项

--help

显示可用选项 (–help-hidden 查看更多)。

--abort-on-invalid-reduction

如果任何精简导致无效的 IR 则中止

--in-place

警告:此选项会将您的输入文件替换为精简版本!

--ir-passes=<string>

Pass 管道的文本描述,与传递给 opt -passes 的内容相同。

-j <uint>

用于处理块的最大线程数。设置为 1 以禁用并行。

--max-pass-iterations=<int>

运行完整 delta pass 集合的最大次数(默认=5)。

--mtriple=<string>

设置目标三元组。

--preserve-debug-environment

不要禁用用于崩溃调试的功能(崩溃报告、llvm-symbolizer 和 core dumps)

--print-delta-passes

打印 delta pass 列表,可以作为逗号分隔的列表传递给 –delta-passes。

--skip-delta-passes=<string>

不运行的 delta pass,以逗号分隔。默认情况下,运行所有 delta pass。

--starting-granularity-level=<uint>

在首次测试之前分割块的次数。

注意:粒度是指精简过程操作的细节程度。较低的粒度意味着精简过程在更粗粒度的级别上操作,而较高的粒度意味着它在更细粒度的级别上操作。

--test=<string>

要运行的 interesting-ness 测试的名称。

--test-arg=<string>

传递给 interesting-ness 测试的参数。

--verbose

打印额外的调试信息。

--write-tmp-files-as-bitcode

始终将临时文件写为 bitcode 而不是文本 IR。

-x={ir|mir}

输入语言为 ir 或 mir。

退出状态

llvm-reduce 在正常操作下返回 0。如果出现任何错误,它将返回非零退出代码。

示例

llvm-reduce 可用于简化导致编译器崩溃的测试。

例如,假设 opt 在 IR 文件 test.ll 上崩溃,错误消息为 Assertion failed at line 1234 of WhateverFile.cpp,当以 -O2 运行。

test.ll 的测试用例可以通过调用以下命令来精简

$(LLVM_BUILD_FOLDER)/bin/llvm-reduce --test=script.sh <path to>/test.ll

传递给选项 test 的 shell 脚本包含以下内容

$(LLVM_BUILD_FOLDER)/bin/opt -O2 -disable-output $1 \
  |& grep "Assertion failed at line 1234 of WhateverFile.cpp"

(在此脚本中,如果 grep 找到字符串则退出并返回 0,这将成为整个脚本的状态。)

此示例可以推广到处理 IR 文件的其他工具,例如 llc