TBAA, separate different types of heap load/store.
Change-Id: I24dc2857db2985239e17d97fdd6463d7f2b54985
diff --git a/src/compiler_llvm/tbaa_info.h b/src/compiler_llvm/tbaa_info.h
index 0df732b..1fe9314 100644
--- a/src/compiler_llvm/tbaa_info.h
+++ b/src/compiler_llvm/tbaa_info.h
@@ -35,12 +35,15 @@
public:
TBAAInfo(llvm::LLVMContext& context) : context_(context), root_(NULL) {
std::memset(special_type_, 0, sizeof(special_type_));
+ std::memset(memory_jtype_, 0, sizeof(memory_jtype_));
}
llvm::MDNode* GetRootType();
llvm::MDNode* GetSpecialType(TBAASpecialType special_ty);
+ llvm::MDNode* GetMemoryJType(TBAASpecialType special_ty, JType j_ty);
+
llvm::MDNode* GenTBAANode(llvm::StringRef name,
llvm::MDNode* parent = NULL,
bool readonly = false);
@@ -49,6 +52,9 @@
llvm::LLVMContext& context_;
llvm::MDNode* root_;
llvm::MDNode* special_type_[MAX_TBAA_SPECIAL_TYPE];
+ // There are 3 categories of memory types will not alias: array element, identified field, and
+ // static field.
+ llvm::MDNode* memory_jtype_[3][MAX_JTYPE];
};