TBAA, separate different types of heap load/store.

Change-Id: I24dc2857db2985239e17d97fdd6463d7f2b54985
diff --git a/src/compiler_llvm/ir_builder.h b/src/compiler_llvm/ir_builder.h
index 4dbc1b5..4b7642d 100644
--- a/src/compiler_llvm/ir_builder.h
+++ b/src/compiler_llvm/ir_builder.h
@@ -80,6 +80,16 @@
     return CreateStore(val, ptr, tbaa_.GetSpecialType(special_ty));
   }
 
+  llvm::LoadInst* CreateLoad(llvm::Value* ptr, TBAASpecialType special_ty, JType j_ty) {
+    return CreateLoad(ptr, tbaa_.GetMemoryJType(special_ty, j_ty));
+  }
+
+  llvm::StoreInst* CreateStore(llvm::Value* val, llvm::Value* ptr,
+                               TBAASpecialType special_ty, JType j_ty) {
+    DCHECK_NE(special_ty, kTBAAConstJObject) << "ConstJObject is read only!";
+    return CreateStore(val, ptr, tbaa_.GetMemoryJType(special_ty, j_ty));
+  }
+
   llvm::Value* LoadFromObjectOffset(llvm::Value* object_addr,
                                     int64_t offset,
                                     llvm::Type* type,
@@ -339,10 +349,11 @@
 
     case kObject:
       return getJNull();
-    }
 
-    LOG(FATAL) << "Unknown java type: " << jty;
-    return NULL;
+    default:
+      LOG(FATAL) << "Unknown java type: " << jty;
+      return NULL;
+    }
   }