Использование LLVM-регистра в функции - PullRequest
1 голос
/ 13 апреля 2020

В приведенном ниже коде функция имеет 2 аргумента, которые, как я предполагаю, хранятся в %0 и %1.
Jet. Функция начинается с %3.
Для чего используется %2?

define void @swap(i32*, i32*) #0 {
  %3 = alloca i32*, align 8
  %4 = alloca i32*, align 8
  %5 = alloca i32*, align 8
  store i32* %0, i32** %3, align 8
  store i32* %1, i32** %4, align 8
  %6 = load i32*, i32** %3, align 8
  store i32* %6, i32** %5, align 8
  %7 = load i32*, i32** %4, align 8
  store i32* %7, i32** %3, align 8
  %8 = load i32*, i32** %5, align 8
  store i32* %8, i32** %4, align 8
  ret void
}

Приведенный выше код LLVM был сгенерирован с помощью clang из этого c кода:

void swap(int* i, int* j){
    int* temp = i;
    i = j;
    j = temp;
}

1 Ответ

2 голосов
/ 13 апреля 2020

%2 - название блока ввода basei c. Не входящие BB имеют свои имена в явном виде, например <label>:123.

...