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

Язык вывода компилятора — LLVM IR против C
Каковы преимущества и недостатки использования LLVM IR по сравнению с C для целевого языка при написании компилятора? Я знаю, что используются оба, и я полагаю, что окончательный машинный код был бы похож, если бы я использовал clang для компиляции...
2920 просмотров

Ошибка в ModulePass с установкой преемника BasicBlock
В следующем коде в LLVM unsigned ii=0; BasicBlock* Bb = &*i; TerminatorInst *TI = i->getTerminator(); for( std::set<BasicBlock*>::iterator rit=Result.begin(); rit!=Result.end();++rit,++ii) {...
325 просмотров
schedule 28.08.2022

Связывание нескольких модулей LLVM C++ вместе segfaults в lli
Я пробую очень простой пример с LLVM/clang и, кажется, терплю неудачу. Я пробую следующее: clang++ -emit-llvm -c -x c++ -o main.bc -isystem include/ main.cc clang++ -emit-llvm -c -x c++ -o test_class.bc -isystem include/ test_class.cc...
858 просмотров
schedule 12.05.2023

Изменение исходного кода во время компиляции (с использованием LLVM)
#include <stdio.h> #include <string.h> int foo(char* a) { char str[10]; if (strlen(a)<10) { sprintf(str,"Yes"); puts(str); return 0; } else { sprintf(str,"No");...
207 просмотров
schedule 29.08.2022

Как объявить функцию в LLVM и определить ее позже
Как я могу объявить функцию в LLVM (с определенной подписью) и создать для нее вызов, например. llvm::Value* return = m_builder.CreateCall( function, arguments ); но затем определить тело функции позже (которая должна быть функцией...
3833 просмотров
schedule 19.08.2022

Как преобразовать тип CallInst в GlobalVariable в LLVM
Я написал проход функции, который инициализирует глобальную переменную, а затем вставляет функцию в IR. Я хотел бы установить результат вызова функции в глобальную переменную, но не знаю, как преобразовать тип CallInst в тип GlobalVariable. Вот код,...
622 просмотров
schedule 27.02.2023

LLVM конвертирует константу в значение
Я использую пользовательский проход LLVM, где, если я сталкиваюсь с хранилищем, в котором компилятор преобразует значение в константу; например есть явное хранилище: X[gidx] = 10; Тогда LLVM выдаст эту ошибку: aoc:...
539 просмотров
schedule 09.04.2023

Как узнать тип переменной в коде llvm
Есть ли способ узнать тип переменных в коде LLVM? Например, у меня есть следующий код: %i = alloca i32, align 4 store i32 1, i32* %i, align 4 %n = add i32 6, 1 br label %2 И я хочу функцию, которая возвращает тип каждой из переменных %i ,...
1069 просмотров
schedule 02.02.2023

LLVM - Какие оптимизации сделал интерфейс
Я знаю, что внешний интерфейс (такой как llvm-clang или llvm-gcc) также сделал некоторые оптимизации от собственного кода до уровня IR. Но какие оптимизации сделал этот интерфейс? Есть ли список или документ, который я могу проверить. Спасибо.
236 просмотров
schedule 02.05.2022

Получите циклы ЦП LLVM IR с помощью CostModel
Начиная с LLVM 3.0, в каталоге Analysis находится CostModel.cpp. Ссылаясь на свой документ, он говорит Этот файл определяет анализ модели затрат. Он дает очень простую оценку стоимости LLVM-IR. В этом анализе используются услуги...
525 просмотров
schedule 11.04.2022

Запускает ли clang -S -emit-llvm file.cpp какие-либо другие исполняемые файлы, кроме clang?
Запускает ли clang -S -emit-llvm file.cpp (компиляция исходного кода C++ в LLVM IR) какие-либо другие исполняемые файлы, кроме clang за сценой (например, компоновщик или что-то еще)?
241 просмотров
schedule 11.10.2022

llvm: VisitInstruction не посещает каждую инструкцию в базовом блоке?
Я пытаюсь написать простой проход в базовом блоке, и код выглядит следующим образом: struct SimplePass : BasicBlockPass, InstVisitor<SimplePass> { ... some initialisation and some finalization code virtual bool...
276 просмотров
schedule 03.12.2022

LLVM вызывает Loop Pass из функции Pass
Я пишу проход функции LLVM. Я хотел бы вызвать Loop Pass для каждого из циклов в функции. Однако я не могу вызвать Loop Pass из Function Pass. Когда я добавляю addRequired для требуемого прохода цикла, выдается ошибка, что он не может запланировать...
612 просмотров
schedule 18.11.2023

Добавление встроенных функций с помощью прохода LLVM
Я добавил внутреннюю функцию во входной код, используя проход LLVM. Я могу видеть внутренний вызов, но не могу понять, как скомпилировать код для моей целевой архитектуры (x86_64). Я выполняю следующую команду: clang++ $(llvm-config --ldflags...
2762 просмотров
schedule 30.03.2023

Как выполняется инструкция llvm IR Order alloca
Я заметил, что llvm IR пытается выделить пробелы в самом начале функции независимо от места объявления переменных внутри функции в исходном коде C. Я хочу знать, как упорядочены эти инструкции alloca. Я предполагаю, что это первый аргумент функции,...
298 просмотров
schedule 20.03.2023

LLVM ParseIR Segfault
Я пытаюсь скомпилировать функцию ("fun") для LLVM IR и создать модуль с помощью функции ParseIR. Программа segfaults при вызове ParseIR. Я использую LLVM 3.5, код ниже. #include <cstdio> #include <iostream> #include <sstream>...
823 просмотров
schedule 28.02.2024

Как вызвать @printf в LLVM через систему построения модулей
Я изучаю LLVM. Я понимаю, что это ряд полезных функций C, которые уже встроены в LLVM. Итак, я пытаюсь вызвать функцию @printf из своего кода. Я нашел соответствующие части в справочном руководстве LLVM, которые описывают IR-код для этого, что...
7225 просмотров
schedule 17.03.2022

Какой код в LLVM IR запускается перед main ()?
Кто-нибудь знает общее правило, для которого именно IR-код LLVM будет выполняться до main ? При использовании Clang ++ 3.6 создается впечатление, что конструкторы глобальных переменных класса вызываются через функцию в разделе ".text.startup"...
1605 просмотров
schedule 06.11.2022

Позволяет ли Alea GPU сохранять IR-код LLVM в цепочке компиляции?
Nvidia не разрешает доступ к сгенерированному LLVM IR в потоке компиляции ядра графического процессора, написанного на CUDA C/C++. Я хотел бы знать, возможно ли это, если я использую Alea GPU? Другими словами, позволяет ли процедура компиляции Alea...
191 просмотров
schedule 07.10.2022

Как я могу написать интерфейсный проход LLVM для вставки инструкции в начале/конце каждого BasicBlock?
Я попытался использовать AllocaInst и вставил его в конец данного BB следующим образом: bool runOnBasicBlock(BasicBlock &BB) override { // BB is the address to a BasicBlock instance errs() << BB.getName() << '\t';...
339 просмотров
schedule 19.01.2024