# Copyright (C) 2018 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;
.source "Main2.java"


# direct methods
.method constructor <init>()V
    .registers 1

    .prologue
    .line 17
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    return-void
.end method

# Elementary test negating a boolean. Verifies that blocks are merged and
# empty branches removed.

## CHECK-START: boolean Main2.BooleanNot(boolean) select_generator (before)
## CHECK-DAG:     <<Param:z\d+>>    ParameterValue
## CHECK-DAG:     <<Const0:i\d+>>   IntConstant 0
## CHECK-DAG:     <<Const1:i\d+>>   IntConstant 1
## CHECK-DAG:                       If [<<Param>>]
## CHECK-DAG:     <<Phi:i\d+>>      Phi [<<Const1>>,<<Const0>>]
## CHECK-DAG:                       Return [<<Phi>>]

## CHECK-START: boolean Main2.BooleanNot(boolean) select_generator (before)
## CHECK:                           Goto
## CHECK:                           Goto
## CHECK:                           Goto
## CHECK-NOT:                       Goto

## CHECK-START: boolean Main2.BooleanNot(boolean) select_generator (after)
## CHECK-DAG:     <<Param:z\d+>>    ParameterValue
## CHECK-DAG:     <<Const0:i\d+>>   IntConstant 0
## CHECK-DAG:     <<Const1:i\d+>>   IntConstant 1
## CHECK-DAG:     <<NotParam:i\d+>> Select [<<Const1>>,<<Const0>>,<<Param>>]
## CHECK-DAG:                       Return [<<NotParam>>]

## CHECK-START: boolean Main2.BooleanNot(boolean) select_generator (after)
## CHECK-NOT:                       If
## CHECK-NOT:                       Phi

## CHECK-START: boolean Main2.BooleanNot(boolean) select_generator (after)
## CHECK:                           Goto
## CHECK-NOT:                       Goto

# The original java source of this method:
#
#     return !x;
#
.method public static BooleanNot(Z)Z
    .registers 2
    .param p0, "x"    # Z

    .prologue
    .line 70
    if-nez p0, :cond_4

    const/4 v0, 0x1

    :goto_3
    return v0

    :cond_4
    const/4 v0, 0x0

    goto :goto_3
.end method

# Program which further uses negated conditions.
# Note that Phis are discovered retrospectively.

## CHECK-START: boolean Main2.ValuesOrdered(int, int, int) select_generator (before)
## CHECK-DAG:     <<ParamX:i\d+>>   ParameterValue
## CHECK-DAG:     <<ParamY:i\d+>>   ParameterValue
## CHECK-DAG:     <<ParamZ:i\d+>>   ParameterValue
## CHECK-DAG:     <<Const0:i\d+>>   IntConstant 0
## CHECK-DAG:     <<Const1:i\d+>>   IntConstant 1
## CHECK-DAG:     <<CondXY:z\d+>>   GreaterThan [<<ParamX>>,<<ParamY>>]
## CHECK-DAG:                       If [<<CondXY>>]
## CHECK-DAG:     <<CondYZ:z\d+>>   GreaterThan [<<ParamY>>,<<ParamZ>>]
## CHECK-DAG:                       If [<<CondYZ>>]
## CHECK-DAG:     <<CondXYZ:z\d+>>  NotEqual [<<PhiXY:i\d+>>,<<PhiYZ:i\d+>>]
## CHECK-DAG:                       If [<<CondXYZ>>]
## CHECK-DAG:                       Return [<<PhiXYZ:i\d+>>]
## CHECK-DAG:     <<PhiXY>>         Phi [<<Const1>>,<<Const0>>]
## CHECK-DAG:     <<PhiYZ>>         Phi [<<Const1>>,<<Const0>>]
## CHECK-DAG:     <<PhiXYZ>>        Phi [<<Const1>>,<<Const0>>]

## CHECK-START: boolean Main2.ValuesOrdered(int, int, int) select_generator (after)
## CHECK-DAG:     <<ParamX:i\d+>>   ParameterValue
## CHECK-DAG:     <<ParamY:i\d+>>   ParameterValue
## CHECK-DAG:     <<ParamZ:i\d+>>   ParameterValue
## CHECK-DAG:     <<Const0:i\d+>>   IntConstant 0
## CHECK-DAG:     <<Const1:i\d+>>   IntConstant 1
## CHECK-DAG:     <<CmpXY:z\d+>>    GreaterThan [<<ParamX>>,<<ParamY>>]
## CHECK-DAG:     <<SelXY:i\d+>>    Select [<<Const1>>,<<Const0>>,<<CmpXY>>]
## CHECK-DAG:     <<CmpYZ:z\d+>>    GreaterThan [<<ParamY>>,<<ParamZ>>]
## CHECK-DAG:     <<SelYZ:i\d+>>    Select [<<Const1>>,<<Const0>>,<<CmpYZ>>]
## CHECK-DAG:     <<CmpXYZ:z\d+>>   NotEqual [<<SelXY>>,<<SelYZ>>]
## CHECK-DAG:     <<SelXYZ:i\d+>>   Select [<<Const1>>,<<Const0>>,<<CmpXYZ>>]
## CHECK-DAG:                       Return [<<SelXYZ>>]

# The original java source of this method:
#
#     return (x <= y) == (y <= z);
#
.method public static ValuesOrdered(III)Z
    .registers 7
    .param p0, "x"    # I
    .param p1, "y"    # I
    .param p2, "z"    # I

    .prologue
    const/4 v0, 0x1

    const/4 v1, 0x0

    .line 166
    if-gt p0, p1, :cond_b

    move v3, v0

    :goto_5
    if-gt p1, p2, :cond_d

    move v2, v0

    :goto_8
    if-ne v3, v2, :cond_f

    :goto_a
    return v0

    :cond_b
    move v3, v1

    goto :goto_5

    :cond_d
    move v2, v1

    goto :goto_8

    :cond_f
    move v0, v1

    goto :goto_a
.end method

## CHECK-START: int Main2.NegatedCondition(boolean) select_generator (before)
## CHECK-DAG:     <<Param:z\d+>>    ParameterValue
## CHECK-DAG:     <<Const42:i\d+>>  IntConstant 42
## CHECK-DAG:     <<Const43:i\d+>>  IntConstant 43
## CHECK-DAG:                       If [<<Param>>]
## CHECK-DAG:     <<Phi:i\d+>>      Phi [<<Const42>>,<<Const43>>]
## CHECK-DAG:                       Return [<<Phi>>]

## CHECK-START: int Main2.NegatedCondition(boolean) select_generator (after)
## CHECK-DAG:     <<Param:z\d+>>    ParameterValue
## CHECK-DAG:     <<Const42:i\d+>>  IntConstant 42
## CHECK-DAG:     <<Const43:i\d+>>  IntConstant 43
## CHECK-DAG:     <<Select:i\d+>>   Select [<<Const43>>,<<Const42>>,<<Param>>]
## CHECK-DAG:                       Return [<<Select>>]

## CHECK-START: int Main2.NegatedCondition(boolean) select_generator (after)
## CHECK-NOT:                       BooleanNot

# The original java source of this method:
#
#     if (x != false) {
#       return 42;
#     } else {
#       return 43;
#     }
#
.method public static NegatedCondition(Z)I
    .registers 2
    .param p0, "x"    # Z

    .prologue
    .line 188
    if-eqz p0, :cond_5

    .line 189
    const/16 v0, 0x2a

    .line 191
    :goto_4
    return v0

    :cond_5
    const/16 v0, 0x2b

    goto :goto_4
.end method

# This test currently checks that we don't perform select generation due to
# having multiple phis.

## CHECK-START: int Main2.MultiplePhis() select_generator (before)
## CHECK-DAG:     <<Const0:i\d+>>   IntConstant 0
## CHECK-DAG:     <<Const1:i\d+>>   IntConstant 1
## CHECK-DAG:     <<Const13:i\d+>>  IntConstant 13
## CHECK-DAG:     <<Const42:i\d+>>  IntConstant 42
## CHECK-DAG:     <<PhiX:i\d+>>     Phi [<<Const0>>,<<Const13>>,<<Const42>>]
## CHECK-DAG:     <<PhiY:i\d+>>     Phi [<<Const1>>,<<Add:i\d+>>,<<Add>>]
## CHECK-DAG:     <<Add>>           Add [<<PhiY>>,<<Const1>>]
## CHECK-DAG:     <<Cond:z\d+>>     LessThanOrEqual [<<Add>>,<<Const1>>]
## CHECK-DAG:                       If [<<Cond>>]
## CHECK-DAG:                       Return [<<PhiX>>]

## CHECK-START: int Main2.MultiplePhis() select_generator (after)
## CHECK-DAG:     <<Const0:i\d+>>   IntConstant 0
## CHECK-DAG:     <<Const1:i\d+>>   IntConstant 1
## CHECK-DAG:     <<Const13:i\d+>>  IntConstant 13
## CHECK-DAG:     <<Const42:i\d+>>  IntConstant 42
## CHECK-DAG:     <<PhiX:i\d+>>     Phi [<<Const0>>,<<Const13>>,<<Const42>>]
## CHECK-DAG:     <<PhiY:i\d+>>     Phi [<<Const1>>,<<Add:i\d+>>,<<Add>>]
## CHECK-DAG:     <<Add>>           Add [<<PhiY>>,<<Const1>>]
## CHECK-DAG:     <<Cond:z\d+>>     LessThanOrEqual [<<Add>>,<<Const1>>]
## CHECK-DAG:                       If [<<Cond>>]
## CHECK-DAG:                       Return [<<PhiX>>]

# The original java source of this method:
#
#     int x = 0;
#     int y = 1;
#     while (y++ < 10) {
#       if (y > 1) {
#         x = 13;
#       } else {
#         x = 42;
#       }
#     }
#     return x;
#
.method public static MultiplePhis()I
    .registers 4

    .prologue
    .line 290
    const/4 v0, 0x0

    .line 291
    .local v0, "x":I
    const/4 v1, 0x1

    .local v1, "y":I
    move v2, v1

    .line 292
    .end local v1    # "y":I
    .local v2, "y":I
    :goto_3
    add-int/lit8 v1, v2, 0x1

    .end local v2    # "y":I
    .restart local v1    # "y":I
    const/16 v3, 0xa

    if-ge v2, v3, :cond_14

    .line 293
    const/4 v3, 0x1

    if-le v1, v3, :cond_10

    .line 294
    const/16 v0, 0xd

    move v2, v1

    .end local v1    # "y":I
    .restart local v2    # "y":I
    goto :goto_3

    .line 296
    .end local v2    # "y":I
    .restart local v1    # "y":I
    :cond_10
    const/16 v0, 0x2a

    move v2, v1

    .end local v1    # "y":I
    .restart local v2    # "y":I
    goto :goto_3

    .line 299
    .end local v2    # "y":I
    .restart local v1    # "y":I
    :cond_14
    return v0
.end method
