diff options
-rw-r--r-- | compiler/optimizing/graph_checker.cc | 26 | ||||
-rw-r--r-- | compiler/optimizing/graph_checker.h | 4 | ||||
-rw-r--r-- | compiler/optimizing/graph_visualizer.cc | 2 | ||||
-rw-r--r-- | compiler/optimizing/reference_type_propagation.cc | 9 | ||||
-rw-r--r-- | test/519-bound-load-class/expected.txt | 0 | ||||
-rw-r--r-- | test/519-bound-load-class/info.txt | 3 | ||||
-rw-r--r-- | test/519-bound-load-class/src/Main.java | 24 |
7 files changed, 1 insertions, 67 deletions
diff --git a/compiler/optimizing/graph_checker.cc b/compiler/optimizing/graph_checker.cc index 9679d0ab70..d7e6bd8161 100644 --- a/compiler/optimizing/graph_checker.cc +++ b/compiler/optimizing/graph_checker.cc @@ -257,7 +257,6 @@ void GraphChecker::VisitInvokeStaticOrDirect(HInvokeStaticOrDirect* invoke) { } void GraphChecker::VisitReturn(HReturn* ret) { - VisitInstruction(ret); if (!ret->GetBlock()->GetSingleSuccessor()->IsExitBlock()) { AddError(StringPrintf("%s:%d does not jump to the exit block.", ret->DebugName(), @@ -266,7 +265,6 @@ void GraphChecker::VisitReturn(HReturn* ret) { } void GraphChecker::VisitReturnVoid(HReturnVoid* ret) { - VisitInstruction(ret); if (!ret->GetBlock()->GetSingleSuccessor()->IsExitBlock()) { AddError(StringPrintf("%s:%d does not jump to the exit block.", ret->DebugName(), @@ -274,30 +272,6 @@ void GraphChecker::VisitReturnVoid(HReturnVoid* ret) { } } -void GraphChecker::VisitCheckCast(HCheckCast* check) { - VisitInstruction(check); - HInstruction* input = check->InputAt(1); - 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::VisitInstanceOf(HInstanceOf* 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 SSAChecker::VisitBasicBlock(HBasicBlock* block) { super_type::VisitBasicBlock(block); diff --git a/compiler/optimizing/graph_checker.h b/compiler/optimizing/graph_checker.h index 7c72e23e2d..bafa69d422 100644 --- a/compiler/optimizing/graph_checker.h +++ b/compiler/optimizing/graph_checker.h @@ -48,10 +48,6 @@ class GraphChecker : public HGraphDelegateVisitor { // Check that the HasBoundsChecks() flag is set for bounds checks. void VisitBoundsCheck(HBoundsCheck* check) OVERRIDE; - // Check that HCheckCast and HInstanceOf have HLoadClass as second input. - void VisitCheckCast(HCheckCast* check) OVERRIDE; - void VisitInstanceOf(HInstanceOf* check) OVERRIDE; - // Check that the Return and ReturnVoid jump to the exit block. void VisitReturn(HReturn* ret) OVERRIDE; void VisitReturnVoid(HReturnVoid* ret) OVERRIDE; diff --git a/compiler/optimizing/graph_visualizer.cc b/compiler/optimizing/graph_visualizer.cc index c41574c93c..30d61ef040 100644 --- a/compiler/optimizing/graph_visualizer.cc +++ b/compiler/optimizing/graph_visualizer.cc @@ -462,7 +462,7 @@ class HGraphVisualizerPrinter : public HGraphVisitor { ReferenceTypeInfo info = instruction->AsLoadClass()->GetLoadedClassRTI(); ScopedObjectAccess soa(Thread::Current()); if (info.GetTypeHandle().GetReference() != nullptr) { - StartAttributeStream("klass") << PrettyClass(info.GetTypeHandle().Get()); + StartAttributeStream("klass") << info.GetTypeHandle().Get(); } else { StartAttributeStream("klass") << "unresolved"; } diff --git a/compiler/optimizing/reference_type_propagation.cc b/compiler/optimizing/reference_type_propagation.cc index 3d6606b8dc..67840984b1 100644 --- a/compiler/optimizing/reference_type_propagation.cc +++ b/compiler/optimizing/reference_type_propagation.cc @@ -151,15 +151,6 @@ void ReferenceTypePropagation::BoundTypeForIfInstanceOf(HBasicBlock* block) { HBoundType* bound_type = nullptr; HInstruction* obj = instanceOf->InputAt(0); - if (obj->GetReferenceTypeInfo().IsExact() && !obj->IsPhi()) { - // This method is being called while doing a fixed-point calculation - // over phis. Non-phis instruction whose type is already known do - // not need to be bound to another type. - // Not that this also prevents replacing `HLoadClass` with a `HBoundType`. - // `HCheckCast` and `HInstanceOf` expect a `HLoadClass` as a second - // input. - return; - } for (HUseIterator<HInstruction*> it(obj->GetUses()); !it.Done(); it.Advance()) { HInstruction* user = it.Current()->GetUser(); if (instanceOfTrueBlock->Dominates(user->GetBlock())) { diff --git a/test/519-bound-load-class/expected.txt b/test/519-bound-load-class/expected.txt deleted file mode 100644 index e69de29bb2..0000000000 --- a/test/519-bound-load-class/expected.txt +++ /dev/null diff --git a/test/519-bound-load-class/info.txt b/test/519-bound-load-class/info.txt deleted file mode 100644 index 57639621e4..0000000000 --- a/test/519-bound-load-class/info.txt +++ /dev/null @@ -1,3 +0,0 @@ -Regression test for the optimizing compiler that -used to crash when a `HCheckCast` did not have a `HLoadClass` -as second input. diff --git a/test/519-bound-load-class/src/Main.java b/test/519-bound-load-class/src/Main.java deleted file mode 100644 index aaf563366e..0000000000 --- a/test/519-bound-load-class/src/Main.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (C) 2015 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class Main { - public static void main(String[] args) { - Object o = Foo.class; - if (o instanceof Foo) { - System.out.println((Foo)o); - } - } -} |