Some clean-up for the handling of HSelect in LSE

Use $noinline and throwing an Exception for doing no-inlining in
the test.
Also create reference info early for HSelect if it has reference
type, which may help the pre-existence-based alias analysis.

Change-Id: Ia825058a457b049f87a13087bb78f5233513e0a8
diff --git a/compiler/optimizing/load_store_elimination.cc b/compiler/optimizing/load_store_elimination.cc
index 9a97f54..8eaac0b 100644
--- a/compiler/optimizing/load_store_elimination.cc
+++ b/compiler/optimizing/load_store_elimination.cc
@@ -61,7 +61,7 @@
           (use->IsStaticFieldSet() && (reference_ == use->InputAt(1))) ||
           (use->IsUnresolvedStaticFieldSet() && (reference_ == use->InputAt(0))) ||
           (use->IsArraySet() && (reference_ == use->InputAt(2)))) {
-        // reference_ is merged to a phi/HSelect, passed to a callee, or stored to heap.
+        // reference_ is merged to HPhi/HSelect, passed to a callee, or stored to heap.
         // reference_ isn't the only name that can refer to its value anymore.
         is_singleton_ = false;
         is_singleton_and_not_returned_ = false;
@@ -458,6 +458,10 @@
     CreateReferenceInfoForReferenceType(instruction);
   }
 
+  void VisitSelect(HSelect* instruction) OVERRIDE {
+    CreateReferenceInfoForReferenceType(instruction);
+  }
+
   void VisitDeoptimize(HDeoptimize* instruction ATTRIBUTE_UNUSED) OVERRIDE {
     may_deoptimize_ = true;
   }