Что означает эта встроенная сборка в тестовом наборе CodeLen LLVM-IR?

Я пытаюсь понять тестовый набор LLVM CodeGen/Generic, чтобы получить его за бэкэнд для нового процессора.

Это тестовый сценарий (llvm/test/CodeGen/Generic/2007-04-08-MultipleFrameIndices.ll):

; RUN: llc -no-integrated-as < %s
; XFAIL: sparc-sun-solaris2
; PR1308
; PR1557
define i32 @stuff(i32, ...) {
    %foo = alloca i8*
    %bar = alloca i32*
    %A = call i32 asm sideeffect "inline asm $0 $2 $3 $4", "=r,0,i,m,m"( i32 0, i32 1, i8** %foo, i32** %bar )
    ret i32 %A
}

Мне особенно интересно об этой части:

    %A = call i32 asm sideeffect "inline asm $0 $2 $3 $4", "=r,0,i,m,m"( i32 0, i32 1, i8** %foo, i32** %bar )

Что именно должен выполнить этот встроенный ассемблер?

Когда я запускаю его через llc, как указано в комментарии, я вижу это на выходе (для x86_64):

    .text
    .file   "<stdin>"
    .globl  stuff
    .align  16, 0x90
    .type   stuff,@function
stuff:                                  # @stuff
    .cfi_startproc
# BB#0:
    leaq    -8(%rsp), %rax
    movq    %rax, -24(%rsp)
    leaq    -16(%rsp), %rax
    movq    %rax, -32(%rsp)
    xorl    %eax, %eax
    #APP
    inline asm %eax $1 -24(%rsp) -32(%rsp)
    #NO_APP
    retq
.Ltmp0:
    .size   stuff, .Ltmp0-stuff
    .cfi_endproc


    .section    ".note.GNU-stack","",@progbits

Кажется, что это привело к следующей строке в выходном коде asm:

   inline asm %eax $1 -24(%rsp) -32(%rsp)

... но я не совсем уверен, как это было сгенерировано из входных данных. Например, откуда берется% eax? Что означает / делает эта сгенерированная строка?

1 ответ

Я предполагаю, что это произошло потому, что входной операнд $1 то же самое место, что и выходной операнд $0и должен быть в реестре. Это также указано как постоянный ноль. Компилятор выбрал %eax за $0 и поэтому $1 и обнулил его заранее xorl %eax, %eax,

Сгенерированный код недействителен, я полагаю, что он не предназначен для сборки, предположительно, механизм тестирования просто проверяет, является ли выходная сборка ожидаемой.

Другие вопросы по тегам