Revert "Optimize code generation of check-cast and instance-of."

Failures with libcore tests.

This reverts commit 64acf303eaa2f32c0b1d8cfcbf044a822c5eec08.

Change-Id: Ie6f323fcf5d86bae5c334c1352bb21f1bad60a88
diff --git a/compiler/optimizing/nodes.h b/compiler/optimizing/nodes.h
index 27bbff0..a44c982 100644
--- a/compiler/optimizing/nodes.h
+++ b/compiler/optimizing/nodes.h
@@ -4840,29 +4840,16 @@
   DISALLOW_COPY_AND_ASSIGN(HThrow);
 };
 
-/**
- * Implementation strategies for the code generator of a HInstanceOf
- * or `HCheckCast`.
- */
-enum class TypeCheckKind {
-  kExactCheck,            // Can do a single class compare.
-  kClassHierarchyCheck,   // Can just walk the super class chain.
-  kAbstractClassCheck,    // Can just walk the super class chain, starting one up.
-  kInterfaceCheck,        // No optimization yet when checking against an interface.
-  kArrayObjectCheck,      // Can just check if the array is not primitive.
-  kArrayCheck             // No optimization yet when checking against a generic array.
-};
-
 class HInstanceOf : public HExpression<2> {
  public:
   HInstanceOf(HInstruction* object,
               HLoadClass* constant,
-              TypeCheckKind check_kind,
+              bool class_is_final,
               uint32_t dex_pc)
       : HExpression(Primitive::kPrimBoolean,
-                    SideEffectsForArchRuntimeCalls(check_kind),
+                    SideEffectsForArchRuntimeCalls(class_is_final),
                     dex_pc),
-        check_kind_(check_kind),
+        class_is_final_(class_is_final),
         must_do_null_check_(true) {
     SetRawInputAt(0, object);
     SetRawInputAt(1, constant);
@@ -4878,25 +4865,20 @@
     return false;
   }
 
-  bool IsExactCheck() const { return check_kind_ == TypeCheckKind::kExactCheck; }
-
-  TypeCheckKind GetTypeCheckKind() const { return check_kind_; }
+  bool IsClassFinal() const { return class_is_final_; }
 
   // Used only in code generation.
   bool MustDoNullCheck() const { return must_do_null_check_; }
   void ClearMustDoNullCheck() { must_do_null_check_ = false; }
 
-  static SideEffects SideEffectsForArchRuntimeCalls(TypeCheckKind check_kind) {
-    return (check_kind == TypeCheckKind::kExactCheck)
-        ? SideEffects::None()
-        // Mips currently does runtime calls for any other checks.
-        : SideEffects::CanTriggerGC();
+  static SideEffects SideEffectsForArchRuntimeCalls(bool class_is_final) {
+    return class_is_final ? SideEffects::None() : SideEffects::CanTriggerGC();
   }
 
   DECLARE_INSTRUCTION(InstanceOf);
 
  private:
-  const TypeCheckKind check_kind_;
+  const bool class_is_final_;
   bool must_do_null_check_;
 
   DISALLOW_COPY_AND_ASSIGN(HInstanceOf);
@@ -4952,10 +4934,10 @@
  public:
   HCheckCast(HInstruction* object,
              HLoadClass* constant,
-             TypeCheckKind check_kind,
+             bool class_is_final,
              uint32_t dex_pc)
       : HTemplateInstruction(SideEffects::CanTriggerGC(), dex_pc),
-        check_kind_(check_kind),
+        class_is_final_(class_is_final),
         must_do_null_check_(true) {
     SetRawInputAt(0, object);
     SetRawInputAt(1, constant);
@@ -4976,14 +4958,14 @@
 
   bool MustDoNullCheck() const { return must_do_null_check_; }
   void ClearMustDoNullCheck() { must_do_null_check_ = false; }
-  TypeCheckKind GetTypeCheckKind() const { return check_kind_; }
 
-  bool IsExactCheck() const { return check_kind_ == TypeCheckKind::kExactCheck; }
+
+  bool IsClassFinal() const { return class_is_final_; }
 
   DECLARE_INSTRUCTION(CheckCast);
 
  private:
-  const TypeCheckKind check_kind_;
+  const bool class_is_final_;
   bool must_do_null_check_;
 
   DISALLOW_COPY_AND_ASSIGN(HCheckCast);