Implement CheckPutArrayElement.

Change-Id: Ie9617df1debb57c80b937bc033ff231c4daedd0d
diff --git a/src/compiler_llvm/method_compiler.cc b/src/compiler_llvm/method_compiler.cc
index bcd40de..8b1cef6 100644
--- a/src/compiler_llvm/method_compiler.cc
+++ b/src/compiler_llvm/method_compiler.cc
@@ -2328,6 +2328,14 @@
 
   llvm::Value* new_value = EmitLoadDalvikReg(dec_insn.vA, elem_jty, kArray);
 
+  if (elem_jty == kObject) { // If put an object, check the type.
+    llvm::Function* runtime_func = irb_.GetRuntime(CheckPutArrayElement);
+
+    irb_.CreateCall2(runtime_func, new_value, array_addr);
+
+    EmitGuard_ExceptionLandingPad(dex_pc);
+  }
+
   irb_.CreateStore(new_value, array_elem_addr);
 
   irb_.CreateBr(GetNextBasicBlock(dex_pc));