List of usage examples for org.objectweb.asm.tree LabelNode getPrevious
public AbstractInsnNode getPrevious()
From source file:de.tuberlin.uebb.jbop.optimizer.utils.LoopMatcher.java
License:Open Source License
private static Loop getTypeOneLoop(final AbstractInsnNode counter, final AbstractInsnNode jump) { final LabelNode labelOfJump = ((JumpInsnNode) jump).label; final AbstractInsnNode target = labelOfJump.getNext(); final AbstractInsnNode label = jump.getNext(); if (!(label instanceof LabelNode)) { return null; }/* ww w .j a v a2 s .co m*/ final AbstractInsnNode ifNode = findIf(target, label); if (ifNode == null) { return null; } AbstractInsnNode previous = NodeHelper.getPrevious(ifNode); AbstractInsnNode endValue = previous.getPrevious(); final int varIndex = NodeHelper.getVarIndex(counter); int varIndex2 = NodeHelper.getVarIndex(previous); if (varIndex2 == -1) { previous = target; endValue = previous.getNext(); varIndex2 = NodeHelper.getVarIndex(counter); } if (varIndex != varIndex2) { return null; } final AbstractInsnNode iinc = labelOfJump.getPrevious(); if (endValue instanceof LabelNode) { endValue = NodeHelper.getInsnNodeFor(0); } final AbstractInsnNode startValue = counter.getPrevious(); final AbstractInsnNode firstOfBody = ((JumpInsnNode) ifNode).label.getNext(); return new Loop(ifNode, startValue, endValue, iinc, firstOfBody, ifNode, counter); }
From source file:de.tuberlin.uebb.jbop.optimizer.var.LocalVarInliner.java
License:Open Source License
private AbstractInsnNode handleIf(final AbstractInsnNode currentNode, final Map<Integer, Object> knownValues, final InsnList original, final MethodNode methodNode) { if (LoopMatcher.isIfOfLoop(currentNode)) { return skipVars(currentNode, knownValues); }//from w w w .j ava 2 s. com final LabelNode endIf = ((JumpInsnNode) currentNode).label; final AbstractInsnNode end1 = endIf.getNext(); handleNodes(currentNode.getNext(), endIf, original, new HashMap<>(knownValues), methodNode); AbstractInsnNode end2 = null; final List<Integer> stores = getStores(currentNode.getNext(), end1); if (endIf.getPrevious() instanceof JumpInsnNode) { end2 = ((JumpInsnNode) endIf.getPrevious()).label.getNext(); handleNodes(end1, end2, original, new HashMap<>(knownValues), methodNode); stores.addAll(getStores(endIf, end2)); } for (final Integer var : stores) { knownValues.remove(var); } if (end2 != null) { return end2; } return end1; }