1# Copyright (C) 2016 The Android Open Source Project 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14 15.class public LMain2; 16.super Ljava/lang/Object; 17 18## CHECK-START: int Main2.rotateLeftBoolean(boolean, int) builder (after) 19## CHECK: <<ArgVal:z\d+>> ParameterValue 20## CHECK: <<ArgDist:i\d+>> ParameterValue 21## CHECK-DAG: <<Zero:i\d+>> IntConstant 0 22## CHECK-DAG: <<One:i\d+>> IntConstant 1 23## CHECK-DAG: <<Val:i\d+>> Phi [<<One>>,<<Zero>>] 24## CHECK-DAG: <<Result:i\d+>> InvokeStaticOrDirect [<<Val>>,<<ArgDist>>{{(,[ij]\d+)?}}] intrinsic:IntegerRotateLeft 25## CHECK-DAG: Return [<<Result>>] 26 27## CHECK-START: int Main2.rotateLeftBoolean(boolean, int) instruction_simplifier (after) 28## CHECK: <<ArgVal:z\d+>> ParameterValue 29## CHECK: <<ArgDist:i\d+>> ParameterValue 30## CHECK-DAG: <<Zero:i\d+>> IntConstant 0 31## CHECK-DAG: <<One:i\d+>> IntConstant 1 32## CHECK-DAG: <<Val:i\d+>> Phi [<<One>>,<<Zero>>] 33## CHECK-DAG: <<NegDist:i\d+>> Neg [<<ArgDist>>] 34## CHECK-DAG: <<Result:i\d+>> Ror [<<Val>>,<<NegDist>>] 35## CHECK-DAG: Return [<<Result>>] 36 37## CHECK-START: int Main2.rotateLeftBoolean(boolean, int) instruction_simplifier (after) 38## CHECK-NOT: InvokeStaticOrDirect 39 40## CHECK-START: int Main2.rotateLeftBoolean(boolean, int) select_generator (after) 41## CHECK: <<ArgVal:z\d+>> ParameterValue 42## CHECK: <<ArgDist:i\d+>> ParameterValue 43## CHECK-DAG: <<Zero:i\d+>> IntConstant 0 44## CHECK-DAG: <<One:i\d+>> IntConstant 1 45## CHECK-DAG: <<SelVal:i\d+>> Select [<<Zero>>,<<One>>,<<ArgVal>>] 46## CHECK-DAG: <<NegDist:i\d+>> Neg [<<ArgDist>>] 47## CHECK-DAG: <<Result:i\d+>> Ror [<<SelVal>>,<<NegDist>>] 48## CHECK-DAG: Return [<<Result>>] 49 50## CHECK-START: int Main2.rotateLeftBoolean(boolean, int) select_generator (after) 51## CHECK-NOT: Phi 52 53## CHECK-START: int Main2.rotateLeftBoolean(boolean, int) instruction_simplifier$after_bce (after) 54## CHECK: <<ArgVal:z\d+>> ParameterValue 55## CHECK: <<ArgDist:i\d+>> ParameterValue 56## CHECK-DAG: <<NegDist:i\d+>> Neg [<<ArgDist>>] 57## CHECK-DAG: <<Result:i\d+>> Ror [<<ArgVal>>,<<NegDist>>] 58## CHECK-DAG: Return [<<Result>>] 59 60## CHECK-START: int Main2.rotateLeftBoolean(boolean, int) instruction_simplifier$after_bce (after) 61## CHECK-NOT: Select 62 63# Original java source 64# 65# private static int rotateLeftBoolean(boolean value, int distance) { 66# return Integer.rotateLeft(value ? 1 : 0, distance); 67# } 68 69.method public static rotateLeftBoolean(ZI)I 70 .registers 3 71 .param p0, "value" # Z 72 .param p1, "distance" # I 73 74 .prologue 75 .line 66 76 if-eqz p0, :cond_8 77 78 const/4 v0, 0x1 79 80 :goto_3 81 invoke-static {v0, p1}, Ljava/lang/Integer;->rotateLeft(II)I 82 83 move-result v0 84 85 return v0 86 87 :cond_8 88 const/4 v0, 0x0 89 90 goto :goto_3 91.end method 92 93## CHECK-START: int Main2.rotateRightBoolean(boolean, int) builder (after) 94## CHECK: <<ArgVal:z\d+>> ParameterValue 95## CHECK: <<ArgDist:i\d+>> ParameterValue 96## CHECK-DAG: <<Zero:i\d+>> IntConstant 0 97## CHECK-DAG: <<One:i\d+>> IntConstant 1 98## CHECK-DAG: <<Val:i\d+>> Phi [<<One>>,<<Zero>>] 99## CHECK-DAG: <<Result:i\d+>> InvokeStaticOrDirect [<<Val>>,<<ArgDist>>{{(,[ij]\d+)?}}] intrinsic:IntegerRotateRight 100## CHECK-DAG: Return [<<Result>>] 101 102## CHECK-START: int Main2.rotateRightBoolean(boolean, int) instruction_simplifier (after) 103## CHECK: <<ArgVal:z\d+>> ParameterValue 104## CHECK: <<ArgDist:i\d+>> ParameterValue 105## CHECK-DAG: <<Zero:i\d+>> IntConstant 0 106## CHECK-DAG: <<One:i\d+>> IntConstant 1 107## CHECK-DAG: <<Val:i\d+>> Phi [<<One>>,<<Zero>>] 108## CHECK-DAG: <<Result:i\d+>> Ror [<<Val>>,<<ArgDist>>] 109## CHECK-DAG: Return [<<Result>>] 110 111## CHECK-START: int Main2.rotateRightBoolean(boolean, int) instruction_simplifier (after) 112## CHECK-NOT: InvokeStaticOrDirect 113 114## CHECK-START: int Main2.rotateRightBoolean(boolean, int) select_generator (after) 115## CHECK: <<ArgVal:z\d+>> ParameterValue 116## CHECK: <<ArgDist:i\d+>> ParameterValue 117## CHECK-DAG: <<Zero:i\d+>> IntConstant 0 118## CHECK-DAG: <<One:i\d+>> IntConstant 1 119## CHECK-DAG: <<SelVal:i\d+>> Select [<<Zero>>,<<One>>,<<ArgVal>>] 120## CHECK-DAG: <<Result:i\d+>> Ror [<<SelVal>>,<<ArgDist>>] 121## CHECK-DAG: Return [<<Result>>] 122 123## CHECK-START: int Main2.rotateRightBoolean(boolean, int) select_generator (after) 124## CHECK-NOT: Phi 125 126## CHECK-START: int Main2.rotateRightBoolean(boolean, int) instruction_simplifier$after_bce (after) 127## CHECK: <<ArgVal:z\d+>> ParameterValue 128## CHECK: <<ArgDist:i\d+>> ParameterValue 129## CHECK-DAG: <<Result:i\d+>> Ror [<<ArgVal>>,<<ArgDist>>] 130## CHECK-DAG: Return [<<Result>>] 131 132## CHECK-START: int Main2.rotateRightBoolean(boolean, int) instruction_simplifier$after_bce (after) 133## CHECK-NOT: Select 134 135# Original java source: 136# 137# private static int rotateRightBoolean(boolean value, int distance) { 138# return Integer.rotateRight(value ? 1 : 0, distance); 139# } 140 141.method public static rotateRightBoolean(ZI)I 142 .registers 3 143 .param p0, "value" # Z 144 .param p1, "distance" # I 145 146 .prologue 147 .line 219 148 if-eqz p0, :cond_8 149 150 const/4 v0, 0x1 151 152 :goto_3 153 invoke-static {v0, p1}, Ljava/lang/Integer;->rotateRight(II)I 154 155 move-result v0 156 157 return v0 158 159 :cond_8 160 const/4 v0, 0x0 161 162 goto :goto_3 163.end method 164