blob: 58682a19237b24546d1c72fbbdab89b04b26fbbd [file] [log] [blame]
# Copyright (C) 2015 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 LTypePropagation;
.super Ljava/lang/Object;
## CHECK-START-DEBUGGABLE: void TypePropagation.mergeDeadPhi(boolean, boolean, int, float, float) ssa_builder (after)
## CHECK-NOT: Phi
.method public static mergeDeadPhi(ZZIFF)V
.registers 8
if-eqz p0, :after1
move p2, p3
:after1
# p2 = merge(int,float) = conflict
if-eqz p1, :after2
move p2, p4
:after2
# p2 = merge(conflict,float) = conflict
invoke-static {}, Ljava/lang/System;->nanoTime()J # create an env use
return-void
.end method
## CHECK-START-DEBUGGABLE: void TypePropagation.mergeSameType(boolean, int, int) ssa_builder (after)
## CHECK: {{i\d+}} Phi
## CHECK-NOT: Phi
.method public static mergeSameType(ZII)V
.registers 8
if-eqz p0, :after
move p1, p2
:after
# p1 = merge(int,int) = int
invoke-static {}, Ljava/lang/System;->nanoTime()J # create an env use
return-void
.end method
## CHECK-START-DEBUGGABLE: void TypePropagation.mergeVoidInput(boolean, boolean, int, int) ssa_builder (after)
## CHECK: {{i\d+}} Phi
## CHECK: {{i\d+}} Phi
## CHECK-NOT: Phi
.method public static mergeVoidInput(ZZII)V
.registers 8
:loop
# p2 = void (loop phi) => p2 = merge(int,int) = int
if-eqz p0, :after
move p2, p3
:after
# p2 = merge(void,int) = int
if-eqz p1, :loop
invoke-static {}, Ljava/lang/System;->nanoTime()J # create an env use
return-void
.end method
## CHECK-START-DEBUGGABLE: void TypePropagation.mergeDifferentSize(boolean, int, long) ssa_builder (after)
## CHECK-NOT: Phi
.method public static mergeDifferentSize(ZIJ)V
.registers 8
if-eqz p0, :after
move-wide p1, p2
:after
# p1 = merge(int,long) = conflict
invoke-static {}, Ljava/lang/System;->nanoTime()J # create an env use
return-void
.end method
## CHECK-START-DEBUGGABLE: void TypePropagation.mergeRefFloat(boolean, float, java.lang.Object) ssa_builder (after)
## CHECK-NOT: Phi
.method public static mergeRefFloat(ZFLjava/lang/Object;)V
.registers 8
if-eqz p0, :after
move-object p1, p2
:after
# p1 = merge(float,reference) = conflict
invoke-static {}, Ljava/lang/System;->nanoTime()J # create an env use
return-void
.end method
## CHECK-START-DEBUGGABLE: void TypePropagation.mergeIntFloat_Success(boolean, float) ssa_builder (after)
## CHECK: {{f\d+}} Phi
## CHECK-NOT: Phi
.method public static mergeIntFloat_Success(ZF)V
.registers 8
if-eqz p0, :after
const/4 p1, 0x0
:after
# p1 = merge(float,0x0) = float
invoke-static {}, Ljava/lang/System;->nanoTime()J # create an env use
return-void
.end method
## CHECK-START-DEBUGGABLE: void TypePropagation.mergeIntFloat_Fail(boolean, int, float) ssa_builder (after)
## CHECK-NOT: Phi
.method public static mergeIntFloat_Fail(ZIF)V
.registers 8
if-eqz p0, :after
move p1, p2
:after
# p1 = merge(int,float) = conflict
invoke-static {}, Ljava/lang/System;->nanoTime()J # create an env use
return-void
.end method
## CHECK-START-DEBUGGABLE: void TypePropagation.updateAllUsersOnConflict(boolean, boolean, int, float, int) ssa_builder (after)
## CHECK-NOT: Phi
.method public static updateAllUsersOnConflict(ZZIFI)V
.registers 8
:loop1
# loop phis for all args
# p2 = merge(int,float) = float? => conflict
move p2, p3
if-eqz p0, :loop1
:loop2
# loop phis for all args
# requests float equivalent of p4 phi in loop1 => conflict
# propagates conflict to loop2's phis
move p2, p4
if-eqz p1, :loop2
invoke-static {}, Ljava/lang/System;->nanoTime()J # create an env use
return-void
.end method