TBAA, separate RuntimeInfo and JRuntime.

Change-Id: Ia540883349e2699503d7eeb1d4b602beeb74510f
diff --git a/src/compiler_llvm/backend_types.h b/src/compiler_llvm/backend_types.h
index ede21c1..7e7e2d3 100644
--- a/src/compiler_llvm/backend_types.h
+++ b/src/compiler_llvm/backend_types.h
@@ -59,6 +59,7 @@
   kTBAARegister,
   kTBAAStackTemp,
   kTBAAMemory,
+  kTBAAJRuntime,
   kTBAARuntimeInfo,
   kTBAAConstJObject,
   MAX_TBAA_SPECIAL_TYPE
diff --git a/src/compiler_llvm/jni_compiler.cc b/src/compiler_llvm/jni_compiler.cc
index 4994e69..1fa0ce7 100644
--- a/src/compiler_llvm/jni_compiler.cc
+++ b/src/compiler_llvm/jni_compiler.cc
@@ -90,7 +90,7 @@
         irb_.LoadFromObjectOffset(method_object_addr,
                                   Method::DeclaringClassOffset().Int32Value(),
                                   irb_.getJObjectTy(),
-                                  kTBAARuntimeInfo);
+                                  kTBAAJRuntime);
   }
   // Actual argument (ignore method and this object)
   arg_begin = arg_iter;
@@ -143,7 +143,7 @@
       irb_.LoadFromObjectOffset(thread_object_addr,
                                 Thread::JniEnvOffset().Int32Value(),
                                 irb_.getJObjectTy(),
-                                kTBAARuntimeInfo);
+                                kTBAAJRuntime);
 
   // Set thread state to kNative
   irb_.StoreToObjectOffset(thread_object_addr,
@@ -156,7 +156,7 @@
       irb_.LoadFromObjectOffset(method_object_addr,
                                 Method::NativeMethodOffset().Int32Value(),
                                 GetFunctionType(method_idx_, is_static, true)->getPointerTo(),
-                                kTBAARuntimeInfo);
+                                kTBAAJRuntime);
 
   // Load actual parameters
   std::vector<llvm::Value*> args;
diff --git a/src/compiler_llvm/method_compiler.cc b/src/compiler_llvm/method_compiler.cc
index 6430620..193f570 100644
--- a/src/compiler_llvm/method_compiler.cc
+++ b/src/compiler_llvm/method_compiler.cc
@@ -1242,13 +1242,13 @@
     irb_.LoadFromObjectOffset(thread_object_addr,
                               Thread::ExceptionOffset().Int32Value(),
                               irb_.getJObjectTy(),
-                              kTBAARuntimeInfo);
+                              kTBAAJRuntime);
 
   // Set thread-local exception field address to NULL
   irb_.StoreToObjectOffset(thread_object_addr,
                            Thread::ExceptionOffset().Int32Value(),
                            irb_.getJNull(),
-                           kTBAARuntimeInfo);
+                           kTBAAJRuntime);
 
   // Keep the exception object in the Dalvik register
   EmitStoreDalvikReg(dec_insn.vA, kObject, kAccurate, exception_object_addr);
@@ -1389,7 +1389,7 @@
 
   llvm::Value* string_field_addr = EmitLoadDexCacheStringFieldAddr(string_idx);
 
-  llvm::Value* string_addr = irb_.CreateLoad(string_field_addr, kTBAARuntimeInfo);
+  llvm::Value* string_addr = irb_.CreateLoad(string_field_addr, kTBAAJRuntime);
 
   if (!compiler_->CanAssumeStringIsPresentInDexCache(dex_cache_, string_idx)) {
     llvm::BasicBlock* block_str_exist =
@@ -1459,7 +1459,7 @@
     llvm::Value* type_field_addr =
       EmitLoadDexCacheResolvedTypeFieldAddr(type_idx);
 
-    llvm::Value* type_object_addr = irb_.CreateLoad(type_field_addr, kTBAARuntimeInfo);
+    llvm::Value* type_object_addr = irb_.CreateLoad(type_field_addr, kTBAAJRuntime);
 
     if (compiler_->CanAssumeTypeIsPresentInDexCache(dex_cache_, type_idx)) {
       return type_object_addr;
@@ -1600,7 +1600,7 @@
     irb_.CreateBitCast(object_addr, jobject_ptr_ty->getPointerTo());
 
   llvm::Value* object_type_object_addr =
-    irb_.CreateLoad(object_type_field_addr, kTBAARuntimeInfo);
+    irb_.CreateLoad(object_type_field_addr, kTBAAJRuntime);
 
   llvm::Value* equal_class =
     irb_.CreateICmpEQ(type_object_addr, object_type_object_addr);
@@ -1669,7 +1669,7 @@
     irb_.CreateBitCast(object_addr, jobject_ptr_ty->getPointerTo());
 
   llvm::Value* object_type_object_addr =
-    irb_.CreateLoad(object_type_field_addr, kTBAARuntimeInfo);
+    irb_.CreateLoad(object_type_field_addr, kTBAAJRuntime);
 
   llvm::Value* equal_class =
     irb_.CreateICmpEQ(type_object_addr, object_type_object_addr);
@@ -1698,7 +1698,7 @@
   return irb_.LoadFromObjectOffset(array,
                                    Array::LengthOffset().Int32Value(),
                                    irb_.getJIntTy(),
-                                   kTBAARuntimeInfo);
+                                   kTBAAJRuntime);
 }
 
 
@@ -2466,7 +2466,7 @@
   llvm::Value* storage_field_addr =
     EmitLoadDexCacheStaticStorageFieldAddr(type_idx);
 
-  llvm::Value* storage_object_addr = irb_.CreateLoad(storage_field_addr, kTBAARuntimeInfo);
+  llvm::Value* storage_object_addr = irb_.CreateLoad(storage_field_addr, kTBAAJRuntime);
 
   llvm::BasicBlock* block_original = irb_.GetInsertBlock();
 
@@ -2565,7 +2565,7 @@
         irb_.LoadFromObjectOffset(method_object_addr,
                                   Method::DeclaringClassOffset().Int32Value(),
                                   irb_.getJObjectTy(),
-                                  kTBAARuntimeInfo);
+                                  kTBAAJRuntime);
     } else {
       // Medium path, static storage base in a different class which
       // requires checks that the other class is initialized
@@ -2644,7 +2644,7 @@
         irb_.LoadFromObjectOffset(method_object_addr,
                                   Method::DeclaringClassOffset().Int32Value(),
                                   irb_.getJObjectTy(),
-                                  kTBAARuntimeInfo);
+                                  kTBAAJRuntime);
     } else {
       // Medium path, static storage base in a different class which
       // requires checks that the other class is initialized
@@ -2801,7 +2801,7 @@
     irb_.LoadFromObjectOffset(callee_method_object_addr,
                               Method::GetCodeOffset().Int32Value(),
                               GetFunctionType(callee_method_idx, is_static)->getPointerTo(),
-                              kTBAARuntimeInfo);
+                              kTBAAJRuntime);
 
   // Load the actual parameter
   std::vector<llvm::Value*> args;
@@ -2926,7 +2926,7 @@
   llvm::Value* callee_method_object_field_addr =
     EmitLoadDexCacheResolvedMethodFieldAddr(callee_method_idx);
 
-  return irb_.CreateLoad(callee_method_object_field_addr, kTBAARuntimeInfo);
+  return irb_.CreateLoad(callee_method_object_field_addr, kTBAAJRuntime);
 }
 
 
@@ -2938,14 +2938,14 @@
     irb_.LoadFromObjectOffset(this_addr,
                               Object::ClassOffset().Int32Value(),
                               irb_.getJObjectTy(),
-                              kTBAARuntimeInfo);
+                              kTBAAJRuntime);
 
   // Load vtable address
   llvm::Value* vtable_addr =
     irb_.LoadFromObjectOffset(class_object_addr,
                               Class::VTableOffset().Int32Value(),
                               irb_.getJObjectTy(),
-                              kTBAARuntimeInfo);
+                              kTBAAJRuntime);
 
   // Load callee method object
   llvm::Value* vtable_idx_value =
@@ -2954,7 +2954,7 @@
   llvm::Value* method_field_addr =
     EmitArrayGEP(vtable_addr, vtable_idx_value, irb_.getJObjectTy(), kObject);
 
-  return irb_.CreateLoad(method_field_addr, kTBAARuntimeInfo);
+  return irb_.CreateLoad(method_field_addr, kTBAAJRuntime);
 }
 
 
@@ -3555,7 +3555,7 @@
   return irb_.LoadFromObjectOffset(method_object_addr,
                                    offset.Int32Value(),
                                    irb_.getJObjectTy(),
-                                   kTBAARuntimeInfo);
+                                   kTBAAJRuntime);
 }
 
 
diff --git a/src/compiler_llvm/runtime_support_builder.cc b/src/compiler_llvm/runtime_support_builder.cc
index 2eef771..77cb468 100644
--- a/src/compiler_llvm/runtime_support_builder.cc
+++ b/src/compiler_llvm/runtime_support_builder.cc
@@ -142,7 +142,7 @@
     Value* exception = irb_.LoadFromObjectOffset(thread,
                                                  Thread::ExceptionOffset().Int32Value(),
                                                  irb_.getJObjectTy(),
-                                                 kTBAARuntimeInfo);
+                                                 kTBAAJRuntime);
     Value* is_exception_not_null = irb_.CreateICmpNE(exception, irb_.getJNull());
     irb_.CreateRet(is_exception_not_null);
 
@@ -164,7 +164,7 @@
     Value* suspend_count = irb_.LoadFromObjectOffset(thread,
                                                      Thread::SuspendCountOffset().Int32Value(),
                                                      irb_.getJIntTy(),
-                                                     kTBAARuntimeInfo);
+                                                     kTBAAJRuntime);
     Value* is_suspend = irb_.CreateICmpNE(suspend_count, irb_.getJInt(0));
 
     BasicBlock* basic_block_suspend = BasicBlock::Create(context_, "suspend", func);
@@ -208,7 +208,7 @@
     Value* card_table = irb_.LoadFromObjectOffset(thread,
                                                   Thread::CardTableOffset().Int32Value(),
                                                   irb_.getInt8Ty()->getPointerTo(),
-                                                  kTBAARuntimeInfo);
+                                                  kTBAAJRuntime);
     Value* target_addr_int = irb_.CreatePtrToInt(target_addr, irb_.getPtrEquivIntTy());
     Value* card_no = irb_.CreateLShr(target_addr_int, irb_.getPtrEquivInt(GC_CARD_SHIFT));
     Value* card_table_entry = irb_.CreateGEP(card_table, card_no);
diff --git a/src/compiler_llvm/tbaa_info.cc b/src/compiler_llvm/tbaa_info.cc
index 2b8f983..01a1978 100644
--- a/src/compiler_llvm/tbaa_info.cc
+++ b/src/compiler_llvm/tbaa_info.cc
@@ -48,6 +48,7 @@
     case kTBAAMemoryArray:      spec_ty = GenTBAANode("MemoryArray", GetRootType()); break;
     case kTBAAMemoryIdentified: spec_ty = GenTBAANode("MemoryIdentified", GetRootType()); break;
     case kTBAAMemoryStatic:     spec_ty = GenTBAANode("MemoryStatic", GetRootType()); break;
+    case kTBAAJRuntime:         spec_ty = GenTBAANode("JRuntime", GetRootType()); break;
     case kTBAARuntimeInfo:      spec_ty = GenTBAANode("RuntimeInfo", GetRootType()); break;
     case kTBAAConstJObject:     spec_ty = GenTBAANode("ConstJObject", GetRootType(), true); break;
     default:
diff --git a/src/compiler_llvm/upcall_compiler.cc b/src/compiler_llvm/upcall_compiler.cc
index fd2e59d..37dc981 100644
--- a/src/compiler_llvm/upcall_compiler.cc
+++ b/src/compiler_llvm/upcall_compiler.cc
@@ -152,7 +152,7 @@
     irb_.CreatePtrDisp(method_object_addr, code_field_offset_value,
                        accurate_func_type->getPointerTo()->getPointerTo());
 
-  llvm::Value* code_addr = irb_.CreateLoad(code_field_addr, kTBAARuntimeInfo);
+  llvm::Value* code_addr = irb_.CreateLoad(code_field_addr, kTBAAJRuntime);
 #else
   llvm::Value* result = irb_.CreateCall(irb_.GetRuntime(FixStub), method_object_addr);
   llvm::Value* code_addr = irb_.CreatePointerCast(result, accurate_func_type->getPointerTo());