From 455553b7e5d5233acf48967874c43b4a5d7e24d1 Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Mon, 25 Oct 2010 23:51:23 +0000 Subject: [PATCH] Add infrastructure for emitting TBAA metadata with the "constant" flag. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@117328 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CodeGenTBAA.cpp | 17 ++++++++++++++--- lib/CodeGen/CodeGenTBAA.h | 3 ++- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/lib/CodeGen/CodeGenTBAA.cpp b/lib/CodeGen/CodeGenTBAA.cpp index d8618f0d3a..d4d71a7557 100644 --- a/lib/CodeGen/CodeGenTBAA.cpp +++ b/lib/CodeGen/CodeGenTBAA.cpp @@ -20,6 +20,8 @@ #include "clang/AST/ASTContext.h" #include "llvm/LLVMContext.h" #include "llvm/Metadata.h" +#include "llvm/Constants.h" +#include "llvm/Type.h" using namespace clang; using namespace CodeGen; @@ -57,13 +59,22 @@ llvm::MDNode *CodeGenTBAA::getChar() { /// getTBAAInfoForNamedType - Create a TBAA tree node with the given string /// as its identifier, and the given Parent node as its tree parent. llvm::MDNode *CodeGenTBAA::getTBAAInfoForNamedType(llvm::StringRef NameStr, - llvm::MDNode *Parent) { + llvm::MDNode *Parent, + bool Readonly) { + // Currently there is only one flag defined - the readonly flag. + llvm::Value *Flags = 0; + if (Readonly) + Flags = llvm::ConstantInt::get(llvm::Type::getInt64Ty(VMContext), true); + + // Set up the mdnode operand list. llvm::Value *Ops[] = { llvm::MDString::get(VMContext, NameStr), - Parent + Parent, + Flags }; - return llvm::MDNode::get(VMContext, Ops, llvm::array_lengthof(Ops)); + // Create the mdnode. + return llvm::MDNode::get(VMContext, Ops, llvm::array_lengthof(Ops) - !Flags); } llvm::MDNode * diff --git a/lib/CodeGen/CodeGenTBAA.h b/lib/CodeGen/CodeGenTBAA.h index 5a56079fc9..29f7f544d3 100644 --- a/lib/CodeGen/CodeGenTBAA.h +++ b/lib/CodeGen/CodeGenTBAA.h @@ -56,7 +56,8 @@ class CodeGenTBAA { llvm::MDNode *getChar(); llvm::MDNode *getTBAAInfoForNamedType(llvm::StringRef NameStr, - llvm::MDNode *Parent); + llvm::MDNode *Parent, + bool Readonly = false); public: CodeGenTBAA(ASTContext &Ctx, llvm::LLVMContext &VMContext, -- 2.50.1