Revert "Compiler changes for bitstring based type checks."
Bug: 64692057
Bug: 71853552
Bug: 26687569
This reverts commit eb0ebed72432b3c6b8c7b38f8937d7ba736f4567.
Change-Id: I7daeaa077960ba41b2ed42bc47f17501621be4be
diff --git a/compiler/optimizing/graph_checker.cc b/compiler/optimizing/graph_checker.cc
index fbcbe36..c88baa8 100644
--- a/compiler/optimizing/graph_checker.cc
+++ b/compiler/optimizing/graph_checker.cc
@@ -25,11 +25,6 @@
#include "base/bit_vector-inl.h"
#include "base/scoped_arena_allocator.h"
#include "base/scoped_arena_containers.h"
-#include "handle.h"
-#include "mirror/class.h"
-#include "obj_ptr-inl.h"
-#include "scoped_thread_state_change-inl.h"
-#include "subtype_check.h"
namespace art {
@@ -553,83 +548,28 @@
}
}
-void GraphChecker::CheckTypeCheckBitstringInput(HTypeCheckInstruction* check,
- size_t input_pos,
- bool check_value,
- uint32_t expected_value,
- const char* name) {
- if (!check->InputAt(input_pos)->IsIntConstant()) {
- AddError(StringPrintf("%s:%d (bitstring) expects a HIntConstant input %zu (%s), not %s:%d.",
- check->DebugName(),
- check->GetId(),
- input_pos,
- name,
- check->InputAt(2)->DebugName(),
- check->InputAt(2)->GetId()));
- } else if (check_value) {
- uint32_t actual_value =
- static_cast<uint32_t>(check->InputAt(input_pos)->AsIntConstant()->GetValue());
- if (actual_value != expected_value) {
- AddError(StringPrintf("%s:%d (bitstring) has %s 0x%x, not 0x%x as expected.",
- check->DebugName(),
- check->GetId(),
- name,
- actual_value,
- expected_value));
- }
- }
-}
-
-void GraphChecker::HandleTypeCheckInstruction(HTypeCheckInstruction* check) {
+void GraphChecker::VisitCheckCast(HCheckCast* check) {
VisitInstruction(check);
HInstruction* input = check->InputAt(1);
- if (check->GetTypeCheckKind() == TypeCheckKind::kBitstringCheck) {
- if (!input->IsNullConstant()) {
- AddError(StringPrintf("%s:%d (bitstring) expects a HNullConstant as second input, not %s:%d.",
- check->DebugName(),
- check->GetId(),
- input->DebugName(),
- input->GetId()));
- }
- bool check_values = false;
- BitString::StorageType expected_path_to_root = 0u;
- BitString::StorageType expected_mask = 0u;
- {
- ScopedObjectAccess soa(Thread::Current());
- ObjPtr<mirror::Class> klass = check->GetClass().Get();
- MutexLock subtype_check_lock(Thread::Current(), *Locks::subtype_check_lock_);
- SubtypeCheckInfo::State state = SubtypeCheck<ObjPtr<mirror::Class>>::GetState(klass);
- if (state == SubtypeCheckInfo::kAssigned) {
- expected_path_to_root =
- SubtypeCheck<ObjPtr<mirror::Class>>::GetEncodedPathToRootForTarget(klass);
- expected_mask = SubtypeCheck<ObjPtr<mirror::Class>>::GetEncodedPathToRootMask(klass);
- check_values = true;
- } else {
- AddError(StringPrintf("%s:%d (bitstring) references a class with unassigned bitstring.",
- check->DebugName(),
- check->GetId()));
- }
- }
- CheckTypeCheckBitstringInput(
- check, /* input_pos */ 2, check_values, expected_path_to_root, "path_to_root");
- CheckTypeCheckBitstringInput(check, /* input_pos */ 3, check_values, expected_mask, "mask");
- } else {
- if (!input->IsLoadClass()) {
- AddError(StringPrintf("%s:%d (classic) expects a HLoadClass as second input, not %s:%d.",
- check->DebugName(),
- check->GetId(),
- input->DebugName(),
- input->GetId()));
- }
+ if (!input->IsLoadClass()) {
+ AddError(StringPrintf("%s:%d expects a HLoadClass as second input, not %s:%d.",
+ check->DebugName(),
+ check->GetId(),
+ input->DebugName(),
+ input->GetId()));
}
}
-void GraphChecker::VisitCheckCast(HCheckCast* check) {
- HandleTypeCheckInstruction(check);
-}
-
void GraphChecker::VisitInstanceOf(HInstanceOf* instruction) {
- HandleTypeCheckInstruction(instruction);
+ VisitInstruction(instruction);
+ HInstruction* input = instruction->InputAt(1);
+ if (!input->IsLoadClass()) {
+ AddError(StringPrintf("%s:%d expects a HLoadClass as second input, not %s:%d.",
+ instruction->DebugName(),
+ instruction->GetId(),
+ input->DebugName(),
+ input->GetId()));
+ }
}
void GraphChecker::HandleLoop(HBasicBlock* loop_header) {