Workaround for Issue 7250540

There's a problem (originating with Dalvik's failure to properly type constants) with
Dalvik vregs that are used in both reference and floating point situations.  In
particular, if a constant zero is used in a floating point context, the verifier in
some cases will treat it as a null pointer for the purposes generating the GC map.

If that vreg ends up promoted to a floating point value, the run-time value of that
vreg will not be found during garbage collection.  As a quick workaround, this
CL causes the compiler to detect this special case of an immediate zero being loaded
into a promoted floating point register and also store a zero in the core/ref identity
of that vreg.

Note, the CL also excludes references from store elimination.

Change-Id: I72f0a96744823ff9c5a2bd961a5e39ac4bbc707b
diff --git a/src/compiler/codegen/ralloc_util.cc b/src/compiler/codegen/ralloc_util.cc
index 7cc3fad..999c652 100644
--- a/src/compiler/codegen/ralloc_util.cc
+++ b/src/compiler/codegen/ralloc_util.cc
@@ -146,7 +146,7 @@
  * ssa name (above the last original Dalvik register).  This function
  * maps SSA names to positions in the promotion_map array.
  */
-static int SRegToPMap(CompilationUnit* cu, int s_reg)
+int SRegToPMap(CompilationUnit* cu, int s_reg)
 {
   DCHECK_LT(s_reg, cu->num_ssa_regs);
   DCHECK_GE(s_reg, 0);