[Fwd: [Soot-list] suboptimal type assignment?]

Laurie Hendren, Prof hendren at cs.mcgill.ca
Tue Feb 12 14:02:01 EST 2008


Skipped content of type multipart/alternative-------------- next part --------------
public class abc.weaving.residues.IfResidue extends abc.weaving.residues.Residue
{
    private soot.SootMethod impl;
    private java.util.List args;

    public abc.weaving.residues.Residue optimize()
    {
        abc.weaving.residues.IfResidue r0;

        r0 := @this: abc.weaving.residues.IfResidue;
        return r0;
    }

    public abc.weaving.residues.Residue inline(abc.weaving.weaver.ConstructorInliningMap)
    {
        abc.weaving.residues.IfResidue r0, $r5;
        abc.weaving.weaver.ConstructorInliningMap r1;
        soot.SootMethod $r2;
        java.util.List $r3, $r4;

        r0 := @this: abc.weaving.residues.IfResidue;
        r1 := @parameter0: abc.weaving.weaver.ConstructorInliningMap;
        $r2 = r0.<abc.weaving.residues.IfResidue: soot.SootMethod impl>;
        $r3 = r0.<abc.weaving.residues.IfResidue: java.util.List args>;
        $r4 = staticinvoke <abc.weaving.residues.WeavingVar: java.util.List inline(java.util.List,abc.weaving.weaver.ConstructorInliningMap)>($r3, r1);
        $r5 = staticinvoke <abc.weaving.residues.IfResidue: abc.weaving.residues.IfResidue construct(soot.SootMethod,java.util.List)>($r2, $r4);
        return $r5;
    }

    private void <init>(soot.SootMethod, java.util.List)
    {
        abc.weaving.residues.IfResidue r0;
        soot.SootMethod r1;
        java.util.List r2;

        r0 := @this: abc.weaving.residues.IfResidue;
        r1 := @parameter0: soot.SootMethod;
        r2 := @parameter1: java.util.List;
        specialinvoke r0.<abc.weaving.residues.Residue: void <init>()>();
        r0.<abc.weaving.residues.IfResidue: soot.SootMethod impl> = r1;
        r0.<abc.weaving.residues.IfResidue: java.util.List args> = r2;
        return;
    }

    public abc.weaving.residues.Residue resetForReweaving()
    {
        abc.weaving.residues.IfResidue r0;
        java.util.Iterator r1;
        abc.weaving.residues.WeavingVar r2;
        java.util.List $r3;
        boolean $z0;
        java.lang.Object $r4;

        r0 := @this: abc.weaving.residues.IfResidue;
        $r3 = r0.<abc.weaving.residues.IfResidue: java.util.List args>;
        r1 = interfaceinvoke $r3.<java.util.List: java.util.Iterator iterator()>();

     label0:
        $z0 = interfaceinvoke r1.<java.util.Iterator: boolean hasNext()>();
        if $z0 == 0 goto label1;

        $r4 = interfaceinvoke r1.<java.util.Iterator: java.lang.Object next()>();
        r2 = (abc.weaving.residues.WeavingVar) $r4;
        virtualinvoke r2.<abc.weaving.residues.WeavingVar: void resetForReweaving()>();
        goto label0;

     label1:
        return r0;
    }

    public static abc.weaving.residues.IfResidue construct(soot.SootMethod, java.util.List)
    {
        soot.SootMethod r0;
        java.util.List r1;
        abc.weaving.residues.IfResidue $r2;

        r0 := @parameter0: soot.SootMethod;
        r1 := @parameter1: java.util.List;
        $r2 = new abc.weaving.residues.IfResidue;
        specialinvoke $r2.<abc.weaving.residues.IfResidue: void <init>(soot.SootMethod,java.util.List)>(r0, r1);
        return $r2;
    }

    public java.lang.String toString()
    {
        abc.weaving.residues.IfResidue r0;

        r0 := @this: abc.weaving.residues.IfResidue;
        return "if(...)";
    }

    public soot.jimple.Stmt codeGen(soot.SootMethod, abc.soot.util.LocalGeneratorEx, soot.util.Chain, soot.jimple.Stmt, soot.jimple.Stmt, boolean, abc.weaving.weaver.WeavingContext)
    {
        abc.weaving.residues.IfResidue r0;
        soot.SootMethod r1, $r32;
        abc.soot.util.LocalGeneratorEx r2;
        soot.util.Chain r3;
        soot.jimple.Stmt r4, r5, r10;
        boolean z0, $z1, $z2;
        abc.weaving.weaver.WeavingContext r6;
        java.util.Vector $r7, r8;
        java.util.Iterator r9;
        abc.weaving.residues.WeavingVar r11;
        soot.Local r12, r18, r30;
        soot.RefType r13;
        soot.SootClass r14;
        soot.Type r15, $r24;
        java.util.ArrayList $r16;
        soot.SootMethodRef r17, $r33;
        soot.jimple.VirtualInvokeExpr r19;
        soot.jimple.AssignStmt r20, r36;
        java.util.List $r21, $r22;
        int $i0;
        java.lang.Object $r23;
        soot.Scene $r25;
        java.lang.String $r26;
        soot.jimple.Jimple $r27, $r28, $r31, $r35, $r37, $r40, $r42;
        soot.BooleanType $r29;
        soot.jimple.StaticInvokeExpr r34;
        soot.jimple.IntConstant $r38, $r41;
        soot.Value r39;
        soot.jimple.IfStmt r43;

        r0 := @this: abc.weaving.residues.IfResidue;
        r1 := @parameter0: soot.SootMethod;
        r2 := @parameter1: abc.soot.util.LocalGeneratorEx;
        r3 := @parameter2: soot.util.Chain;
        r4 := @parameter3: soot.jimple.Stmt;
        r5 := @parameter4: soot.jimple.Stmt;
        z0 := @parameter5: boolean;
        r6 := @parameter6: abc.weaving.weaver.WeavingContext;
        $r7 = new java.util.Vector;
        $r21 = r0.<abc.weaving.residues.IfResidue: java.util.List args>;
        $i0 = interfaceinvoke $r21.<java.util.List: int size()>();
        specialinvoke $r7.<java.util.Vector: void <init>(int)>($i0);
        r8 = $r7;
        $r22 = r0.<abc.weaving.residues.IfResidue: java.util.List args>;
        r9 = interfaceinvoke $r22.<java.util.List: java.util.Iterator iterator()>();
        r10 = r4;

     label0:
        $z1 = interfaceinvoke r9.<java.util.Iterator: boolean hasNext()>();
        if $z1 == 0 goto label3;

        $r23 = interfaceinvoke r9.<java.util.Iterator: java.lang.Object next()>();
        r11 = (abc.weaving.residues.WeavingVar) $r23;
        r12 = virtualinvoke r11.<abc.weaving.residues.WeavingVar: soot.Local get()>();
        $z2 = virtualinvoke r11.<abc.weaving.residues.WeavingVar: boolean mustBox()>();
        if $z2 == 0 goto label1;

        $r24 = virtualinvoke r11.<abc.weaving.residues.WeavingVar: soot.Type getType()>();
        r13 = (soot.RefType) $r24;
        r14 = virtualinvoke r13.<soot.RefType: soot.SootClass getSootClass()>();
        r15 = staticinvoke <abc.soot.util.Restructure$JavaTypeInfo: soot.Type getBoxingClassPrimType(soot.SootClass)>(r14);
        $r25 = staticinvoke <soot.Scene: soot.Scene v()>();
        $r26 = staticinvoke <abc.soot.util.Restructure$JavaTypeInfo: java.lang.String getSimpleTypeBoxingClassMethodName(soot.Type)>(r15);
        $r16 = new java.util.ArrayList;
        specialinvoke $r16.<java.util.ArrayList: void <init>()>();
        r17 = virtualinvoke $r25.<soot.Scene: soot.SootMethodRef makeMethodRef(soot.SootClass,java.lang.String,java.util.List,soot.Type,boolean)>(r14, $r26, $r16, r15, 0);
        r18 = virtualinvoke r2.<abc.soot.util.LocalGeneratorEx: soot.Local generateLocal(soot.Type,java.lang.String)>(r13, "ifparam");
        $r27 = staticinvoke <soot.jimple.Jimple: soot.jimple.Jimple v()>();
        r19 = virtualinvoke $r27.<soot.jimple.Jimple: soot.jimple.VirtualInvokeExpr newVirtualInvokeExpr(soot.Local,soot.SootMethodRef)>(r12, r17);
        $r28 = staticinvoke <soot.jimple.Jimple: soot.jimple.Jimple v()>();
        r20 = virtualinvoke $r28.<soot.jimple.Jimple: soot.jimple.AssignStmt newAssignStmt(soot.Value,soot.Value)>(r18, r19);
        staticinvoke <abc.weaving.tagkit.Tagger: void tagStmt(soot.jimple.Stmt,abc.weaving.tagkit.TagContainer)>(r20, r6);
        interfaceinvoke r3.<soot.util.Chain: void insertAfter(java.lang.Object,java.lang.Object)>(r20, r10);
        r10 = r20;
        interfaceinvoke r8.<java.util.List: boolean add(java.lang.Object)>(r18);
        goto label2;

     label1:
        interfaceinvoke r8.<java.util.List: boolean add(java.lang.Object)>(r12);

     label2:
        goto label0;

     label3:
        $r29 = staticinvoke <soot.BooleanType: soot.BooleanType v()>();
        r30 = virtualinvoke r2.<abc.soot.util.LocalGeneratorEx: soot.Local generateLocal(soot.Type,java.lang.String)>($r29, "ifresult");
        $r31 = staticinvoke <soot.jimple.Jimple: soot.jimple.Jimple v()>();
        $r32 = r0.<abc.weaving.residues.IfResidue: soot.SootMethod impl>;
        $r33 = virtualinvoke $r32.<soot.SootMethod: soot.SootMethodRef makeRef()>();
        r34 = virtualinvoke $r31.<soot.jimple.Jimple: soot.jimple.StaticInvokeExpr newStaticInvokeExpr(soot.SootMethodRef,java.util.List)>($r33, r8);
        $r35 = staticinvoke <soot.jimple.Jimple: soot.jimple.Jimple v()>();
        r36 = virtualinvoke $r35.<soot.jimple.Jimple: soot.jimple.AssignStmt newAssignStmt(soot.Value,soot.Value)>(r30, r34);
        if z0 == 0 goto label4;

        $r37 = staticinvoke <soot.jimple.Jimple: soot.jimple.Jimple v()>();
        $r38 = staticinvoke <soot.jimple.IntConstant: soot.jimple.IntConstant v(int)>(0);
        r39 = virtualinvoke $r37.<soot.jimple.Jimple: soot.jimple.EqExpr newEqExpr(soot.Value,soot.Value)>(r30, $r38);
        goto label5;

     label4:
        $r40 = staticinvoke <soot.jimple.Jimple: soot.jimple.Jimple v()>();
        $r41 = staticinvoke <soot.jimple.IntConstant: soot.jimple.IntConstant v(int)>(0);
        r39 = virtualinvoke $r40.<soot.jimple.Jimple: soot.jimple.NeExpr newNeExpr(soot.Value,soot.Value)>(r30, $r41);

     label5:
        $r42 = staticinvoke <soot.jimple.Jimple: soot.jimple.Jimple v()>();
        r43 = virtualinvoke $r42.<soot.jimple.Jimple: soot.jimple.IfStmt newIfStmt(soot.Value,soot.Unit)>(r39, r5);
        staticinvoke <abc.weaving.tagkit.Tagger: void tagStmt(soot.jimple.Stmt,abc.weaving.tagkit.TagContainer)>(r36, r6);
        staticinvoke <abc.weaving.tagkit.Tagger: void tagStmt(soot.jimple.Stmt,abc.weaving.tagkit.TagContainer)>(r43, r6);
        interfaceinvoke r3.<soot.util.Chain: void insertAfter(java.lang.Object,java.lang.Object)>(r36, r10);
        interfaceinvoke r3.<soot.util.Chain: void insertAfter(java.lang.Object,java.lang.Object)>(r43, r36);
        return r43;
    }
}
-------------- next part --------------
_______________________________________________
Soot-list mailing list
Soot-list at sable.mcgill.ca
http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list



More information about the Soot-list mailing list