llvm-ir中'store {} {}, {}* %p'的含义?
The meaning of 'store {} {}, {}* %p' in llvm-ir?
我知道store
指令是用来将数据存入内存的,但是下面这段llvm-ir代码是什么意思呢?在这里你可以看到很多空的“{}”结构。
; CHECK: Function: foo:
; CHECK-NEXT: NoAlias: {}* %p, {}* %q
define void @foo({}* %p, {}* %q) {
store {} {}, {}* %p
store {} {}, {}* %q
ret void
}
仅供参考:https://github.com/llvm-mirror/llvm/blob/master/test/Analysis/CFLAliasAnalysis/Steensgaard/empty.ll
这两个都将指针存储到 RAM 中。指针指向零字节结构,但不影响指针的存储操作
至于为什么,这是测试代码。您知道关于走进酒吧并点零啤酒的测试员的笑话吗?结构可以包含零字段(有时确实如此,例如,当每个字段被单独确定为冗余并优化掉时)因此编译器需要处理空结构,因此测试包含空结构。
我知道store
指令是用来将数据存入内存的,但是下面这段llvm-ir代码是什么意思呢?在这里你可以看到很多空的“{}”结构。
; CHECK: Function: foo:
; CHECK-NEXT: NoAlias: {}* %p, {}* %q
define void @foo({}* %p, {}* %q) {
store {} {}, {}* %p
store {} {}, {}* %q
ret void
}
仅供参考:https://github.com/llvm-mirror/llvm/blob/master/test/Analysis/CFLAliasAnalysis/Steensgaard/empty.ll
这两个都将指针存储到 RAM 中。指针指向零字节结构,但不影响指针的存储操作
至于为什么,这是测试代码。您知道关于走进酒吧并点零啤酒的测试员的笑话吗?结构可以包含零字段(有时确实如此,例如,当每个字段被单独确定为冗余并优化掉时)因此编译器需要处理空结构,因此测试包含空结构。