ART: DCE should know that array-length can throw NPE

array-length can throw NPE so it should be taking into account.

Bug: 22521944
Change-Id: I6f961560ccbbf81f57f1c597828f2ee18e2c3054
Signed-off-by: Serguei Katkov <serguei.i.katkov@intel.com>
diff --git a/compiler/dex/gvn_dead_code_elimination.cc b/compiler/dex/gvn_dead_code_elimination.cc
index b1f5d87..044989e 100644
--- a/compiler/dex/gvn_dead_code_elimination.cc
+++ b/compiler/dex/gvn_dead_code_elimination.cc
@@ -1192,7 +1192,6 @@
     case Instruction::CONST_WIDE_32:
     case Instruction::CONST_WIDE:
     case Instruction::CONST_WIDE_HIGH16:
-    case Instruction::ARRAY_LENGTH:
     case Instruction::CMPL_FLOAT:
     case Instruction::CMPG_FLOAT:
     case Instruction::CMPL_DOUBLE:
@@ -1316,6 +1315,13 @@
       }
       break;
 
+    case Instruction::ARRAY_LENGTH:
+      if ((mir->optimization_flags & MIR_IGNORE_NULL_CHECK) == 0) {
+        must_keep = true;
+        uses_all_vregs = true;
+      }
+      break;
+
     case Instruction::AGET_OBJECT:
     case Instruction::AGET:
     case Instruction::AGET_WIDE: