声明和属性集中的 LLVM 属性之间是否存在差异
Is there a difference between LLVM attributes in the declare and in an attribute set
比较 LLVM
declare "wasm-import-module"="hellowasi" "wasm-import-name"="reverse" void @reverse(i8*, i32, i8*)
和
declare void @reverse(i8*, i32, i8*) #1
attributes #1 = { "wasm-import-module"="hellowasi" "wasm-import-name"="reverse" }
除了能够在其他函数上使用 #1
属性列表之外,这两个 LLVM IR 片段之间有什么区别吗?
回答我自己。第一个将属性添加到 return 值,而第二个将属性添加到函数。添加属性时,LLVM 可以接受一个“索引”,其中 0 表示 return 值,~0(按位非 0)是函数,其他值是参数编号。
比较 LLVM
declare "wasm-import-module"="hellowasi" "wasm-import-name"="reverse" void @reverse(i8*, i32, i8*)
和
declare void @reverse(i8*, i32, i8*) #1
attributes #1 = { "wasm-import-module"="hellowasi" "wasm-import-name"="reverse" }
除了能够在其他函数上使用 #1
属性列表之外,这两个 LLVM IR 片段之间有什么区别吗?
回答我自己。第一个将属性添加到 return 值,而第二个将属性添加到函数。添加属性时,LLVM 可以接受一个“索引”,其中 0 表示 return 值,~0(按位非 0)是函数,其他值是参数编号。