Revert "Deopt does not throw"

This reverts commit 2905de1c0e5b6a0c995be474b3f0efdfdc6a41c4.

Reason for revert: test breaks on git_master-art-host; art-test-javac (linux) 

Change-Id: Ic39d442776858c74d2163683c78bd3a8072ad45e
diff --git a/compiler/optimizing/nodes.h b/compiler/optimizing/nodes.h
index b315c81..79d7330 100644
--- a/compiler/optimizing/nodes.h
+++ b/compiler/optimizing/nodes.h
@@ -1272,6 +1272,8 @@
   // the appropriate try entry will be returned.
   const HTryBoundary* ComputeTryEntryOfSuccessors() const;
 
+  bool HasThrowingInstructions() const;
+
   // Returns whether this block dominates the blocked passed as parameter.
   bool Dominates(HBasicBlock* block) const;
 
@@ -2130,7 +2132,6 @@
         !CanThrow() &&
         !IsSuspendCheck() &&
         !IsControlFlow() &&
-        !IsDeoptimize() &&
         !IsNativeDebugInfo() &&
         !IsParameterValue() &&
         // If we added an explicit barrier then we should keep it.
@@ -3237,9 +3238,7 @@
 
   bool NeedsEnvironment() const OVERRIDE { return true; }
 
-  // Even though deoptimize is often used for "exceptional cases" to go back to
-  // the interpreter, it never throws an exception.
-  bool CanThrow() const OVERRIDE { return false; }
+  bool CanThrow() const OVERRIDE { return true; }
 
   DeoptimizationKind GetDeoptimizationKind() const { return GetPackedField<DeoptimizeKindField>(); }