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

0

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

struct point{
    int x0;
    int y0;
};

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

  • 1
    Посмотрите на AllocaInst который создает локальную переменную в стеке.
Теги:
variables
llvm
named

1 ответ

1

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

То, что вы можете сделать, зависит от того, чего вы пытаетесь достичь:

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню