В функции я хочу знать, как параметры передаются в тело функции, чтобы отслеживать поток параметров. Я попробовал простой код и обнаружил, что для каждого параметра есть шаблон alloc
- store
, интересно, правда ли это или нет?Как Clang генерирует код для параметров функции?
Демонстрационный код
int add(int x, int y){
return x+y;
}
LLVM л он генерируемый:
; Function Attrs: nounwind uwtable
define i32 @add(i32 %x, i32 %y) #0 {
%1 = alloca i32, align 4
%2 = alloca i32, align 4
store i32 %x, i32* %1, align 4
store i32 %y, i32* %2, align 4
%3 = load i32, i32* %1, align 4
%4 = load i32, i32* %2, align 4
%5 = add nsw i32 %3, %4
ret i32 %5
}
В примере мы можем видеть, что,
Для каждого параметра, лязг используйте команду
alloc
для определения локальной переменнойВ соответствии с инструкцией
alloc
, инструкцииstore
используются для присвоить значения?
Мои вопросы:
- ли генерируются все функции LLVM IR в этом
alloc
иstore
узорами? Или что именно LLVM делает с параметрами? - Порядок
parameters
определяется используемым условным обозначением?
незначительный комментарий: вы, кажется, спрашиваете, как clang генерирует LLVM IR, а не как LLVM генерирует код. –
@ IsmailBadawi Спасибо за ваш комментарий, я отредактировал этот вопрос. – Qoros