Значение 'store {} {}, {} *% p' в llvm-ir? - PullRequest
0 голосов
/ 30 мая 2018

Я знаю, что инструкция 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 голосов
/ 30 мая 2018

Каждый из этих двух хранит указатель в ОЗУ.Указатель указывает на нулевую байтовую структуру, но это не влияет на операцию сохранения указателя.

Что касается причины, то это тестовый код.Вы знаете анекдот про тестера, который входит в бар и заказывает ноль пива?Структуры могут содержать нулевые поля (а иногда и делают, например, когда каждое поле было отдельно определено как избыточное и оптимизировано), поэтому компилятор должен обрабатывать пустые структуры, и поэтому тесты содержат пустые структуры.

...