Fix pattern replacement for float constant.

Test: New test in run-test 569-checker-pattern-replacement.
Test: testrunner.py --host --optimizing -t 569
Change-Id: I71dc8d2e07d42284f60528c33965186c2fd6e237
diff --git a/compiler/optimizing/inliner.cc b/compiler/optimizing/inliner.cc
index 1df313d..39f684b 100644
--- a/compiler/optimizing/inliner.cc
+++ b/compiler/optimizing/inliner.cc
@@ -1551,14 +1551,19 @@
       *return_replacement = GetInvokeInputForArgVRegIndex(invoke_instruction,
                                                           inline_method.d.return_data.arg);
       break;
-    case kInlineOpNonWideConst:
-      if (method->GetShorty()[0] == 'L') {
+    case kInlineOpNonWideConst: {
+      char shorty0 = method->GetShorty()[0];
+      if (shorty0 == 'L') {
         DCHECK_EQ(inline_method.d.data, 0u);
         *return_replacement = graph_->GetNullConstant();
+      } else if (shorty0 == 'F') {
+        *return_replacement = graph_->GetFloatConstant(
+            bit_cast<float, int32_t>(static_cast<int32_t>(inline_method.d.data)));
       } else {
         *return_replacement = graph_->GetIntConstant(static_cast<int32_t>(inline_method.d.data));
       }
       break;
+    }
     case kInlineOpIGet: {
       const InlineIGetIPutData& data = inline_method.d.ifield_data;
       if (data.method_is_static || data.object_arg != 0u) {
diff --git a/test/569-checker-pattern-replacement/src-multidex/Second.java b/test/569-checker-pattern-replacement/src-multidex/Second.java
index 7a209de..89835c6 100644
--- a/test/569-checker-pattern-replacement/src-multidex/Second.java
+++ b/test/569-checker-pattern-replacement/src-multidex/Second.java
@@ -35,6 +35,10 @@
     return 7;
   }
 
+  public float return42f() {
+    return 42.0f;
+  }
+
   public static String staticReturnNull() {
     return null;
   }
diff --git a/test/569-checker-pattern-replacement/src/Main.java b/test/569-checker-pattern-replacement/src/Main.java
index e2658a4..8951d30 100644
--- a/test/569-checker-pattern-replacement/src/Main.java
+++ b/test/569-checker-pattern-replacement/src/Main.java
@@ -106,6 +106,23 @@
     return s.return7(null);
   }
 
+  /// CHECK-START: float Main.return42f(Second) inliner (before)
+  /// CHECK:      {{f\d+}}            InvokeVirtual
+
+  /// CHECK-START: float Main.return42f(Second) inliner (before)
+  /// CHECK-NOT:                      FloatConstant 42
+
+  /// CHECK-START: float Main.return42f(Second) inliner (after)
+  /// CHECK-DAG:  <<Const42f:f\d+>>   FloatConstant 42
+  /// CHECK-DAG:                      Return [<<Const42f>>]
+
+  /// CHECK-START: float Main.return42f(Second) inliner (after)
+  /// CHECK-NOT:                      InvokeVirtual
+
+  public static float return42f(Second s) {
+    return s.return42f();
+  }
+
   /// CHECK-START: java.lang.String Main.staticReturnNull() inliner (before)
   /// CHECK:      {{l\d+}}            InvokeStaticOrDirect
 
@@ -1166,6 +1183,7 @@
     // Replaced "return const" pattern.
     assertEquals(9, staticReturn9());
     assertEquals(7, return7(s));
+    assertEquals(42.0f, return42f(s));
     assertEquals(null, staticReturnNull());
     assertEquals(null, returnNull(s));
     // Replaced IGET pattern.
@@ -1249,6 +1267,12 @@
     }
   }
 
+  private static void assertEquals(float expected, float actual) {
+    if (expected != actual) {
+      throw new AssertionError("Wrong result: " + expected + " != " + actual);
+    }
+  }
+
   private static void assertEquals(double expected, double actual) {
     if (expected != actual) {
       throw new AssertionError("Wrong result: " + expected + " != " + actual);