diff --git a/src/compiler_llvm/dalvik_reg.cc b/src/compiler_llvm/dalvik_reg.cc
index 492d33b..0ed6089 100644
--- a/src/compiler_llvm/dalvik_reg.cc
+++ b/src/compiler_llvm/dalvik_reg.cc
@@ -86,6 +86,30 @@
 }
 
 
+llvm::Type* DalvikReg::GetRegCategoryEquivSizeTy(IRBuilder& irb, RegCategory reg_cat) {
+  switch (reg_cat) {
+  case kRegCat1nr:  return irb.getJIntTy();
+  case kRegCat2:    return irb.getJLongTy();
+  case kRegObject:  return irb.getJObjectTy();
+  default:
+    LOG(FATAL) << "Unknown register category: " << reg_cat;
+    return NULL;
+  }
+}
+
+
+char DalvikReg::GetRegCategoryNamePrefix(RegCategory reg_cat) {
+  switch (reg_cat) {
+  case kRegCat1nr:  return 'r';
+  case kRegCat2:    return 'w';
+  case kRegObject:  return 'p';
+  default:
+    LOG(FATAL) << "Unknown register category: " << reg_cat;
+    return '\0';
+  }
+}
+
+
 inline llvm::Value* DalvikReg::RegCat1SExt(llvm::Value* value) {
   return irb_.CreateSExt(value, irb_.getJIntTy());
 }
diff --git a/src/compiler_llvm/dalvik_reg.h b/src/compiler_llvm/dalvik_reg.h
index 2b17541..7356c87 100644
--- a/src/compiler_llvm/dalvik_reg.h
+++ b/src/compiler_llvm/dalvik_reg.h
@@ -39,6 +39,10 @@
 
   static DalvikReg* CreateRetValReg(MethodCompiler& method_compiler);
 
+  static llvm::Type* GetRegCategoryEquivSizeTy(IRBuilder& irb, RegCategory reg_cat);
+
+  static char GetRegCategoryNamePrefix(RegCategory reg_cat);
+
   virtual ~DalvikReg();
 
   llvm::Value* GetValue(JType jty, JTypeSpace space);
diff --git a/src/compiler_llvm/jni_compiler.cc b/src/compiler_llvm/jni_compiler.cc
index 801a692..27fe6db 100644
--- a/src/compiler_llvm/jni_compiler.cc
+++ b/src/compiler_llvm/jni_compiler.cc
@@ -99,7 +99,9 @@
   // "this" object pointer for non-static
   // "class" object pointer for static
   for (unsigned i = 0; arg_iter != arg_end; ++i, ++arg_iter) {
+#if !defined(NDEBUG)
     arg_iter->setName(StringPrintf("a%u", i));
+#endif
     if (arg_iter->getType() == irb_.getJObjectTy()) {
       ++sirt_size;
     }
diff --git a/src/compiler_llvm/method_compiler.cc b/src/compiler_llvm/method_compiler.cc
index c8976cd..9d0d3f4 100644
--- a/src/compiler_llvm/method_compiler.cc
+++ b/src/compiler_llvm/method_compiler.cc
@@ -88,6 +88,7 @@
   func_ = llvm::Function::Create(func_type, llvm::Function::ExternalLinkage,
                                  func_name, module_);
 
+#if !defined(NDEBUG)
   // Set argument name
   llvm::Function::arg_iterator arg_iter(func_->arg_begin());
   llvm::Function::arg_iterator arg_end(func_->arg_end());
@@ -105,6 +106,7 @@
   for (unsigned i = 0; arg_iter != arg_end; ++i, ++arg_iter) {
     arg_iter->setName(StringPrintf("a%u", i));
   }
+#endif
 }
 
 
@@ -3666,11 +3668,13 @@
 CreateBasicBlockWithDexPC(uint32_t dex_pc, char const* postfix) {
   std::string name;
 
+#if !defined(NDEBUG)
   if (postfix) {
     StringAppendF(&name, "B%04x.%s", dex_pc, postfix);
   } else {
     StringAppendF(&name, "B%04x", dex_pc);
   }
+#endif
 
   return llvm::BasicBlock::Create(*context_, name, func_);
 }
@@ -3746,10 +3750,14 @@
   // Get try item from code item
   DexFile::TryItem const* ti = DexFile::GetTryItems(*code_item_, ti_offset);
 
+  std::string lpadname;
+
+#if !defined(NDEBUG)
+  StringAppendF(&lpadname, "lpad%d_%04x_to_%04x", ti_offset, ti->start_addr_, ti->handler_off_);
+#endif
+
   // Create landing pad basic block
-  block_lpad = llvm::BasicBlock::Create(*context_,
-                                        StringPrintf("lpad%d", ti_offset),
-                                        func_);
+  block_lpad = llvm::BasicBlock::Create(*context_, lpadname, func_);
 
   // Change IRBuilder insert point
   llvm::IRBuilderBase::InsertPoint irb_ip_original = irb_.saveIP();
@@ -3820,35 +3828,20 @@
 
 llvm::Value* MethodCompiler::AllocDalvikLocalVarReg(RegCategory cat,
                                                     uint32_t reg_idx) {
+  // Get reg_type and reg_name from DalvikReg
+  llvm::Type* reg_type = DalvikReg::GetRegCategoryEquivSizeTy(irb_, cat);
+  std::string reg_name;
+
+#if !defined(NDEBUG)
+  StringAppendF(&reg_name, "%c%u", DalvikReg::GetRegCategoryNamePrefix(cat), reg_idx);
+#endif
 
   // Save current IR builder insert point
   llvm::IRBuilderBase::InsertPoint irb_ip_original = irb_.saveIP();
+  irb_.SetInsertPoint(basic_block_reg_alloca_);
 
   // Alloca
-  llvm::Value* reg_addr = NULL;
-
-  switch (cat) {
-  case kRegCat1nr:
-    irb_.SetInsertPoint(basic_block_reg_alloca_);
-    reg_addr = irb_.CreateAlloca(irb_.getJIntTy(), 0,
-                                 StringPrintf("r%u", reg_idx));
-    break;
-
-  case kRegCat2:
-    irb_.SetInsertPoint(basic_block_reg_alloca_);
-    reg_addr = irb_.CreateAlloca(irb_.getJLongTy(), 0,
-                                 StringPrintf("w%u", reg_idx));
-    break;
-
-  case kRegObject:
-    irb_.SetInsertPoint(basic_block_reg_alloca_);
-    reg_addr = irb_.CreateAlloca(irb_.getJObjectTy(), 0,
-                                 StringPrintf("o%u", reg_idx));
-    break;
-
-  default:
-    LOG(FATAL) << "Unknown register category for allocation: " << cat;
-  }
+  llvm::Value* reg_addr = irb_.CreateAlloca(reg_type, 0, reg_name);
 
   // Restore IRBuilder insert point
   irb_.restoreIP(irb_ip_original);
@@ -3859,6 +3852,12 @@
 
 
 llvm::Value* MethodCompiler::AllocShadowFrameEntry(uint32_t reg_idx) {
+  std::string reg_name;
+
+#if !defined(NDEBUG)
+  StringAppendF(&reg_name, "o%u", reg_idx);
+#endif
+
   // Save current IR builder insert point
   llvm::IRBuilderBase::InsertPoint irb_ip_original = irb_.saveIP();
 
@@ -3870,8 +3869,7 @@
     irb_.getInt32(reg_idx) // Pointer field
   };
 
-  llvm::Value* reg_addr =
-    irb_.CreateGEP(shadow_frame_, gep_index, StringPrintf("p%u", reg_idx));
+  llvm::Value* reg_addr = irb_.CreateGEP(shadow_frame_, gep_index, reg_name);
 
   // Restore IRBuilder insert point
   irb_.restoreIP(irb_ip_original);
@@ -3882,31 +3880,20 @@
 
 
 llvm::Value* MethodCompiler::AllocDalvikRetValReg(RegCategory cat) {
+  // Get reg_type and reg_name from DalvikReg
+  llvm::Type* reg_type = DalvikReg::GetRegCategoryEquivSizeTy(irb_, cat);
+  std::string reg_name;
+
+#if !defined(NDEBUG)
+  StringAppendF(&reg_name, "%c_res", DalvikReg::GetRegCategoryNamePrefix(cat));
+#endif
+
   // Save current IR builder insert point
   llvm::IRBuilderBase::InsertPoint irb_ip_original = irb_.saveIP();
+  irb_.SetInsertPoint(basic_block_reg_alloca_);
 
   // Alloca
-  llvm::Value* reg_addr = NULL;
-
-  switch (cat) {
-  case kRegCat1nr:
-    irb_.SetInsertPoint(basic_block_reg_alloca_);
-    reg_addr = irb_.CreateAlloca(irb_.getJIntTy(), 0, "r_res");
-    break;
-
-  case kRegCat2:
-    irb_.SetInsertPoint(basic_block_reg_alloca_);
-    reg_addr = irb_.CreateAlloca(irb_.getJLongTy(), 0, "w_res");
-    break;
-
-  case kRegObject:
-    irb_.SetInsertPoint(basic_block_reg_alloca_);
-    reg_addr = irb_.CreateAlloca(irb_.getJObjectTy(), 0, "p_res");
-    break;
-
-  default:
-    LOG(FATAL) << "Unknown register category for allocation: " << cat;
-  }
+  llvm::Value* reg_addr = irb_.CreateAlloca(reg_type, 0, reg_name);
 
   // Restore IRBuilder insert point
   irb_.restoreIP(irb_ip_original);
