diff options
author | 2016-01-25 14:47:50 +0000 | |
---|---|---|
committer | 2016-02-04 12:59:22 -0500 | |
commit | 2f10a5fb8c236a6786928f0323bd312c3ee9a4cc (patch) | |
tree | 0dc51717b1f5d9b2c20898c5283467d4feb220e2 /test/555-checker-regression-x86const/src/Main.java | |
parent | a20748aceb63396c5e09366968bbc71308f745df (diff) |
Revert "Revert "X86: Use the constant area for more operations.""
This reverts commit cf8d1bb97e193e02b430d707d3b669565fababb4.
Handle the case of an intrinsic where CurrentMethod is still an input.
This will be the case when there are unresolved classes in the
hierarchy.
Add a test case to confirm that we don't crash when handling Math.abs,
which wants to add a pointer to the constant area for the bitmask to be
used to remove the sign bit.
Enhance 565-checker-condition-liveness to check for the case of deeply
nested EmitAtUseSite chains.
Change-Id: I022e8b96a32f5bf464331d0c318c56b9d0ac3c9a
Diffstat (limited to 'test/555-checker-regression-x86const/src/Main.java')
-rw-r--r-- | test/555-checker-regression-x86const/src/Main.java | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/test/555-checker-regression-x86const/src/Main.java b/test/555-checker-regression-x86const/src/Main.java new file mode 100644 index 0000000000..914cfde74f --- /dev/null +++ b/test/555-checker-regression-x86const/src/Main.java @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2016 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 extends UnresolvedClass { + + /// CHECK-START: float Main.callAbs(float) register (before) + /// CHECK: <<CurrentMethod:[ij]\d+>> CurrentMethod + /// CHECK: <<ParamValue:f\d+>> ParameterValue + /// CHECK: InvokeStaticOrDirect [<<ParamValue>>,<<CurrentMethod>>] method_name:java.lang.Math.abs + static public float callAbs(float f) { + // An intrinsic invoke in a method that has unresolved references will still + // have a CurrentMethod as an argument. The X86 pc_relative_fixups_x86 pass + // must be able to handle Math.abs invokes that have a CurrentMethod, as both + // the CurrentMethod and the HX86LoadFromConstantTable (for the bitmask) + // expect to be in the 'SpecialInputIndex' input index. + return Math.abs(f); + } + + static public void main(String[] args) { + expectEquals(callAbs(-6.5f), 6.5f); + } + + public static void expectEquals(float expected, float result) { + if (expected != result) { + throw new Error("Expected: " + expected + ", found: " + result); + } + } +} |