use of com.googlecode.dex2jar.ir.expr.Local in project dex2jar by pxb1988.
the class UnSSATransformerTransformerTest method test06TwoJump.
@Test
public void test06TwoJump() {
initMethod(true, "V");
Local a1 = addLocal("a1");
Local a2 = addLocal("a2");
Local a = addLocal("a");
Local b1 = addLocal("b1");
Local b2 = addLocal("b2");
Local b = addLocal("b");
addStmt(nAssign(a1, nString("123")));
addStmt(nAssign(b1, nString("123")));
LabelStmt L1 = newLabel();
addStmt(L1);
attachPhi(L1, nAssign(a, nPhi(a1, a2)));
attachPhi(L1, nAssign(b, nPhi(b1, b2)));
addStmt(nAssign(a2, nString("456")));
addStmt(nIf(niGt(nInt(100), nInt(0)), L1));
addStmt(nAssign(b2, nString("456")));
addStmt(nIf(niGt(nInt(100), nInt(0)), L1));
addStmt(nReturnVoid());
transform();
// Assert.assertTrue("must assign different index", ls1._ls_index != ls2._ls_index);
}
use of com.googlecode.dex2jar.ir.expr.Local in project dex2jar by pxb1988.
the class UnSSATransformerTransformerTest method test05OneInPhiLoop.
@Test
public void test05OneInPhiLoop() {
initMethod(true, "V");
Local a = addLocal("a");
Local b = addLocal("b");
Local phi = addLocal("p");
Stmt s1 = addStmt(nAssign(a, nString("123")));
LabelStmt L1 = newLabel();
addStmt(L1);
attachPhi(L1, nAssign(phi, nPhi(a)));
addStmt(nVoidInvoke(nInvokeStatic(new Value[] { phi }, "LAAA;", "bMethod", new String[] { "Ljava/lang/String;" }, "V")));
addStmt(nAssign(b, nString("456")));
// phi is still live here
Stmt s2 = addStmt(nVoidInvoke(nInvokeStatic(new Value[] { b }, "LBBB;", "cMethod", new String[] { "Ljava/lang/String;" }, "V")));
addStmt(nIf(niGt(nInt(100), nInt(0)), L1));
addStmt(nReturnVoid());
transform();
Assert.assertTrue("p=a should inserted", s1.getPre() != L1);
}
use of com.googlecode.dex2jar.ir.expr.Local in project dex2jar by pxb1988.
the class ConstTransformerTest method test03.
@Test
public void test03() {
// test local loop
IrMethod jm = new IrMethod();
Local a = nLocal("a");
Local b = nLocal("b");
Local p = nLocal("p");
jm.locals.add(a);
jm.locals.add(b);
jm.locals.add(p);
jm.stmts.add(nAssign(a, nString("a String")));
jm.stmts.add(nAssign(b, nString("b String")));
jm.stmts.add(nAssign(p, Exprs.nPhi(a, b)));
UnopStmt retStmt = nReturn(p);
jm.stmts.add(retStmt);
new ConstTransformer().transform(jm);
Assert.assertTrue(jm.locals.size() == 3);
Assert.assertTrue(jm.stmts.getSize() == 4);
Assert.assertEquals(p, retStmt.op.trim());
}
use of com.googlecode.dex2jar.ir.expr.Local in project dex2jar by pxb1988.
the class RemoveConstantFromSSATest method t002.
@Test
public void t002() {
Local a = addLocal("a");
addStmt(nAssign(a, nInt(5)));
addStmt(nReturn(a));
transform();
Assert.assertTrue("no local should kept", locals.size() == 0);
}
use of com.googlecode.dex2jar.ir.expr.Local in project dex2jar by pxb1988.
the class SSATransformerTest method test02NotInsertPhi.
@Test
public void test02NotInsertPhi() {
Local b = addLocal("a");
addStmt(nAssign(b, nString("123")));
LabelStmt L1 = newLabel();
addStmt(Stmts.nIf(Exprs.niEq(nInt(0), nInt(9)), L1));
addStmt(Stmts.nNop());
addStmt(L1);
addStmt(nReturn(b));
transform();
Assert.assertEquals(1, method.locals.size());
}
Aggregations