Refactor dalvik_reg.

Also, fix ComputeMethodInfo, ARRAY_LENGTH may throw exception.

Don't store arguments to shadow frame, it already existed in the
caller's shadow frame.

Change-Id: I184a93ed7f3caea924514d425e6a00dc60464f90
diff --git a/src/compiler_llvm/dalvik_reg.h b/src/compiler_llvm/dalvik_reg.h
index 7356c87..f950771 100644
--- a/src/compiler_llvm/dalvik_reg.h
+++ b/src/compiler_llvm/dalvik_reg.h
@@ -20,6 +20,7 @@
 #include "backend_types.h"
 
 #include <stdint.h>
+#include <string>
 
 namespace llvm {
   class Type;
@@ -34,16 +35,13 @@
 
 class DalvikReg {
  public:
-  static DalvikReg* CreateLocalVarReg(MethodCompiler& method_compiler,
-                                      uint32_t reg_idx);
-
-  static DalvikReg* CreateRetValReg(MethodCompiler& method_compiler);
-
   static llvm::Type* GetRegCategoryEquivSizeTy(IRBuilder& irb, RegCategory reg_cat);
 
   static char GetRegCategoryNamePrefix(RegCategory reg_cat);
 
-  virtual ~DalvikReg();
+  DalvikReg(MethodCompiler& method_compiler, const std::string& name);
+
+  ~DalvikReg();
 
   llvm::Value* GetValue(JType jty, JTypeSpace space);
 
@@ -51,28 +49,27 @@
     return GetValue(GetJTypeFromShorty(shorty), space);
   }
 
-  virtual void SetValue(JType jty, JTypeSpace space, llvm::Value* value);
+  void SetValue(JType jty, JTypeSpace space, llvm::Value* value);
 
   void SetValue(char shorty, JTypeSpace space, llvm::Value* value) {
     return SetValue(GetJTypeFromShorty(shorty), space, value);
   }
 
- protected:
-  DalvikReg(MethodCompiler& method_compiler);
-
  private:
-  llvm::Value* GetAddr(JType jty, JTypeSpace space);
+  llvm::Value* GetAddr(JType jty);
 
   llvm::Value* RegCat1SExt(llvm::Value* value);
   llvm::Value* RegCat1ZExt(llvm::Value* value);
 
   llvm::Value* RegCat1Trunc(llvm::Value* value, llvm::Type* ty);
 
-  virtual llvm::Value* GetRawAddr(JType jty, JTypeSpace space) = 0;
-
- protected:
   MethodCompiler* method_compiler_;
   IRBuilder& irb_;
+
+  std::string reg_name_;
+  llvm::Value* reg_32_;
+  llvm::Value* reg_64_;
+  llvm::Value* reg_obj_;
 };
 
 } // namespace compiler_llvm