blob: fe4fd71972ec368d5ed3ab067e0002aa874d5e99 [file] [log] [blame]
David Brazdilb7013152015-09-17 16:47:21 +01001# 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