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