.class public LB22881413;
.super Ljava/lang/Object;

# A couple of fields to allow "loading" resolved and unresolved types. Use non-final classes to
# avoid automatically getting precise reference types.
.field private static res1:Ljava/lang/Number;
.field private static res2:Ljava/lang/ClassLoader;
.field private static res3:Ljava/lang/Package;
.field private static res4:Ljava/lang/RuntimeException;
.field private static res5:Ljava/lang/Exception;
.field private static res6:Ljava/util/ArrayList;
.field private static res7:Ljava/util/LinkedList;
.field private static res8:Ljava/lang/Thread;
.field private static res9:Ljava/lang/ThreadGroup;
.field private static res10:Ljava/lang/Runtime;

.field private static unres1:La/b/c/d1;
.field private static unres2:La/b/c/d2;
.field private static unres3:La/b/c/d3;
.field private static unres4:La/b/c/d4;
.field private static unres5:La/b/c/d5;
.field private static unres6:La/b/c/d6;
.field private static unres7:La/b/c/d7;
.field private static unres8:La/b/c/d8;
.field private static unres9:La/b/c/d9;
.field private static unres10:La/b/c/d10;

.field private static unresBase0:La/b/c/dBase0;
.field private static unresBase1:La/b/c/dBase1;
.field private static unresBase2:La/b/c/dBase2;
.field private static unresBase3:La/b/c/dBase3;
.field private static unresBase4:La/b/c/dBase4;
.field private static unresBase5:La/b/c/dBase5;
.field private static unresBase6:La/b/c/dBase6;
.field private static unresBase7:La/b/c/dBase7;
.field private static unresBase8:La/b/c/dBase8;

# Empty, ignore this. We want to see if the other method can be verified in a reasonable amount of
# time.
.method public static run()V
.registers 2
       return-void
.end method

.method public static foo(IZZ) V
.registers 11
       # v8 = int, v9 = boolean, v10 = boolean

       sget-object v0, LB22881413;->unresBase0:La/b/c/dBase0;
       const v1, 0
       const v2, 0

# We're trying to create something like this (with more loops to amplify things).
#
# v0 = Unresolved1
# while (something) {
#
#   [Repeatedly]
#   if (cond) {
#     v0 = ResolvedX;
#   } else {
#     v0 = UnresolvedX;
#   }
#
#   v0 = Unresolved2
# };
#
# Important points:
#   1) Use a while, so that the end of the loop is a goto. That way, the merging of outer-loop
#      unresolved classes is postponed.
#   2) Put the else cases after all if cases. That way there are backward gotos that will lead
#      to stabilization loops in the body.
#

:Loop1

       const v6, 0
       add-int/lit16 v8, v8, -1
       if-ge v8, v6, :Loop1End

:Loop2

       const v6, 0
       add-int/lit16 v8, v8, -1
       if-ge v8, v6, :Loop2End

:Loop3

       const v6, 0
       add-int/lit16 v8, v8, -1
       if-ge v8, v6, :Loop3End

:Loop4

       const v6, 0
       add-int/lit16 v8, v8, -1
       if-ge v8, v6, :Loop4End

:Loop5

       const v6, 0
       add-int/lit16 v8, v8, -1
       if-ge v8, v6, :Loop5End

:Loop6

       const v6, 0
       add-int/lit16 v8, v8, -1
       if-ge v8, v6, :Loop6End

:Loop7

       const v6, 0
       add-int/lit16 v8, v8, -1
       if-ge v8, v6, :Loop7End

:Loop8

       const v6, 0
       add-int/lit16 v8, v8, -1
       if-ge v8, v6, :Loop8End

# Prototype:
#
#       if-eqz v9, :ElseX
#       sget-object v0, LB22881413;->res1:Ljava/lang/Number;
#:JoinX
#
# And somewhere at the end
#
#:ElseX
#       sget-object v0, LB22881413;->unresX:La/b/c/dX;
#       goto :JoinX
#
#

       if-eqz v10, :Join1
       if-eqz v9, :Else1
       sget-object v0, LB22881413;->res1:Ljava/lang/Number;
:Join1


       if-eqz v10, :Join2
       if-eqz v9, :Else2
       sget-object v0, LB22881413;->res2:Ljava/lang/ClassLoader;
:Join2


       if-eqz v10, :Join3
       if-eqz v9, :Else3
       sget-object v0, LB22881413;->res3:Ljava/lang/Package;
:Join3


       if-eqz v10, :Join4
       if-eqz v9, :Else4
       sget-object v0, LB22881413;->res4:Ljava/lang/RuntimeException;
:Join4


       if-eqz v10, :Join5
       if-eqz v9, :Else5
       sget-object v0, LB22881413;->res5:Ljava/lang/Exception;
:Join5


       if-eqz v10, :Join6
       if-eqz v9, :Else6
       sget-object v0, LB22881413;->res6:Ljava/util/ArrayList;
:Join6


       if-eqz v10, :Join7
       if-eqz v9, :Else7
       sget-object v0, LB22881413;->res7:Ljava/util/LinkedList;
:Join7


       if-eqz v10, :Join8
       if-eqz v9, :Else8
       sget-object v0, LB22881413;->res8:Ljava/lang/Thread;
:Join8


       if-eqz v10, :Join9
       if-eqz v9, :Else9
       sget-object v0, LB22881413;->res9:Ljava/lang/ThreadGroup;
:Join9


       if-eqz v10, :Join10
       if-eqz v9, :Else10
       sget-object v0, LB22881413;->res10:Ljava/lang/Runtime;
:Join10


       goto :InnerMostLoopEnd

:Else1
       sget-object v0, LB22881413;->unres1:La/b/c/d1;
       goto :Join1

:Else2
       sget-object v0, LB22881413;->unres2:La/b/c/d2;
       goto :Join2

:Else3
       sget-object v0, LB22881413;->unres3:La/b/c/d3;
       goto :Join3

:Else4
       sget-object v0, LB22881413;->unres4:La/b/c/d4;
       goto :Join4

:Else5
       sget-object v0, LB22881413;->unres5:La/b/c/d5;
       goto :Join5

:Else6
       sget-object v0, LB22881413;->unres6:La/b/c/d6;
       goto :Join6

:Else7
       sget-object v0, LB22881413;->unres7:La/b/c/d7;
       goto :Join7

:Else8
       sget-object v0, LB22881413;->unres8:La/b/c/d8;
       goto :Join8

:Else9
       sget-object v0, LB22881413;->unres9:La/b/c/d9;
       goto :Join9

:Else10
       sget-object v0, LB22881413;->unres10:La/b/c/d10;
       goto :Join10

:InnerMostLoopEnd

       # Loop 8 end of body.
       sget-object v0, LB22881413;->unresBase8:La/b/c/dBase8;
       goto :Loop8

:Loop8End

       # Loop 7 end of body.
       sget-object v0, LB22881413;->unresBase7:La/b/c/dBase7;
       goto :Loop7

:Loop7End

       # Loop 6 end of body.
       sget-object v0, LB22881413;->unresBase6:La/b/c/dBase6;
       goto :Loop6

:Loop6End

       # Loop 5 end of body
       sget-object v0, LB22881413;->unresBase5:La/b/c/dBase5;
       goto :Loop5

:Loop5End

       # Loop 4 end of body
       sget-object v0, LB22881413;->unresBase4:La/b/c/dBase4;
       goto :Loop4

:Loop4End

       # Loop 3 end of body
       sget-object v0, LB22881413;->unresBase3:La/b/c/dBase3;
       goto :Loop3

:Loop3End

       # Loop 2 end of body
       sget-object v0, LB22881413;->unresBase2:La/b/c/dBase2;
       goto :Loop2

:Loop2End

       # Loop 1 end of body
       sget-object v0, LB22881413;->unresBase1:La/b/c/dBase1;
       goto :Loop1

:Loop1End

       return-void

.end method
