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>

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

-j <uint>

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

--max-pass-iterations=<int>

运行完整 Delta 通道集的最大次数(默认值为 5)。

--mtriple=<string>

设置目标三元组。

--preserve-debug-environment

不要禁用用于崩溃调试的功能(崩溃报告、llvm-symbolizer 和核心转储)。

--print-delta-passes

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

--skip-delta-passes=<string>

不运行的 Delta 通道,以逗号分隔。默认情况下,运行所有 Delta 通道。

--starting-granularity-level=<uint>

在第一次测试之前划分块的次数。

注意:粒度指的是缩减过程操作的详细程度。较低的粒度意味着缩减过程在较粗粒度的级别上操作,而较高的粒度意味着它在较细粒度的级别上操作。

--test=<string>

要运行的有趣性测试的名称。

--test-arg=<string>

传递到有趣性测试的参数。

--verbose

打印额外的调试信息。

--write-tmp-files-as-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