# 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 LTestCase; .super Ljava/lang/Object; # Situation: # - PhiA: PrimVoid + PrimNot equivalents # - PhiB: PrimVoid (PrimVoid PhiA as input) # DeadPhiHandling: # - iterate over blocks in reverse post order # - update PrimVoid PhiA to PrimNot # - update inputs of PrimNot PhiA # - set type of PhiB # - left with two PrimNot equivalents of PhiA .method public static testCase_ReversePostOrder(IILjava/lang/Object;)V .registers 5 # v0 - Phi A # v1 - Phi B # p0 - int arg1 # p1 - int arg2 # p2 - ref arg3 if-nez p0, :else1 :then1 if-nez p1, :else2 :then2 const/4 v1, 0x0 goto :merge2 :else2 move-object v1, p2 goto :merge2 :merge2 # PhiA [null, arg3] move-object v0, v1 # create PrimNot PhiA equivalent invoke-static {}, Ljava/lang/System;->nanoTime()J # env use of both PhiA equivalents goto :merge1 :else1 move-object v0, p2 goto :merge1 :merge1 # PhiB [PhiA, arg3] invoke-static {}, Ljava/lang/System;->nanoTime()J # env use of PhiB return-void .end method # Situation: # - PhiA: PrimVoid + PrimNot (PrimInt inputs) # - PhiB: PrimVoid + PrimNot (PrimInt inputs) # - PhiC: PrimVoid only # DeadPhiHandling: # - iterate over blocks in reverse post order # - add both PhiAs to worklist, set PrimVoid PhiA to PrimInt # - update inputs of PrimNot PhiB ; add PrimNot PhiA to worklist # - update PhiC to PrimNot # - start processing worklist # - PrimNot PhiA: update inputs, no equivalent created # - PrimInt PhiA: update inputs, set to PrimNot, use instead of PrimNot PhiA # - add PhiBs to worklist as users of PhiA # - PrimInt PhiB: set type to PrimNot, equivalent live and in worklist .method public static testCase_FixPointIteration(IILjava/lang/Object;Ljava/lang/Object;)V .registers 6 # v0 - Phi A, C # v1 - Phi B # p0 - int arg1 # p1 - int arg2 # p2 - ref arg3 # p3 - ref arg4 const/4 v0, 0x0 :loop_header # PhiA [null, PhiC] for v0 if-eqz p0, :else1 :then1 const/4 v1, 0x0 goto :merge1 :else1 move-object v1, v0 # create PrimNot equivalent of PhiA invoke-static {}, Ljava/lang/System;->nanoTime()J # env use of both PhiA equivalents goto :merge1 :merge1 # PhiB [null, PhiA] for v1 move-object v0, v1 # creates PrimNot equivalent of PhiB invoke-static {}, Ljava/lang/System;->nanoTime()J # env use of both PhiB equivalents if-eqz p1, :else2 :then2 move-object v0, p2 goto :merge2 :else2 move-object v0, p3 goto :merge2 :merge2 # PhiC [arg3, arg4] for v0, second input of PhiA if-eqz p1, :loop_header return-void .end method