Байт-код LLVM находится в канонической форме?
Когда я смотрю на сгенерированный код.ll из clang, кажется, что имя функции и имя переменной исходного файла также используются в файле.ll. Я не возражаю против них в разделе метаданных, однако я хочу избавиться от зависимости от исходного файла. Другими словами, для двух разных исходных кодов, которые я нахожу / заменяю все имена функций / переменных, я бы хотел, чтобы сгенерированные файлы.ll были одинаковыми, за исключением части метаданных. Есть ли простой способ сделать это? Есть ли проход LLVM, который это делает? Спасибо
РЕДАКТИРОВАТЬ: я теперь получаю следующее:
define i32 @countLiveNeighbor(i32* %board, i32 %boardRowSize, i32 %boardColSize, i32 %row, i32 %col) #0 {
%1 = alloca i32*, align 8
%2 = alloca i32, align 4
%3 = alloca i32, align 4
%4 = alloca i32, align 4
%5 = alloca i32, align 4
%i = alloca i32, align 4
%j = alloca i32, align 4
%livingcount = alloca i32, align 4
store i32* %board, i32** %1, align 8
store i32 %boardRowSize, i32* %2, align 4
store i32 %boardColSize, i32* %3, align 4
store i32 %row, i32* %4, align 4
store i32 %col, i32* %5, align 4
store i32 0, i32* %livingcount, align 4, !dbg !190
Таким образом, имена регистров зависят от имен параметров / переменных исходного кода. Я хотел бы иметь каноническую форму с чем-то вроде следующего:
define i32 @countLiveNeighbor(i32* %p1, i32 %p2, i32 %p3, i32 %p4, i32 %p5) #0 {
%1 = alloca i32*, align 8
%2 = alloca i32, align 4
%3 = alloca i32, align 4
%4 = alloca i32, align 4
%5 = alloca i32, align 4
%6 = alloca i32, align 4
%7 = alloca i32, align 4
%8 = alloca i32, align 4
store i32* %p1, i32** %1, align 8
store i32 %p3, i32* %2, align 4
store i32 %p4, i32* %3, align 4
store i32 %p2, i32* %4, align 4
store i32 %p1, i32* %5, align 4
store i32 0, i32* %8, align 4, !dbg !190