llvm-diff - LLVM 结构化‘diff’

概要

llvm-diff [选项] 模块 1 模块 2 [全局名称 …]

描述

llvm-diff 比较两个 LLVM 模块的结构,主要关注函数定义的差异。诸如全局变量排序更改或局部值名称更改等不重要的差异将被忽略。

如果输入模块的名称以‘.ll’结尾,则将其解释为汇编文件;否则将其读取为比特码文件。

如果给定全局名称列表,则仅比较具有这些名称的值;否则,比较所有全局值,并为仅出现在一个模块中的全局值生成诊断信息。

llvm-diff 通过比较基本块来比较两个函数,从入口块开始。如果终止符看起来匹配,则比较相应的后续块;否则忽略它们。此算法对控制流的更改非常敏感,这些更改往往会阻止检测到任何下游更改。

llvm-diff 旨在作为 LLVM 传递和前端编写者的调试工具。它没有稳定的输出格式。

退出状态

如果llvm-diff 在模块之间找不到任何差异,它将以 0 退出并不会产生任何输出。否则它将以非零值退出。

错误

许多重要的差异,例如链接或函数属性的更改,都不会被诊断。

内存行为的更改(例如,合并加载)会导致块中出现大量检测到的差异。