Написание байтового кода llvm

Я только что открыл для себя 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                         ;  [#uses=1]
  %1 = getelementptr inbounds [3 x i32]* @array, i64 0, i64 %0 ;  [#uses=1]
  %2 = load i32* %1, align 4                      ;  [#uses=1]
   ret i32 %2
}

Мой вопрос: могу ли я написать байтовый код и передать его ассемблеру llvm для преобразования в собственный код, пропуская первый шаг написания C код вообще? Если да, как мне это сделать? Есть ли у кого-нибудь подсказки для меня?

6
задан Joel Coehoorn 9 December 2011 в 17:38
поделиться