Как создать именованную локальную переменную в llvm?

В такой структуре:

struct point{
int x0;
int y0;
};

Как я могу передать имена x0 и y0 в llvm при создании llvm :: StructType с C ++ API?

0

Решение

Вы не можете; в LLVM IR поля структур не имеют имен.

Что ты Можно do зависит от того, чего вы пытаетесь достичь:

  • Если вы хотите включить отладочную информацию для этих полей, это не совсем правильный подход — вместо этого используйте DIBuilder в определить тип структуры.

  • Если вы хотите сделать текстовое представление IR (файлы .ll и dump() результаты) более читабельны, вы можете сделать что-то другое — всякий раз, когда к полю обращаются, пусть внешний интерфейс использует имя поля для значения этого поля. Например:

    %p.py0 = getelementptr %point* %p, i32 0, i32 1
    %p.y0 = load i32* %p.py0
    

    getelementptr который получает доступ ко 2-му полю имеет имя, которое указывает, что это указатель на поле с именем y0и нагрузка имеет имя, которое указывает, что это фактическое поле. Также обратите внимание, как имя включает в себя имя переменной, к которой обращались, для дополнительной читабельности.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]