| llvm-diff - LLVM structural 'diff' | |
| ================================== | |
| SYNOPSIS | |
| -------- | |
| **llvm-diff** [*options*] *module 1* *module 2* [*global name ...*] | |
| DESCRIPTION | |
| ----------- | |
| **llvm-diff** compares the structure of two LLVM modules, primarily | |
| focusing on differences in function definitions. Insignificant | |
| differences, such as changes in the ordering of globals or in the | |
| names of local values, are ignored. | |
| An input module will be interpreted as an assembly file if its name | |
| ends in '.ll'; otherwise it will be read in as a bitcode file. | |
| If a list of global names is given, just the values with those names | |
| are compared; otherwise, all global values are compared, and | |
| diagnostics are produced for globals which only appear in one module | |
| or the other. | |
| **llvm-diff** compares two functions by comparing their basic blocks, | |
| beginning with the entry blocks. If the terminators seem to match, | |
| then the corresponding successors are compared; otherwise they are | |
| ignored. This algorithm is very sensitive to changes in control flow, | |
| which tend to stop any downstream changes from being detected. | |
| **llvm-diff** is intended as a debugging tool for writers of LLVM | |
| passes and frontends. It does not have a stable output format. | |
| EXIT STATUS | |
| ----------- | |
| If **llvm-diff** finds no differences between the modules, it will exit | |
| with 0 and produce no output. Otherwise it will exit with a non-zero | |
| value. | |
| BUGS | |
| ---- | |
| Many important differences, like changes in linkage or function | |
| attributes, are not diagnosed. | |
| Changes in memory behavior (for example, coalescing loads) can cause | |
| massive detected differences in blocks. |