Home | History | Annotate | Download | only in smali
      1 # Copyright (C) 2015 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 LTypePropagation;
     16 .super Ljava/lang/Object;
     17 
     18 ## CHECK-START-DEBUGGABLE: void TypePropagation.mergeDeadPhi(boolean, boolean, int, float, float) builder (after)
     19 ## CHECK-NOT: Phi
     20 .method public static mergeDeadPhi(ZZIFF)V
     21   .registers 8
     22 
     23   if-eqz p0, :after1
     24   move p2, p3
     25   :after1
     26   # p2 = merge(int,float) = conflict
     27 
     28   if-eqz p1, :after2
     29   move p2, p4
     30   :after2
     31   # p2 = merge(conflict,float) = conflict
     32 
     33   invoke-static {}, Ljava/lang/System;->nanoTime()J  # create an env use
     34   return-void
     35 .end method
     36 
     37 ## CHECK-START-DEBUGGABLE: void TypePropagation.mergeSameType(boolean, int, int) builder (after)
     38 ## CHECK:     {{i\d+}} Phi
     39 ## CHECK-NOT:          Phi
     40 .method public static mergeSameType(ZII)V
     41   .registers 8
     42   if-eqz p0, :after
     43   move p1, p2
     44   :after
     45   # p1 = merge(int,int) = int
     46   invoke-static {}, Ljava/lang/System;->nanoTime()J  # create an env use
     47   return-void
     48 .end method
     49 
     50 ## CHECK-START-DEBUGGABLE: void TypePropagation.mergeVoidInput(boolean, boolean, int, int) builder (after)
     51 ## CHECK:     {{i\d+}} Phi
     52 ## CHECK:     {{i\d+}} Phi
     53 ## CHECK-NOT:          Phi
     54 .method public static mergeVoidInput(ZZII)V
     55   .registers 8
     56   :loop
     57   # p2 = void (loop phi) => p2 = merge(int,int) = int
     58   if-eqz p0, :after
     59   move p2, p3
     60   :after
     61   # p2 = merge(void,int) = int
     62   if-eqz p1, :loop
     63   invoke-static {}, Ljava/lang/System;->nanoTime()J  # create an env use
     64   return-void
     65 .end method
     66 
     67 ## CHECK-START-DEBUGGABLE: void TypePropagation.mergeDifferentSize(boolean, int, long) builder (after)
     68 ## CHECK-NOT: Phi
     69 .method public static mergeDifferentSize(ZIJ)V
     70   .registers 8
     71   if-eqz p0, :after
     72   move-wide p1, p2
     73   :after
     74   # p1 = merge(int,long) = conflict
     75   invoke-static {}, Ljava/lang/System;->nanoTime()J  # create an env use
     76   return-void
     77 .end method
     78 
     79 ## CHECK-START-DEBUGGABLE: void TypePropagation.mergeRefFloat(boolean, float, java.lang.Object) builder (after)
     80 ## CHECK-NOT: Phi
     81 .method public static mergeRefFloat(ZFLjava/lang/Object;)V
     82   .registers 8
     83   if-eqz p0, :after
     84   move-object p1, p2
     85   :after
     86   # p1 = merge(float,reference) = conflict
     87   invoke-static {}, Ljava/lang/System;->nanoTime()J  # create an env use
     88   return-void
     89 .end method
     90 
     91 ## CHECK-START-DEBUGGABLE: void TypePropagation.mergeIntFloat_Success(boolean, float) builder (after)
     92 ## CHECK:     {{f\d+}} Phi
     93 ## CHECK-NOT:          Phi
     94 .method public static mergeIntFloat_Success(ZF)V
     95   .registers 8
     96   if-eqz p0, :after
     97   const/4 p1, 0x0
     98   :after
     99   # p1 = merge(float,0x0) = float
    100   invoke-static {}, Ljava/lang/System;->nanoTime()J  # create an env use
    101   return-void
    102 .end method
    103 
    104 ## CHECK-START-DEBUGGABLE: void TypePropagation.mergeIntFloat_Fail(boolean, int, float) builder (after)
    105 ## CHECK-NOT: Phi
    106 .method public static mergeIntFloat_Fail(ZIF)V
    107   .registers 8
    108   if-eqz p0, :after
    109   move p1, p2
    110   :after
    111   # p1 = merge(int,float) = conflict
    112   invoke-static {}, Ljava/lang/System;->nanoTime()J  # create an env use
    113   return-void
    114 .end method
    115 
    116 ## CHECK-START-DEBUGGABLE: void TypePropagation.updateAllUsersOnConflict(boolean, boolean, int, float, int) builder (after)
    117 ## CHECK-NOT: Phi
    118 .method public static updateAllUsersOnConflict(ZZIFI)V
    119   .registers 8
    120 
    121   :loop1
    122   # loop phis for all args
    123   # p2 = merge(int,float) = float? => conflict
    124   move p2, p3
    125   if-eqz p0, :loop1
    126 
    127   :loop2
    128   # loop phis for all args
    129   # requests float equivalent of p4 phi in loop1 => conflict
    130   # propagates conflict to loop2's phis
    131   move p2, p4
    132   if-eqz p1, :loop2
    133 
    134   invoke-static {}, Ljava/lang/System;->nanoTime()J  # create an env use
    135   return-void
    136 .end method
    137