Я только что обнаружил LLVM и пока не знаю много об этом. Я пробовал это, используя llvm в браузере . Я вижу, что любой код C, который я пишу, преобразуется в байтовый код LLVM, который затем преобразуется в собственный код. На странице показано текстовое представление байтового кода. Например, для следующего кода C:
int array[] = { 1, 2, 3};
int foo(int X) {
return array[X];
}
Показывает следующий байт-код:
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
target triple = "x86_64-linux-gnu"
@array = global [3 x i32] [i32 1, i32 2, i32 3] ; <[3 x i32]*> [#uses=1]
define i32 @foo(i32 %X) nounwind readonly {
entry:
%0 = sext i32 %X to i64 ; <i64> [#uses=1]
%1 = getelementptr inbounds [3 x i32]* @array, i64 0, i64 %0 ; <i32*> [#uses=1]
%2 = load i32* %1, align 4 ; <i32> [#uses=1]
ret i32 %2
}
Мой вопрос: могу ли я написать байт-код и передать его ассемблеру llvm для преобразования в нативный код, пропустив первый шаг написания кода на C вообще? Если да, то как мне это сделать? У кого-нибудь есть указатели для меня?