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];
 };