# 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) builder (after) ## CHECK: <> ParameterValue ## CHECK: <> ParameterValue ## CHECK-DAG: <> IntConstant 0 ## CHECK-DAG: <> IntConstant 1 ## CHECK-DAG: <> Phi [<>,<>] ## CHECK-DAG: <> InvokeStaticOrDirect [<>,<>{{(,[ij]\d+)?}}] intrinsic:IntegerRotateLeft ## CHECK-DAG: Return [<>] ## CHECK-START: int Main2.rotateLeftBoolean(boolean, int) instruction_simplifier (after) ## CHECK: <> ParameterValue ## CHECK: <> ParameterValue ## CHECK-DAG: <> IntConstant 0 ## CHECK-DAG: <> IntConstant 1 ## CHECK-DAG: <> Phi [<>,<>] ## CHECK-DAG: <> Neg [<>] ## CHECK-DAG: <> Ror [<>,<>] ## CHECK-DAG: Return [<>] ## CHECK-START: int Main2.rotateLeftBoolean(boolean, int) instruction_simplifier (after) ## CHECK-NOT: InvokeStaticOrDirect ## CHECK-START: int Main2.rotateLeftBoolean(boolean, int) select_generator (after) ## CHECK: <> ParameterValue ## CHECK: <> ParameterValue ## CHECK-DAG: <> IntConstant 0 ## CHECK-DAG: <> IntConstant 1 ## CHECK-DAG: <> Select [<>,<>,<>] ## CHECK-DAG: <> Neg [<>] ## CHECK-DAG: <> Ror [<>,<>] ## CHECK-DAG: Return [<>] ## 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: <> ParameterValue ## CHECK: <> ParameterValue ## CHECK-DAG: <> Neg [<>] ## CHECK-DAG: <> Ror [<>,<>] ## CHECK-DAG: Return [<>] ## 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) builder (after) ## CHECK: <> ParameterValue ## CHECK: <> ParameterValue ## CHECK-DAG: <> IntConstant 0 ## CHECK-DAG: <> IntConstant 1 ## CHECK-DAG: <> Phi [<>,<>] ## CHECK-DAG: <> InvokeStaticOrDirect [<>,<>{{(,[ij]\d+)?}}] intrinsic:IntegerRotateRight ## CHECK-DAG: Return [<>] ## CHECK-START: int Main2.rotateRightBoolean(boolean, int) instruction_simplifier (after) ## CHECK: <> ParameterValue ## CHECK: <> ParameterValue ## CHECK-DAG: <> IntConstant 0 ## CHECK-DAG: <> IntConstant 1 ## CHECK-DAG: <> Phi [<>,<>] ## CHECK-DAG: <> Ror [<>,<>] ## CHECK-DAG: Return [<>] ## CHECK-START: int Main2.rotateRightBoolean(boolean, int) instruction_simplifier (after) ## CHECK-NOT: InvokeStaticOrDirect ## CHECK-START: int Main2.rotateRightBoolean(boolean, int) select_generator (after) ## CHECK: <> ParameterValue ## CHECK: <> ParameterValue ## CHECK-DAG: <> IntConstant 0 ## CHECK-DAG: <> IntConstant 1 ## CHECK-DAG: <> Select [<>,<>,<>] ## CHECK-DAG: <> Ror [<>,<>] ## CHECK-DAG: Return [<>] ## 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: <> ParameterValue ## CHECK: <> ParameterValue ## CHECK-DAG: <> Ror [<>,<>] ## CHECK-DAG: Return [<>] ## 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