【问题标题】:LLVM Register use in functionLLVM 寄存器在函数中的使用
【发布时间】:2020-04-13 20:11:39
【问题描述】:

在下面的代码中,函数有 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;
}

【问题讨论】:

  • %2 可能有一条指令的名称,该指令生成后发现是多余的并被删除。 %2 或 %42 没有任何意义,它只是在调用者未提供明确名称时提供的名称。

标签: llvm llvm-clang


【解决方案1】:

%2是入口基本块的名称。 Non-entry BBs 有明确的名字,比如<label>:123

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多