Simple debugging support for portable path.
Change-Id: Ibdc33b8d7f644c091fdb3ba3ce2ba45804bc4078
diff --git a/src/compiler_llvm/dalvik_reg.cc b/src/compiler_llvm/dalvik_reg.cc
index c3263ae..dc73e75 100644
--- a/src/compiler_llvm/dalvik_reg.cc
+++ b/src/compiler_llvm/dalvik_reg.cc
@@ -27,9 +27,9 @@
// Dalvik Register
//----------------------------------------------------------------------------
-DalvikReg::DalvikReg(MethodCompiler& method_compiler, const std::string& name)
+DalvikReg::DalvikReg(MethodCompiler& method_compiler, const std::string& name, llvm::Value* vreg)
: method_compiler_(&method_compiler), irb_(method_compiler.GetIRBuilder()),
- reg_name_(name), reg_32_(NULL), reg_64_(NULL), reg_obj_(NULL) {
+ reg_name_(name), reg_32_(NULL), reg_64_(NULL), reg_obj_(NULL), vreg_(vreg) {
}
@@ -118,10 +118,6 @@
return NULL;
}
break;
-
- default:
- LOG(FATAL) << "Couldn't GetValue of JType " << jty;
- return NULL;
}
if (jty == kFloat || jty == kDouble) {
@@ -141,13 +137,13 @@
switch (space) {
case kReg:
case kField:
- irb_.CreateStore(value, GetAddr(jty), kTBAARegister);
- return;
+ break;
case kAccurate:
case kArray:
switch (jty) {
case kVoid:
+ LOG(FATAL) << "Dalvik register with void type has no value";
break;
case kBoolean:
@@ -155,7 +151,7 @@
// NOTE: In accurate type space, we have to zero extend boolean from
// i1 to i32, and char from i16 to i32. In array type space, we have
// to zero extend boolean from i8 to i32, and char from i16 to i32.
- irb_.CreateStore(RegCat1ZExt(value), GetAddr(jty), kTBAARegister);
+ value = RegCat1ZExt(value);
break;
case kByte:
@@ -163,7 +159,7 @@
// NOTE: In accurate type space, we have to signed extend byte from
// i8 to i32, and short from i16 to i32. In array type space, we have
// to sign extend byte from i8 to i32, and short from i16 to i32.
- irb_.CreateStore(RegCat1SExt(value), GetAddr(jty), kTBAARegister);
+ value = RegCat1SExt(value);
break;
case kInt:
@@ -171,13 +167,19 @@
case kFloat:
case kDouble:
case kObject:
- irb_.CreateStore(value, GetAddr(jty), kTBAARegister);
break;
default:
LOG(FATAL) << "Unknown java type: " << jty;
}
}
+
+ irb_.CreateStore(value, GetAddr(jty), kTBAARegister);
+ if (vreg_ != NULL) {
+ irb_.CreateStore(value,
+ irb_.CreateBitCast(vreg_, value->getType()->getPointerTo()),
+ kTBAAShadowFrame);
+ }
}