From 015c7e63604c038e866d7af3850c557403cddc8b Mon Sep 17 00:00:00 2001 From: David Brazdil Date: Thu, 18 Jun 2015 12:40:01 +0100 Subject: [PATCH] ART: Remove old DCHECK that trips Baseline Codegen verified that the entry block always falls through to the next block. While this is the case with Optimizing, it doesn't hold for Baseline but it doesn't need to since codegen handles it fine. Bug:21913514 Change-Id: I751ef227e6cf103af3e7fc35fca4b01c663385a1 --- compiler/optimizing/code_generator.cc | 1 - test/504-regression-baseline-entry/expected.txt | 0 test/504-regression-baseline-entry/info.txt | 2 ++ .../504-regression-baseline-entry/smali/Test.smali | 30 ++++++++++++++++++++ test/504-regression-baseline-entry/src/Main.java | 33 ++++++++++++++++++++++ 5 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 test/504-regression-baseline-entry/expected.txt create mode 100644 test/504-regression-baseline-entry/info.txt create mode 100644 test/504-regression-baseline-entry/smali/Test.smali create mode 100644 test/504-regression-baseline-entry/src/Main.java diff --git a/compiler/optimizing/code_generator.cc b/compiler/optimizing/code_generator.cc index 130f0e970..09f7d8660 100644 --- a/compiler/optimizing/code_generator.cc +++ b/compiler/optimizing/code_generator.cc @@ -236,7 +236,6 @@ void CodeGenerator::InitializeCodeGeneration(size_t number_of_spill_slots, const GrowableArray& block_order) { block_order_ = &block_order; DCHECK(block_order_->Get(0) == GetGraph()->GetEntryBlock()); - DCHECK(GoesToNextBlock(GetGraph()->GetEntryBlock(), block_order_->Get(1))); ComputeSpillMask(); first_register_slot_in_slow_path_ = (number_of_out_slots + number_of_spill_slots) * kVRegSize; diff --git a/test/504-regression-baseline-entry/expected.txt b/test/504-regression-baseline-entry/expected.txt new file mode 100644 index 000000000..e69de29bb diff --git a/test/504-regression-baseline-entry/info.txt b/test/504-regression-baseline-entry/info.txt new file mode 100644 index 000000000..26cc9ce75 --- /dev/null +++ b/test/504-regression-baseline-entry/info.txt @@ -0,0 +1,2 @@ +Regression test for the baseline compiler which required the entry block to fall +through to the next block. \ No newline at end of file diff --git a/test/504-regression-baseline-entry/smali/Test.smali b/test/504-regression-baseline-entry/smali/Test.smali new file mode 100644 index 000000000..06412e761 --- /dev/null +++ b/test/504-regression-baseline-entry/smali/Test.smali @@ -0,0 +1,30 @@ +# +# 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. + +.class public LTest; + +.super Ljava/lang/Object; + +.method public static SingleGotoStart()I + .registers 1 + goto :second + + :first + return v0 + + :second + const/4 v0, 0x5 + goto :first +.end method diff --git a/test/504-regression-baseline-entry/src/Main.java b/test/504-regression-baseline-entry/src/Main.java new file mode 100644 index 000000000..2c9df2834 --- /dev/null +++ b/test/504-regression-baseline-entry/src/Main.java @@ -0,0 +1,33 @@ +/* + * 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. + */ + +import java.lang.reflect.Method; +import java.lang.reflect.Type; + +public class Main { + + // Workaround for b/18051191. + class InnerClass {} + + public static void main(String args[]) throws Exception { + Class c = Class.forName("Test"); + Method m = c.getMethod("SingleGotoStart", (Class[]) null); + Integer result = (Integer) m.invoke(null); + if (result != 5) { + throw new Error("Expected 5, got " + result); + } + } +} -- 2.11.0