TBAA, separate JRuntime and ConstJObject.

This change can eliminate redundant virtual table load.

Also, fix comment.

Change-Id: I9deb9979eadce6ad728b6582cef80001e3a7039e
diff --git a/src/compiler_llvm/jni_compiler.cc b/src/compiler_llvm/jni_compiler.cc
index 1fa0ce7..357d50d 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(),
-                                  kTBAAJRuntime);
+                                  kTBAAConstJObject);
   }
   // Actual argument (ignore method and this object)
   arg_begin = arg_iter;
diff --git a/src/compiler_llvm/method_compiler.cc b/src/compiler_llvm/method_compiler.cc
index cbad3f966..de0e1ea 100644
--- a/src/compiler_llvm/method_compiler.cc
+++ b/src/compiler_llvm/method_compiler.cc
@@ -1600,7 +1600,7 @@
     irb_.CreateBitCast(object_addr, jobject_ptr_ty->getPointerTo());
 
   llvm::Value* object_type_object_addr =
-    irb_.CreateLoad(object_type_field_addr, kTBAAJRuntime);
+    irb_.CreateLoad(object_type_field_addr, kTBAAConstJObject);
 
   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, kTBAAJRuntime);
+    irb_.CreateLoad(object_type_field_addr, kTBAAConstJObject);
 
   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(),
-                                   kTBAAJRuntime);
+                                   kTBAAConstJObject);
 }
 
 
@@ -2565,7 +2565,7 @@
         irb_.LoadFromObjectOffset(method_object_addr,
                                   Method::DeclaringClassOffset().Int32Value(),
                                   irb_.getJObjectTy(),
-                                  kTBAAJRuntime);
+                                  kTBAAConstJObject);
     } 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(),
-                                  kTBAAJRuntime);
+                                  kTBAAConstJObject);
     } else {
       // Medium path, static storage base in a different class which
       // requires checks that the other class is initialized
@@ -2932,14 +2932,14 @@
     irb_.LoadFromObjectOffset(this_addr,
                               Object::ClassOffset().Int32Value(),
                               irb_.getJObjectTy(),
-                              kTBAAJRuntime);
+                              kTBAAConstJObject);
 
   // Load vtable address
   llvm::Value* vtable_addr =
     irb_.LoadFromObjectOffset(class_object_addr,
                               Class::VTableOffset().Int32Value(),
                               irb_.getJObjectTy(),
-                              kTBAAJRuntime);
+                              kTBAAConstJObject);
 
   // Load callee method object
   llvm::Value* vtable_idx_value =
@@ -2948,7 +2948,7 @@
   llvm::Value* method_field_addr =
     EmitArrayGEP(vtable_addr, vtable_idx_value, irb_.getJObjectTy(), kObject);
 
-  return irb_.CreateLoad(method_field_addr, kTBAAJRuntime);
+  return irb_.CreateLoad(method_field_addr, kTBAAConstJObject);
 }
 
 
@@ -3549,7 +3549,7 @@
   return irb_.LoadFromObjectOffset(method_object_addr,
                                    offset.Int32Value(),
                                    irb_.getJObjectTy(),
-                                   kTBAAJRuntime);
+                                   kTBAAConstJObject);
 }
 
 
diff --git a/src/compiler_llvm/runtime_support_builder.cc b/src/compiler_llvm/runtime_support_builder.cc
index f7b9f07..0350031 100644
--- a/src/compiler_llvm/runtime_support_builder.cc
+++ b/src/compiler_llvm/runtime_support_builder.cc
@@ -201,7 +201,7 @@
     Value* card_table = irb_.LoadFromObjectOffset(thread,
                                                   Thread::CardTableOffset().Int32Value(),
                                                   irb_.getInt8Ty()->getPointerTo(),
-                                                  kTBAAJRuntime);
+                                                  kTBAAConstJObject);
     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 d1b351f..913760b 100644
--- a/src/compiler_llvm/tbaa_info.cc
+++ b/src/compiler_llvm/tbaa_info.cc
@@ -61,7 +61,7 @@
 llvm::MDNode* TBAAInfo::GetMemoryJType(TBAASpecialType sty_id, JType jty_id) {
   DCHECK(sty_id == kTBAAHeapArray ||
          sty_id == kTBAAHeapInstance ||
-         sty_id == kTBAAHeapStatic) << "SpecialType must be array, identified, or static";
+         sty_id == kTBAAHeapStatic) << "SpecialType must be array, instance, or static";
 
   DCHECK_GE(jty_id, 0) << "Unknown JType: " << jty_id;
   DCHECK_LT(jty_id, MAX_JTYPE) << "Unknown JType: " << jty_id;