gpt4 book ai didi

c++ - LLVM 无法识别 unnamed_addr

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:27:37 26 4
gpt4 key购买 nike

为了测试 LLVM 的功能,我编写了以下简单程序。

#include <stdio.h>

int main()
{
printf( "Hello World!\n" );

return 0;
}

然后通过键入 clang -S -emit-llvm main.c -o main.ll 将其编译为 LLVM IR。 main.ll 中生成的代码如下。

; ModuleID = 'main.c'
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-pc-linux-gnu"

@.str = private unnamed_addr constant [14 x i8] c"Hello World!\0A\00"

define i32 @main() nounwind {
%1 = alloca i32, align 4
store i32 0, i32* %1
%2 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([14 x i8]* @.str, i32 0, i32 0))
ret i32 0
}

declare i32 @printf(i8*, ...)

然后,当我尝试通过键入 llc main.ll -o main.s && gcc main.s -o main 将 IR 代码(在 main.ll 中)编译为 native 可执行二进制文件时,我收到以下错误。

llc: main.ll:5:17: error: expected 'global' or 'constant'
@.str = private unnamed_addr constant [14 x i8] c"Hello World!\0A\00"

但是,如果我从 main.ll 中删除 unnamed_addr,它就会被编译。所以我的问题是 unnamed_addr 有什么问题。为什么不编译它?这可能是因为我使用的 clang 和 llvm 版本不兼容?

最佳答案

unnamed_addr 属性为 introduced in LLVM 2.9 .

会不会是您的 clang 来自 2.9 或更新版本,而您的 llc 来自 2.8 或更早版本?

关于c++ - LLVM 无法识别 unnamed_addr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9163161/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com