[BPF] add proper multi-dimensional array support
authorYonghong Song <yhs@fb.com>
Thu, 28 Mar 2019 21:59:49 +0000 (21:59 +0000)
committerYonghong Song <yhs@fb.com>
Thu, 28 Mar 2019 21:59:49 +0000 (21:59 +0000)
commit360a4e2ca6ead28b4d761b189c3995be5ac72a91
tree23732508543f26ec86a25e44a5622f0fef04e5e0
parent3dd72ea810dbb0c45c5815d2f43cc2b393d274a1
[BPF] add proper multi-dimensional array support

For multi-dimensional array like below
  int a[2][3];
the previous implementation generates BTF_KIND_ARRAY type
like below:
  . element_type: int
  . index_type: unsigned int
  . number of elements: 6

This is not the best way to represent arrays, esp.,
when converting BTF back to headers and users will see
  int a[6];
instead.

This patch generates proper support for multi-dimensional arrays.
For "int a[2][3]", the two BTF_KIND_ARRAY types will be
generated:
  Type #n:
    . element_type: int
    . index_type: unsigned int
    . number of elements: 3
  Type #(n+1):
    . element_type: #n
    . index_type: unsigned int
    . number of elements: 2

The linux kernel already supports such a multi-dimensional
array representation properly.

Signed-off-by: Yonghong Song <yhs@fb.com>
Differential Revision: https://reviews.llvm.org/D59943

llvm-svn: 357215
llvm/lib/Target/BPF/BTFDebug.cpp
llvm/lib/Target/BPF/BTFDebug.h
llvm/test/CodeGen/BPF/BTF/array-1d-char.ll
llvm/test/CodeGen/BPF/BTF/array-1d-int.ll
llvm/test/CodeGen/BPF/BTF/array-2d-int.ll
llvm/test/CodeGen/BPF/BTF/array-size-0.ll
llvm/test/CodeGen/BPF/BTF/array-typedef.ll
llvm/test/CodeGen/BPF/BTF/static-var-zerolen-array.ll
llvm/test/CodeGen/BPF/BTF/union-array-typedef.ll