可选的DLL存储类、可选的调用约定、可选的unnamed_addr或local_unnamed_addr属性、可选的地址空间、返回类型、可选的返回类型参数属性、函数名称、可能为空的参数列表、可选的对齐方式、可选的垃圾收集器名称、可选的前缀和可选的序言。
出乎意料的是,编译器在这段代码上展示了我们预期的正确优化行为: definenoundefi32@src(i32%L)local_unnamed_addr#0{BB:storei3211,ptr@a1,align4; %H is substituted by 11!%cmp=icmpeqi32%L,10tailcallvoid@llvm.assume(i1%cmp)reti3210; %L is substituted as expected.} 上述代码store语句中的操作数%...
@表示全局变量 与之相对应的%表示局部变量,以%前缀 private 表示私有的 unnamed_addr 表示地址不重要,只有内容.被标记成这样的常量如果拥有相同的初始化器,可以合并. 比如说上面的 "jinjingTest"可以和其他的内容为"jinjingTest"的常量合并.local_unnamed_addr表示地址在模块中被认为是不重要的 constant 表示常量 [...
LLVM函数声明由“declare”关键字、可选的链接类型、可选的可见性样式、可选的动态链接库存储类型、可选的调用约定、可选的unnamed_addr或local_unnamed_addr属性、可选的地址空间、返回类型、用于返回类型的可选参数、函数名、可能为空的参数列表、可选的对齐、可选的垃圾收集器名称、可选的前缀和可选的序言组成。
define dso_local i32 @MUL(i64 %x, i32 %y) local_unnamed_addr#0 {entry: %0 = trunc i64 %x to i32 %conv1 = mul i32 %0, %y ret i32 %conv1 } 一个Selection DAG表示一个basic block,每个basic block是一个没有分支的指令连续指令序列。上述MUl函数只有一个entry block,但是一般函数可能具有多...
@.str = private unnamed_addr constant [16 x i8] c"i\E7\9A\84\E5\80\BC\E4\B8\BA\EF\BC\9A%d\00", align 1 @.str.1 = private unnamed_addr constant [18 x i8] c"*pi\E7\9A\84\E5\80\BC\E4\B8\BA\EF\BC\9A%d\00", align 1 ...
@.str=privateunnamed_addr constant[6x i8]c"error\00",align1@_ZTIPKc=external constant i8*;Function Attrs:noinline nounwind optnone ssp uwtable definevoid@_Z2f1v()#0{%1=alloca i32,align4store i321,i32*%1,align4retvoid};Function Attrs:noinline optnone ssp uwtable ...
define dso_local __zkllvm_field_pallas_base @_Z19hello_world_exampleu26__zkllvm_field_pallas_baseu26__zkllvm_field_pallas_base(__zkllvm_field_pallas_base %0, __zkllvm_field_pallas_base %1) local_unnamed_addr #5 { %3 = add __zkllvm_field_pallas_base %0, %1 %4 = mul __zk...
define dso_local __zkllvm_field_pallas_base @_Z19hello_world_exampleu26__zkllvm_field_pallas_baseu26__zkllvm_field_pallas_base(__zkllvm_field_pallas_base %0, __zkllvm_field_pallas_base %1) local_unnamed_addr #5 { %3 = add __zkllvm_field_pallas_base %0, %1 ...
define i32 @main(i32, i8** nocapture readnone) local_unnamed_addr #1 { %3 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i32 6) #3, !clang.arc.no_objc_arc_exceptions !9 ...