public void splitVariables(RootStatement root, StructMethod mt) { FlattenStatementsHelper flatthelper = new FlattenStatementsHelper(); DirectGraph dgraph = flatthelper.buildDirectGraph(root); // try { // DotExporter.toDotFile(dgraph, new File("c:\\Temp\\gr12_my.dot")); // } catch(Exception ex) {ex.printStackTrace();} HashSet<Integer> setInit = new HashSet<>(); for (int i = 0; i < 64; i++) { setInit.add(i); } factory = new FastSparseSetFactory<>(setInit); SFormsFastMapDirect firstmap = createFirstMap(mt); extraVarVersions.put(dgraph.first.id, firstmap); setCatchMaps(root, dgraph, flatthelper); HashSet<String> updated = new HashSet<>(); do { // System.out.println("~~~~~~~~~~~~~ \r\n"+root.toJava()); ssaStatements(dgraph, updated); // System.out.println("~~~~~~~~~~~~~ \r\n"+root.toJava()); } while (!updated.isEmpty()); }
private FastSparseSet(FastSparseSetFactory<E> factory) { this.factory = factory; this.colValuesInternal = factory.getInternalValuesCollection(); int length = factory.getLastBlock() + 1; this.data = new int[length]; this.next = new int[length]; }
private void setCurrentVar(SFormsFastMapDirect varmap, Integer var, Integer vers) { FastSparseSet<Integer> set = factory.spawnEmptySet(); set.add(vers); varmap.put(var, set); }
public void setAllElements() { int lastblock = factory.getLastBlock(); int lastmask = factory.getLastMask(); if (lastblock >= data.length) { ensureCapacity(lastblock); } for (int i = lastblock - 1; i >= 0; i--) { data[i] = 0xFFFFFFFF; next[i] = i + 1; } data[lastblock] = lastmask | (lastmask - 1); next[lastblock] = 0; }
private void setCurrentVar(SFormsFastMapDirect varmap, Integer var, Integer vers) { FastSparseSet<Integer> set = factory.spawnEmptySet(); set.add(vers); varmap.put(var, set); }
public void splitVariables(RootStatement root, StructMethod mt) { FlattenStatementsHelper flatthelper = new FlattenStatementsHelper(); DirectGraph dgraph = flatthelper.buildDirectGraph(root); HashSet<Integer> setInit = new HashSet<>(); for (int i = 0; i < 64; i++) { setInit.add(i); } factory = new FastSparseSetFactory<>(setInit); extraVarVersions.put(dgraph.first.id, createFirstMap(mt, root)); setCatchMaps(root, dgraph, flatthelper); // try { // DotExporter.toDotFile(dgraph, new File("c:\\Temp\\gr12_my.dot")); // } catch(Exception ex) {ex.printStackTrace();} HashSet<String> updated = new HashSet<>(); do { // System.out.println("~~~~~~~~~~~~~ \r\n"+root.toJava()); ssaStatements(dgraph, updated, false); // System.out.println("~~~~~~~~~~~~~ \r\n"+root.toJava()); } while (!updated.isEmpty()); ssaStatements(dgraph, updated, true); ssuversions.initDominators(); }
private FastSparseSet(FastSparseSetFactory<E> factory) { this.factory = factory; this.colValuesInternal = factory.getInternalValuesCollection(); int length = factory.getLastBlock() + 1; this.data = new int[length]; this.next = new int[length]; }
private SFormsFastMapDirect createFirstMap(StructMethod mt) { boolean thisvar = !mt.hasModifier(CodeConstants.ACC_STATIC); MethodDescriptor md = MethodDescriptor.parseDescriptor(mt.getDescriptor()); int paramcount = md.params.length + (thisvar ? 1 : 0); int varindex = 0; SFormsFastMapDirect map = new SFormsFastMapDirect(); for (int i = 0; i < paramcount; i++) { int version = getNextFreeVersion(varindex); // == 1 FastSparseSet<Integer> set = factory.spawnEmptySet(); set.add(version); map.put(varindex, set); if (thisvar) { if (i == 0) { varindex++; } else { varindex += md.params[i - 1].stackSize; } } else { varindex += md.params[i].stackSize; } } return map; }
public void splitVariables(RootStatement root, StructMethod mt) { FlattenStatementsHelper flatthelper = new FlattenStatementsHelper(); DirectGraph dgraph = flatthelper.buildDirectGraph(root); // try { // DotExporter.toDotFile(dgraph, new File("c:\\Temp\\gr12_my.dot")); // } catch(Exception ex) {ex.printStackTrace();} HashSet<Integer> setInit = new HashSet<>(); for (int i = 0; i < 64; i++) { setInit.add(i); } factory = new FastSparseSetFactory<>(setInit); SFormsFastMapDirect firstmap = createFirstMap(mt); extraVarVersions.put(dgraph.first.id, firstmap); setCatchMaps(root, dgraph, flatthelper); HashSet<String> updated = new HashSet<>(); do { // System.out.println("~~~~~~~~~~~~~ \r\n"+root.toJava()); ssaStatements(dgraph, updated); // System.out.println("~~~~~~~~~~~~~ \r\n"+root.toJava()); } while (!updated.isEmpty()); }
private SFormsFastMapDirect createFirstMap(StructMethod mt, RootStatement root) { boolean thisvar = !mt.hasModifier(CodeConstants.ACC_STATIC); MethodDescriptor md = MethodDescriptor.parseDescriptor(mt.getDescriptor()); int paramcount = md.params.length + (thisvar ? 1 : 0); int varindex = 0; SFormsFastMapDirect map = new SFormsFastMapDirect(); for (int i = 0; i < paramcount; i++) { int version = getNextFreeVersion(varindex, root); // == 1 FastSparseSet<Integer> set = factory.spawnEmptySet(); set.add(version); map.put(varindex, set); ssuversions.createNode(new VarVersionPair(varindex, version)); if (thisvar) { if (i == 0) { varindex++; } else { varindex += md.params[i - 1].stackSize; } } else { varindex += md.params[i].stackSize; } } return map; }
public void splitVariables(RootStatement root, StructMethod mt) { FlattenStatementsHelper flatthelper = new FlattenStatementsHelper(); DirectGraph dgraph = flatthelper.buildDirectGraph(root); HashSet<Integer> setInit = new HashSet<>(); for (int i = 0; i < 64; i++) { setInit.add(i); } factory = new FastSparseSetFactory<>(setInit); extraVarVersions.put(dgraph.first.id, createFirstMap(mt, root)); setCatchMaps(root, dgraph, flatthelper); // try { // DotExporter.toDotFile(dgraph, new File("c:\\Temp\\gr12_my.dot")); // } catch(Exception ex) {ex.printStackTrace();} HashSet<String> updated = new HashSet<>(); do { // System.out.println("~~~~~~~~~~~~~ \r\n"+root.toJava()); ssaStatements(dgraph, updated, false); // System.out.println("~~~~~~~~~~~~~ \r\n"+root.toJava()); } while (!updated.isEmpty()); ssaStatements(dgraph, updated, true); ssuversions.initDominators(); }
FastSparseSet<Integer> vers = factory.spawnEmptySet(); if (vernode.preds.size() == 1) { vers.add(vernode.preds.iterator().next().source.version);
private void setCurrentVar(SFormsFastMapDirect varmap, Integer var, Integer vers) { FastSparseSet<Integer> set = factory.spawnEmptySet(); set.add(vers); varmap.put(var, set); }
private void setCurrentVar(SFormsFastMapDirect varmap, Integer var, Integer vers) { FastSparseSet<Integer> set = factory.spawnEmptySet(); set.add(vers); varmap.put(var, set); }
private SFormsFastMapDirect createFirstMap(StructMethod mt) { boolean thisvar = !mt.hasModifier(CodeConstants.ACC_STATIC); MethodDescriptor md = MethodDescriptor.parseDescriptor(mt.getDescriptor()); int paramcount = md.params.length + (thisvar ? 1 : 0); int varindex = 0; SFormsFastMapDirect map = new SFormsFastMapDirect(); for (int i = 0; i < paramcount; i++) { int version = getNextFreeVersion(varindex); // == 1 FastSparseSet<Integer> set = factory.spawnEmptySet(); set.add(version); map.put(varindex, set); startVars.add(new VarVersionPair(varindex, version)); if (thisvar) { if (i == 0) { varindex++; } else { varindex += md.params[i - 1].stackSize; } } else { varindex += md.params[i].stackSize; } } return map; }
private SFormsFastMapDirect createFirstMap(StructMethod mt, RootStatement root) { boolean thisvar = !mt.hasModifier(CodeConstants.ACC_STATIC); MethodDescriptor md = MethodDescriptor.parseDescriptor(mt.getDescriptor()); int paramcount = md.params.length + (thisvar ? 1 : 0); int varindex = 0; SFormsFastMapDirect map = new SFormsFastMapDirect(); for (int i = 0; i < paramcount; i++) { int version = getNextFreeVersion(varindex, root); // == 1 FastSparseSet<Integer> set = factory.spawnEmptySet(); set.add(version); map.put(varindex, set); ssuversions.createNode(new VarVersionPair(varindex, version)); if (thisvar) { if (i == 0) { varindex++; } else { varindex += md.params[i - 1].stackSize; } } else { varindex += md.params[i].stackSize; } } return map; }
FastSparseSet<Integer> vers = factory.spawnEmptySet(); if (vernode.preds.size() == 1) { vers.add(vernode.preds.iterator().next().source.version);