1. [BPF] annotate DIType metadata for builtin preseve_array_access_index() (details)
  2. [Attributor] Using liveness in other attributes. (details)
Commit d0ea05d5eff475a27a5d3bbe4d9fd389935f9cb2 by yhs
[BPF] annotate DIType metadata for builtin preseve_array_access_index()
Previously, debuginfo types are annotated to IR builtin
preserve_struct_access_index() and preserve_union_access_index(), but
not preserve_array_access_index(). The debug info is useful to identify
the root type name which later will be used for type comparison.
For user access without explicit type conversions, the previous scheme
works as we can ignore intermediate compiler generated type conversions
(e.g., from union types to union members) and still generate correct
access index string.
The issue comes with user explicit type conversions, e.g., converting an
array to a structure like below:
struct t { int a; char b[40]; };
struct p { int c; int d; };
struct t *var = ...;
... __builtin_preserve_access_index(&(((struct p *)&(var->b[0]))->d))
... Although BPF backend can derive the type of &(var->b[0]), explicit
type annotation make checking more consistent and less error prone.
Another benefit is for multiple dimension array handling. For example,
struct p { int c; int d; } g[8][9][10];
... __builtin_preserve_access_index(&g[2][3][4].d) ... It would be
possible to calculate the number of "struct p"'s before accessing its
member "d" if array debug info is available as it contains each
dimension range.
This patch enables to annotate IR builtin preserve_array_access_index()
with proper debuginfo type. The unit test case and language reference is
updated as well.
Signed-off-by: Yonghong Song <>
Differential Revision:
llvm-svn: 367724
The file was addedclang/test/CodeGen/builtin-preserve-access-index-array.c
The file was modifiedllvm/include/llvm/IR/IRBuilder.h
The file was modifiedllvm/test/CodeGen/BPF/CORE/intrinsic-array.ll
The file was modifiedclang/lib/CodeGen/CGExpr.cpp
The file was modifiedclang/test/CodeGen/builtin-preserve-access-index.c
The file was modifiedllvm/docs/LangRef.rst
Commit d021617bf7e1a34ac8f8d25146bea1af97580e3b by sstipanovic
[Attributor] Using liveness in other attributes.
Modifying other AbstractAttributes to use Liveness AA and skip dead
Reviewers: jdoerfert, uenoku
Subscribers: hiraditya, llvm-commits
Differential revision:
llvm-svn: 367725
The file was modifiedllvm/test/Transforms/FunctionAttrs/liveness.ll
The file was modifiedllvm/test/Transforms/FunctionAttrs/arg_returned.ll
The file was modifiedllvm/lib/Transforms/IPO/Attributor.cpp
The file was modifiedllvm/include/llvm/Transforms/IPO/Attributor.h
The file was modifiedllvm/test/Transforms/FunctionAttrs/willreturn.ll