diff --git a/src/compiler_llvm/art_module.ll b/src/compiler_llvm/art_module.ll
index a2da2b6..35cfaac 100644
--- a/src/compiler_llvm/art_module.ll
+++ b/src/compiler_llvm/art_module.ll
@@ -35,7 +35,7 @@
 ; Thread
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-declare %JavaObject* @art_get_current_thread_from_code()
+declare %JavaObject* @art_get_current_thread_from_code() readonly
 declare void @art_set_current_thread_from_code(%JavaObject*)
 
 declare void @art_lock_object_from_code(%JavaObject*, %JavaObject*)
@@ -52,7 +52,7 @@
 ; Exception
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-declare i1 @art_is_exception_pending_from_code()
+declare i1 @art_is_exception_pending_from_code() readonly
 
 declare void @art_throw_div_zero_from_code()
 declare void @art_throw_array_bounds_from_code(i32, i32)
diff --git a/src/compiler_llvm/generated/art_module.cc b/src/compiler_llvm/generated/art_module.cc
index b3963ef..a337e40 100644
--- a/src/compiler_llvm/generated/art_module.cc
+++ b/src/compiler_llvm/generated/art_module.cc
@@ -359,6 +359,14 @@
 func_art_get_current_thread_from_code->setCallingConv(CallingConv::C);
 }
 AttrListPtr func_art_get_current_thread_from_code_PAL;
+{
+ SmallVector<AttributeWithIndex, 4> Attrs;
+ AttributeWithIndex PAWI;
+ PAWI.Index = 4294967295U; PAWI.Attrs = Attribute::None  | Attribute::ReadOnly;
+ Attrs.push_back(PAWI);
+ func_art_get_current_thread_from_code_PAL = AttrListPtr::get(Attrs.begin(), Attrs.end());
+ 
+}
 func_art_get_current_thread_from_code->setAttributes(func_art_get_current_thread_from_code_PAL);
 
 Function* func_art_set_current_thread_from_code = mod->getFunction("art_set_current_thread_from_code");
@@ -436,6 +444,14 @@
 func_art_is_exception_pending_from_code->setCallingConv(CallingConv::C);
 }
 AttrListPtr func_art_is_exception_pending_from_code_PAL;
+{
+ SmallVector<AttributeWithIndex, 4> Attrs;
+ AttributeWithIndex PAWI;
+ PAWI.Index = 4294967295U; PAWI.Attrs = Attribute::None  | Attribute::ReadOnly;
+ Attrs.push_back(PAWI);
+ func_art_is_exception_pending_from_code_PAL = AttrListPtr::get(Attrs.begin(), Attrs.end());
+ 
+}
 func_art_is_exception_pending_from_code->setAttributes(func_art_is_exception_pending_from_code_PAL);
 
 Function* func_art_throw_div_zero_from_code = mod->getFunction("art_throw_div_zero_from_code");
diff --git a/src/compiler_llvm/ir_builder.h b/src/compiler_llvm/ir_builder.h
index 4b7642d..93a7f19 100644
--- a/src/compiler_llvm/ir_builder.h
+++ b/src/compiler_llvm/ir_builder.h
@@ -90,10 +90,10 @@
     return CreateStore(val, ptr, tbaa_.GetMemoryJType(special_ty, j_ty));
   }
 
-  llvm::Value* LoadFromObjectOffset(llvm::Value* object_addr,
-                                    int64_t offset,
-                                    llvm::Type* type,
-                                    TBAASpecialType special_ty) {
+  llvm::LoadInst* LoadFromObjectOffset(llvm::Value* object_addr,
+                                       int64_t offset,
+                                       llvm::Type* type,
+                                       TBAASpecialType special_ty) {
     return LoadFromObjectOffset(object_addr, offset, type, tbaa_.GetSpecialType(special_ty));
   }
 
@@ -149,10 +149,10 @@
     return CreatePtrDisp(base, total_offset, ret_ty);
   }
 
-  llvm::Value* LoadFromObjectOffset(llvm::Value* object_addr,
-                                    int64_t offset,
-                                    llvm::Type* type,
-                                    llvm::MDNode* tbaa_info) {
+  llvm::LoadInst* LoadFromObjectOffset(llvm::Value* object_addr,
+                                       int64_t offset,
+                                       llvm::Type* type,
+                                       llvm::MDNode* tbaa_info) {
     // Convert offset to llvm::value
     llvm::Value* llvm_offset = getPtrEquivInt(offset);
     // Calculate the value's address
diff --git a/src/compiler_llvm/runtime_support_builder.cc b/src/compiler_llvm/runtime_support_builder.cc
index 77cb468..f4343fc 100644
--- a/src/compiler_llvm/runtime_support_builder.cc
+++ b/src/compiler_llvm/runtime_support_builder.cc
@@ -56,15 +56,7 @@
 
 void RuntimeSupportBuilder::MakeFunctionInline(llvm::Function* func) {
   func->setLinkage(GlobalValue::LinkOnceODRLinkage);
-
-  SmallVector<AttributeWithIndex, 4> Attrs;
-  AttributeWithIndex PAWI;
-  PAWI.Index = ~0U;
-  PAWI.Attrs = Attribute::None | Attribute::NoUnwind | Attribute::AlwaysInline;
-  Attrs.push_back(PAWI);
-  AttrListPtr func_PAL = AttrListPtr::get(Attrs.begin(), Attrs.end());
-
-  func->setAttributes(func_PAL);
+  func->addFnAttr(Attribute::AlwaysInline);
 }
 
 void RuntimeSupportBuilder::OverrideRuntimeSupportFunction(RuntimeId id, llvm::Function* function) {
diff --git a/src/compiler_llvm/runtime_support_builder_arm.cc b/src/compiler_llvm/runtime_support_builder_arm.cc
index 6029d3e..6d5c1e7 100644
--- a/src/compiler_llvm/runtime_support_builder_arm.cc
+++ b/src/compiler_llvm/runtime_support_builder_arm.cc
@@ -44,7 +44,8 @@
     irb_.SetInsertPoint(basic_block);
 
     InlineAsm* get_r9 = InlineAsm::get(func->getFunctionType(), "mov $0, r9", "=r", false);
-    Value* r9 = irb_.CreateCall(get_r9);
+    CallInst* r9 = irb_.CreateCall(get_r9);
+    r9->setOnlyReadsMemory();
     irb_.CreateRet(r9);
 
     VERIFY_LLVM_FUNCTION(*func);
diff --git a/src/compiler_llvm/runtime_support_builder_x86.cc b/src/compiler_llvm/runtime_support_builder_x86.cc
index ee5f6d8..fa73020 100644
--- a/src/compiler_llvm/runtime_support_builder_x86.cc
+++ b/src/compiler_llvm/runtime_support_builder_x86.cc
@@ -49,7 +49,8 @@
                                               /*Params=*/func_ty_args,
                                               /*isVarArg=*/false);
     InlineAsm* get_fp = InlineAsm::get(func_ty, "movl %fs:($1), $0", "=r,r", false);
-    Value* fp = irb_.CreateCall(get_fp, irb_.getPtrEquivInt(Thread::SelfOffset().Int32Value()));
+    CallInst* fp = irb_.CreateCall(get_fp, irb_.getPtrEquivInt(Thread::SelfOffset().Int32Value()));
+    fp->setOnlyReadsMemory();
     irb_.CreateRet(fp);
 
     VERIFY_LLVM_FUNCTION(*func);
diff --git a/src/compiler_llvm/tbaa_info.h b/src/compiler_llvm/tbaa_info.h
index 1fe9314..9c0e250 100644
--- a/src/compiler_llvm/tbaa_info.h
+++ b/src/compiler_llvm/tbaa_info.h
@@ -52,7 +52,7 @@
   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
+  // There are 3 categories of memory types will not alias: array element, instance field, and
   // static field.
   llvm::MDNode* memory_jtype_[3][MAX_JTYPE];
 };
