Вопросы по теме 'llvm-ir'

Как получить значение строкового литерала в LLVM IR?
Я новичок в LLVM. Я пытаюсь написать базовый проход, который будет проверять аргументы вызова printf , когда ему задано промежуточное представление. Если строка формата не является строковым литералом, то, конечно, я не могу ее проверить. Но...
3803 просмотров
schedule 24.01.2024

Как сохранить IR в файл и собрать в исполняемый файл?
Теперь я использую clang для сборки моего файла .c в файл .s. И я использовал API llvm для изменения IR. Однако теперь я не могу сохранить измененный IR в файл. Я хочу использовать "LLVMWriteBitcodeToFile", но не могу найти структуру...
6988 просмотров
schedule 07.10.2022

Почему так сложно, когда я хочу вставить некоторые инструкции в базовый блок?
Я столкнулся с такой проблемой, когда пытаюсь вставить какую-то инструкцию в базовый блок. AllocaInst* pa = new AllocaInst(Type::getInt32Ty(getGlobalContext()), 0, 4, "dataKey"); Value* dataValue =...
1272 просмотров
schedule 11.02.2023

LLVM и номенклатура компилятора
Я изучаю систему LLVM и прочитал документацию по началу работы . Однако некоторые элементы номенклатуры (и формулировки в примере clang) все еще немного сбивают с толку. Следующие термины и команды являются частью процесса компиляции, и мне было...
3205 просмотров
schedule 29.04.2023

Виртуальная таблица в llvm (llvm-py)
Я использую llvm-py для создания компилятора DIY для некоторых искусственных, и мне нужна таблица виртуальных методов в области земного шара. Моя концепция состоит в том, чтобы иметь несколько массивов указателей на функции (по одному для каждого...
769 просмотров

Программа, скомпилированная LLVM JIT, не может найти внешние функции
Моя программа, которая JIT-компилирует модуль LLVM IR и вызывает определенную в нем функцию foo , дает сбой во время выполнения, если foo использует функцию, определенную извне: LLVM ERROR: Program used external function 'glutInit' which could...
2604 просмотров

Поддержка переносимой многопоточности в байт-кодах / промежуточных языках / бэкэндах компилятора?
Я работал над парсером для языка программирования, который требует поддержки многопоточности. Изучая, каким должен быть бэкэнд моего компилятора, я заметил, что не могу найти много информации о многопоточности для таких вещей, как CIL, LLVM IR, gcc...
559 просмотров

Идентификация определяемой пользователем функции через проход llvm
Есть ли способ, по которому я могу определить, является ли вызываемая функция определяемой пользователем или нет? Например: void foo() { printf("hello world again"); } int main() { printf("hello world\n"); foo(); } Так как в этом...
1129 просмотров
schedule 15.07.2023

Присвоение буквального значения локальной переменной в LLVM IR
Я возился с генерацией кода для LLVM IR, и есть кое-что, чего я не совсем понимаю, а именно различие между тем, когда должны быть выделены локальные переменные, и как загрузить буквальное значение в локальную переменную. Если я скомпилирую следующий...
2127 просмотров
schedule 19.07.2022

LLVM: определение нового типа через привязки OCaml
Я использую привязки LLVM OCaml для создания компилятора для нетипизированного языка. К сожалению, единственная ссылка, которая у меня есть, это llvm.mli из источника. Итак, я попытался объявить value_t следующим образом: let llar = [|...
179 просмотров
schedule 30.06.2022

Необходимо использовать вставленную инструкцию или нет
В LLVM необходимо, чтобы, если мы вставляем некоторую инструкцию в LLVM IR через LLVM Pass, мы также должны вставлять инструкцию, которая будет использовать результат нашей предыдущей вставленной инструкции, или мы должны уже сохранить результат нашей...
54 просмотров
schedule 22.06.2022

Вернуть Void из функции LLVM
Я создал функцию в LLVM IR. Теперь я хочу создать инструкцию возврата return void . Я видел функцию Создать ReturnInst::(LLVMContext &C, Value *retVal, BasicBlock *InsertAtEnd) Но я не знаю, какой должна быть retVal , чтобы она...
3074 просмотров
schedule 27.11.2022

Способ создания LLVM IR
Я создаю инструмент clang и хочу сгенерировать LLVM IR из clang AST. Я знаю об опции -emit-llvm , которую я могу использовать для получения файла *.ll, но есть ли способ сгенерировать IR внутри кода? Какой-то метод, который я могу вызвать,...
1577 просмотров

Учитывая инструкцию LLVM, как мы можем получить указатель на ее BasicBlock?
Предположим, у меня есть инструкция llvm::Instruction*, как я могу получить указатель на ее базовый блок? Я искал в LLVM API и не нашел такого интерфейса, как inst.getBasicBlock(). Любая помощь?
2152 просмотров
schedule 11.02.2024

ошибка: токен ожидаемого значения при вызове инструкции GEP
Я играю с LLVM и начал с простого Hello World. Вот код, который я пытаюсь запустить: test.s : ; Declare the string constant as a global constant. @.str = private unnamed_addr constant [13 x i8] c"Hello world!\00" ;...
1361 просмотров
schedule 08.11.2022

Как создать модуль LLVM из исходного файла или единицы перевода
Я пытаюсь создать объект Module, представляющий IR исходного файла c, но я не знаю, что делать дальше. Я могу создать единицу перевода или AST из исходного файла, но мне нужно получить доступ к объекту модуля, содержащему эти данные. В классе Module...
159 просмотров
schedule 06.12.2022

ОШИБКА LLVM: Обнаружена неисправная функция, компиляция прервана! после удаления от родителя ()
У меня есть файл test.c, в котором есть вызов этой функции: functiontest(2,x); Я хотел бы удалить этот вызов функции (с пропуском llvm), и когда я пытаюсь использовать функцию removeFromParent() следующим образом:...
1900 просмотров
schedule 15.07.2022

Как создать новый SDNode в llvm?
Я пытаюсь добавить поддержку новой арки в бэкэнде llvm (llc). Однако мне было сложно добавить новый SDNode, который имеет 2 результата. Я видел в арке sparc, что UMUL/SMUL имеет 2 результата (второй Y), поэтому они определили: let Defs = [Y] in...
906 просмотров
schedule 23.08.2022

Поддержка типа указателя LLVM API
Я пытаюсь создать нулевой указатель с помощью построителя инструкций хранилища сборки LLVM для следующего фрагмента кода: int *x; x = 0; Проблема, с которой я столкнулся, заключается в том, что при присвоении нуля x я получаю ошибку...
1497 просмотров
schedule 23.05.2022

Какова цель встроенных cvta_shared_yes, cvta_shared_yes_64, cvta_to_shared_yes_64 и т. д. в llvm
В папке с исходным кодом LLVM мы видим встроенные cvta_shared_yes, cvta_shared_yes_64, cvta_to_shared_yes_64 аналогично для других типов памяти, таких как глобальная, локальная, константная и т. д. Какова цель этого. Определяет ли он поведение типов...
41 просмотров
schedule 12.07.2023