Portable slow-path sets for float/double need bitcast.

Build fix.
Also clean up gets that only need bitcasts on their slow-paths.

Change-Id: Ic7c74fb790198a07a44b7559c6eadb08d29f8702
diff --git a/src/compiler_llvm/gbc_expander.cc b/src/compiler_llvm/gbc_expander.cc
index 0146542..df83ddc 100644
--- a/src/compiler_llvm/gbc_expander.cc
+++ b/src/compiler_llvm/gbc_expander.cc
@@ -1434,6 +1434,9 @@
 
     EmitGuard_ExceptionLandingPad(dex_pc);
 
+    if (field_jty == kFloat || field_jty == kDouble) {
+      field_value = irb_.CreateBitCast(field_value, irb_.getJType(field_jty));
+    }
   } else {
     DCHECK_GE(field_offset, 0);
 
@@ -1451,10 +1454,6 @@
     field_value = SignOrZeroExtendCat1Types(field_value, field_jty);
   }
 
-  if (field_jty == kFloat || field_jty == kDouble) {
-    field_value = irb_.CreateBitCast(field_value, irb_.getJType(field_jty));
-  }
-
   return field_value;
 }
 
@@ -1466,10 +1465,6 @@
   uint32_t field_idx = LV2UInt(call_inst.getArgOperand(3));
   int opt_flags = LV2UInt(call_inst.getArgOperand(0));
 
-  if (field_jty == kFloat || field_jty == kDouble) {
-    new_value = irb_.CreateBitCast(new_value, irb_.getJType(field_jty));
-  }
-
   EmitGuard_NullPointerException(dex_pc, object_addr, opt_flags);
 
   int field_offset;
@@ -1480,6 +1475,12 @@
   if (!is_fast_path) {
     llvm::Function* runtime_func;
 
+    if (field_jty == kFloat) {
+      new_value = irb_.CreateBitCast(new_value, irb_.getJType(kInt));
+    } else if (field_jty == kDouble) {
+      new_value = irb_.CreateBitCast(new_value, irb_.getJType(kLong));
+    }
+
     if (field_jty == kObject) {
       runtime_func = irb_.GetRuntime(runtime_support::SetObjectInstance);
     } else if (field_jty == kLong || field_jty == kDouble) {
@@ -1695,6 +1696,9 @@
 
     EmitGuard_ExceptionLandingPad(dex_pc);
 
+    if (field_jty == kFloat || field_jty == kDouble) {
+      static_field_value = irb_.CreateBitCast(static_field_value, irb_.getJType(field_jty));
+    }
   } else {
     DCHECK_GE(field_offset, 0);
 
@@ -1728,11 +1732,6 @@
     static_field_value = SignOrZeroExtendCat1Types(static_field_value, field_jty);
   }
 
-  if (field_jty == kFloat || field_jty == kDouble) {
-    static_field_value =
-        irb_.CreateBitCast(static_field_value, irb_.getJType(field_jty));
-  }
-
   return static_field_value;
 }
 
@@ -1766,6 +1765,12 @@
       runtime_func = irb_.GetRuntime(runtime_support::Set32Static);
     }
 
+    if (field_jty == kFloat) {
+      new_value = irb_.CreateBitCast(new_value, irb_.getJType(kInt));
+    } else if (field_jty == kDouble) {
+      new_value = irb_.CreateBitCast(new_value, irb_.getJType(kLong));
+    }
+
     llvm::Constant* field_idx_value = irb_.getInt32(field_idx);
 
     llvm::Value* method_object_addr = EmitLoadMethodObjectAddr();