Байт-код 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

0 ответов

Другие вопросы по тегам