diff options
author | Dan Gohman <gohman@apple.com> | 2012-09-21 23:00:37 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2012-09-21 23:00:37 +0000 |
commit | 8d042fa519c798b90fdbea3fb36bafda6dba41ba (patch) | |
tree | 97b2aee1f4d2a6e1a543a3eddda585bef8b629ef | |
parent | fa90e850cf253595c8a485a06e8465b4b0e170ea (diff) | |
download | bcm5719-llvm-8d042fa519c798b90fdbea3fb36bafda6dba41ba.tar.gz bcm5719-llvm-8d042fa519c798b90fdbea3fb36bafda6dba41ba.zip |
Add an MDBuilder utility for creating !tbaa.struct nodes.
llvm-svn: 164425
-rw-r--r-- | llvm/include/llvm/MDBuilder.h | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/llvm/include/llvm/MDBuilder.h b/llvm/include/llvm/MDBuilder.h index 2aa48b0b472..1867a639236 100644 --- a/llvm/include/llvm/MDBuilder.h +++ b/llvm/include/llvm/MDBuilder.h @@ -134,6 +134,27 @@ namespace llvm { } } + struct TBAAStructField { + uint64_t Offset; + uint64_t Size; + MDNode *TBAA; + TBAAStructField(uint64_t Offset, uint64_t Size, MDNode *TBAA) : + Offset(Offset), Size(Size), TBAA(TBAA) {} + }; + + /// \brief Return metadata for a tbaa.struct node with the given + /// struct field descriptions. + MDNode *createTBAAStructNode(ArrayRef<TBAAStructField> Fields) { + SmallVector<Value *, 4> Vals(Fields.size() * 3); + Type *Int64 = IntegerType::get(Context, 64); + for (unsigned i = 0, e = Fields.size(); i != e; ++i) { + Vals[i * 3 + 0] = ConstantInt::get(Int64, Fields[i].Offset); + Vals[i * 3 + 1] = ConstantInt::get(Int64, Fields[i].Size); + Vals[i * 3 + 2] = Fields[i].TBAA; + } + return MDNode::get(Context, Vals); + } + }; } // end namespace llvm |