blob: ca5027e97173906ec05eb152e23d4132edeecf7e [file] [log] [blame]
# 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.
.class public LMain2;
.super Ljava/lang/Object;
## CHECK-START: int Main2.rotateLeftBoolean(boolean, int) intrinsics_recognition (after)
## CHECK-DAG: <<Method:[ij]\d+>> CurrentMethod
## CHECK: <<ArgVal:z\d+>> ParameterValue
## CHECK: <<ArgDist:i\d+>> ParameterValue
## CHECK-DAG: <<Zero:i\d+>> IntConstant 0
## CHECK-DAG: <<One:i\d+>> IntConstant 1
## CHECK-DAG: <<Val:i\d+>> Phi [<<One>>,<<Zero>>]
## CHECK-DAG: <<Result:i\d+>> InvokeStaticOrDirect [<<Val>>,<<ArgDist>>,<<Method>>] intrinsic:IntegerRotateLeft
## CHECK-DAG: Return [<<Result>>]
## CHECK-START: int Main2.rotateLeftBoolean(boolean, int) instruction_simplifier (after)
## CHECK: <<ArgVal:z\d+>> ParameterValue
## CHECK: <<ArgDist:i\d+>> ParameterValue
## CHECK-DAG: <<Zero:i\d+>> IntConstant 0
## CHECK-DAG: <<One:i\d+>> IntConstant 1
## CHECK-DAG: <<Val:i\d+>> Phi [<<One>>,<<Zero>>]
## CHECK-DAG: <<NegDist:i\d+>> Neg [<<ArgDist>>]
## CHECK-DAG: <<Result:i\d+>> Ror [<<Val>>,<<NegDist>>]
## CHECK-DAG: Return [<<Result>>]
## CHECK-START: int Main2.rotateLeftBoolean(boolean, int) instruction_simplifier (after)
## CHECK-NOT: InvokeStaticOrDirect
## CHECK-START: int Main2.rotateLeftBoolean(boolean, int) select_generator (after)
## CHECK: <<ArgVal:z\d+>> ParameterValue
## CHECK: <<ArgDist:i\d+>> ParameterValue
## CHECK-DAG: <<Zero:i\d+>> IntConstant 0
## CHECK-DAG: <<One:i\d+>> IntConstant 1
## CHECK-DAG: <<SelVal:i\d+>> Select [<<Zero>>,<<One>>,<<ArgVal>>]
## CHECK-DAG: <<NegDist:i\d+>> Neg [<<ArgDist>>]
## CHECK-DAG: <<Result:i\d+>> Ror [<<SelVal>>,<<NegDist>>]
## CHECK-DAG: Return [<<Result>>]
## CHECK-START: int Main2.rotateLeftBoolean(boolean, int) select_generator (after)
## CHECK-NOT: Phi
## CHECK-START: int Main2.rotateLeftBoolean(boolean, int) instruction_simplifier$after_bce (after)
## CHECK: <<ArgVal:z\d+>> ParameterValue
## CHECK: <<ArgDist:i\d+>> ParameterValue
## CHECK-DAG: <<NegDist:i\d+>> Neg [<<ArgDist>>]
## CHECK-DAG: <<Result:i\d+>> Ror [<<ArgVal>>,<<NegDist>>]
## CHECK-DAG: Return [<<Result>>]
## CHECK-START: int Main2.rotateLeftBoolean(boolean, int) instruction_simplifier$after_bce (after)
## CHECK-NOT: Select
# Original java source
#
# private static int rotateLeftBoolean(boolean value, int distance) {
# return Integer.rotateLeft(value ? 1 : 0, distance);
# }
.method public static rotateLeftBoolean(ZI)I
.registers 3
.param p0, "value" # Z
.param p1, "distance" # I
.prologue
.line 66
if-eqz p0, :cond_8
const/4 v0, 0x1
:goto_3
invoke-static {v0, p1}, Ljava/lang/Integer;->rotateLeft(II)I
move-result v0
return v0
:cond_8
const/4 v0, 0x0
goto :goto_3
.end method
## CHECK-START: int Main2.rotateRightBoolean(boolean, int) intrinsics_recognition (after)
## CHECK-DAG: <<Method:[ij]\d+>> CurrentMethod
## CHECK: <<ArgVal:z\d+>> ParameterValue
## CHECK: <<ArgDist:i\d+>> ParameterValue
## CHECK-DAG: <<Zero:i\d+>> IntConstant 0
## CHECK-DAG: <<One:i\d+>> IntConstant 1
## CHECK-DAG: <<Val:i\d+>> Phi [<<One>>,<<Zero>>]
## CHECK-DAG: <<Result:i\d+>> InvokeStaticOrDirect [<<Val>>,<<ArgDist>>,<<Method>>] intrinsic:IntegerRotateRight
## CHECK-DAG: Return [<<Result>>]
## CHECK-START: int Main2.rotateRightBoolean(boolean, int) instruction_simplifier (after)
## CHECK: <<ArgVal:z\d+>> ParameterValue
## CHECK: <<ArgDist:i\d+>> ParameterValue
## CHECK-DAG: <<Zero:i\d+>> IntConstant 0
## CHECK-DAG: <<One:i\d+>> IntConstant 1
## CHECK-DAG: <<Val:i\d+>> Phi [<<One>>,<<Zero>>]
## CHECK-DAG: <<Result:i\d+>> Ror [<<Val>>,<<ArgDist>>]
## CHECK-DAG: Return [<<Result>>]
## CHECK-START: int Main2.rotateRightBoolean(boolean, int) instruction_simplifier (after)
## CHECK-NOT: InvokeStaticOrDirect
## CHECK-START: int Main2.rotateRightBoolean(boolean, int) select_generator (after)
## CHECK: <<ArgVal:z\d+>> ParameterValue
## CHECK: <<ArgDist:i\d+>> ParameterValue
## CHECK-DAG: <<Zero:i\d+>> IntConstant 0
## CHECK-DAG: <<One:i\d+>> IntConstant 1
## CHECK-DAG: <<SelVal:i\d+>> Select [<<Zero>>,<<One>>,<<ArgVal>>]
## CHECK-DAG: <<Result:i\d+>> Ror [<<SelVal>>,<<ArgDist>>]
## CHECK-DAG: Return [<<Result>>]
## CHECK-START: int Main2.rotateRightBoolean(boolean, int) select_generator (after)
## CHECK-NOT: Phi
## CHECK-START: int Main2.rotateRightBoolean(boolean, int) instruction_simplifier$after_bce (after)
## CHECK: <<ArgVal:z\d+>> ParameterValue
## CHECK: <<ArgDist:i\d+>> ParameterValue
## CHECK-DAG: <<Result:i\d+>> Ror [<<ArgVal>>,<<ArgDist>>]
## CHECK-DAG: Return [<<Result>>]
## CHECK-START: int Main2.rotateRightBoolean(boolean, int) instruction_simplifier$after_bce (after)
## CHECK-NOT: Select
# Original java source:
#
# private static int rotateRightBoolean(boolean value, int distance) {
# return Integer.rotateRight(value ? 1 : 0, distance);
# }
.method public static rotateRightBoolean(ZI)I
.registers 3
.param p0, "value" # Z
.param p1, "distance" # I
.prologue
.line 219
if-eqz p0, :cond_8
const/4 v0, 0x1
:goto_3
invoke-static {v0, p1}, Ljava/lang/Integer;->rotateRight(II)I
move-result v0
return v0
:cond_8
const/4 v0, 0x0
goto :goto_3
.end method