我知道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
答案 0 :(得分:5)
这两个中的每一个都存储指向RAM的指针。指针指向零字节结构,但这不会影响存储指针的操作。
至于为什么,这是测试代码。你知道关于那个走进酒吧并订购零啤酒的测试人员的笑话吗?结构可以包含零字段(有时会这样做,例如,当每个字段被单独确定为冗余并优化掉时),因此编译器需要处理空结构,因此测试包含空结构。