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 LTestCase; 16 .super Ljava/lang/Object; 17 18 # Situation: 19 # - PhiA: PrimVoid + PrimNot equivalents 20 # - PhiB: PrimVoid (PrimVoid PhiA as input) 21 # DeadPhiHandling: 22 # - iterate over blocks in reverse post order 23 # - update PrimVoid PhiA to PrimNot 24 # - update inputs of PrimNot PhiA 25 # - set type of PhiB 26 # - left with two PrimNot equivalents of PhiA 27 28 .method public static testCase_ReversePostOrder(IILjava/lang/Object;)V 29 .registers 5 30 31 # v0 - Phi A 32 # v1 - Phi B 33 # p0 - int arg1 34 # p1 - int arg2 35 # p2 - ref arg3 36 37 if-nez p0, :else1 38 :then1 39 if-nez p1, :else2 40 :then2 41 const/4 v1, 0x0 42 goto :merge2 43 44 :else2 45 move-object v1, p2 46 goto :merge2 47 48 :merge2 49 # PhiA [null, arg3] 50 move-object v0, v1 # create PrimNot PhiA equivalent 51 invoke-static {}, Ljava/lang/System;->nanoTime()J # env use of both PhiA equivalents 52 goto :merge1 53 54 :else1 55 move-object v0, p2 56 goto :merge1 57 58 :merge1 59 # PhiB [PhiA, arg3] 60 invoke-static {}, Ljava/lang/System;->nanoTime()J # env use of PhiB 61 62 return-void 63 .end method 64 65 # Situation: 66 # - PhiA: PrimVoid + PrimNot (PrimInt inputs) 67 # - PhiB: PrimVoid + PrimNot (PrimInt inputs) 68 # - PhiC: PrimVoid only 69 # DeadPhiHandling: 70 # - iterate over blocks in reverse post order 71 # - add both PhiAs to worklist, set PrimVoid PhiA to PrimInt 72 # - update inputs of PrimNot PhiB ; add PrimNot PhiA to worklist 73 # - update PhiC to PrimNot 74 # - start processing worklist 75 # - PrimNot PhiA: update inputs, no equivalent created 76 # - PrimInt PhiA: update inputs, set to PrimNot, use instead of PrimNot PhiA 77 # - add PhiBs to worklist as users of PhiA 78 # - PrimInt PhiB: set type to PrimNot, equivalent live and in worklist 79 80 .method public static testCase_FixPointIteration(IILjava/lang/Object;Ljava/lang/Object;)V 81 .registers 6 82 83 # v0 - Phi A, C 84 # v1 - Phi B 85 # p0 - int arg1 86 # p1 - int arg2 87 # p2 - ref arg3 88 # p3 - ref arg4 89 90 const/4 v0, 0x0 91 92 :loop_header 93 # PhiA [null, PhiC] for v0 94 95 if-eqz p0, :else1 96 :then1 97 const/4 v1, 0x0 98 goto :merge1 99 :else1 100 move-object v1, v0 # create PrimNot equivalent of PhiA 101 invoke-static {}, Ljava/lang/System;->nanoTime()J # env use of both PhiA equivalents 102 goto :merge1 103 :merge1 104 # PhiB [null, PhiA] for v1 105 106 move-object v0, v1 # creates PrimNot equivalent of PhiB 107 invoke-static {}, Ljava/lang/System;->nanoTime()J # env use of both PhiB equivalents 108 109 if-eqz p1, :else2 110 :then2 111 move-object v0, p2 112 goto :merge2 113 :else2 114 move-object v0, p3 115 goto :merge2 116 :merge2 117 # PhiC [arg3, arg4] for v0, second input of PhiA 118 119 if-eqz p1, :loop_header 120 return-void 121 .end method 122