llvm-ir中'store {} {},{} *%p'的含义是什么?

时间:2018-05-30 13:26:58

标签: llvm 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

1 个答案:

答案 0 :(得分:5)

这两个中的每一个都存储指向RAM的指针。指针指向零字节结构,但这不会影响存储指针的操作。

至于为什么,这是测试代码。你知道关于那个走进酒吧并订购零啤酒的测试人员的笑话吗?结构可以包含零字段(有时会这样做,例如,当每个字段被单独确定为冗余并优化掉时),因此编译器需要处理空结构,因此测试包含空结构。