Fix float/double mem2reg issue.

If we bitcast the pointer, it can't do the mem2reg.

Change-Id: I54790929a91d17500857ee231672a325238ad176
diff --git a/src/compiler_llvm/dalvik_reg.cc b/src/compiler_llvm/dalvik_reg.cc
index 84da907..e19067f 100644
--- a/src/compiler_llvm/dalvik_reg.cc
+++ b/src/compiler_llvm/dalvik_reg.cc
@@ -129,10 +129,12 @@
 llvm::Value* DalvikReg::GetValue(JType jty, JTypeSpace space) {
   DCHECK_NE(jty, kVoid) << "Dalvik register will never be void type";
 
+  llvm::Value* value = NULL;
   switch (space) {
   case kReg:
   case kField:
-    return irb_.CreateLoad(GetAddr(jty, space), kTBAARegister);
+    value = irb_.CreateLoad(GetAddr(jty, space), kTBAARegister);
+    break;
 
   case kAccurate:
   case kArray:
@@ -148,30 +150,43 @@
       // NOTE: In array type space, boolean is truncated from i32 to i8, while
       // in accurate type space, boolean is truncated from i32 to i1.
       // For the other cases, array type space is equal to accurate type space.
-      return RegCat1Trunc(irb_.CreateLoad(GetAddr(jty, space), kTBAARegister),
-                          irb_.getJType(jty, space));
+      value = RegCat1Trunc(irb_.CreateLoad(GetAddr(jty, space), kTBAARegister),
+                           irb_.getJType(jty, space));
+      break;
 
     case kInt:
     case kLong:
     case kFloat:
     case kDouble:
     case kObject:
-      return irb_.CreateLoad(GetAddr(jty, space), kTBAARegister);
+      value = irb_.CreateLoad(GetAddr(jty, space), kTBAARegister);
+      break;
 
     default:
       LOG(FATAL) << "Unknown java type: " << jty;
       return NULL;
     }
+    break;
+
+  default:
+    LOG(FATAL) << "Couldn't GetValue of JType " << jty;
+    return NULL;
   }
 
-  LOG(FATAL) << "Couldn't GetValue of JType " << jty;
-  return NULL;
+  if (jty == kFloat || jty == kDouble) {
+    value = irb_.CreateBitCast(value, irb_.getJType(jty, space));
+  }
+  return value;
 }
 
 
 void DalvikReg::SetValue(JType jty, JTypeSpace space, llvm::Value* value) {
   DCHECK_NE(jty, kVoid) << "Dalvik register will never be void type";
 
+  if (jty == kFloat || jty == kDouble) {
+    value = irb_.CreateBitCast(value, irb_.getJType(jty, kReg));
+  }
+
   switch (space) {
   case kReg:
   case kField:
@@ -216,15 +231,7 @@
 
 
 llvm::Value* DalvikReg::GetAddr(JType jty, JTypeSpace space) {
-  if (jty == kFloat) {
-    return irb_.CreateBitCast(GetRawAddr(jty, space),
-                              irb_.getJFloatTy()->getPointerTo());
-  } else if (jty == kDouble) {
-    return irb_.CreateBitCast(GetRawAddr(jty, space),
-                              irb_.getJDoubleTy()->getPointerTo());
-  } else {
-    return GetRawAddr(jty, space);
-  }
+  return GetRawAddr(jty, space);
 }