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。