private void markSubroutines() {
		BitSet anyvisited = new BitSet();

		// First walk the main subroutine and find all those instructions which
		// can be reached without invoking any JSR at all
		markSubroutineWalk(mainSubroutine, 0, anyvisited);

		// Go through the head of each subroutine and find any nodes reachable
		// to that subroutine without following any JSR links.
		for (Iterator it = subroutineHeads.entrySet().iterator(); it.hasNext();) {
			Map.Entry entry = (Map.Entry) it.next();
			LabelNode lab = (LabelNode) entry.getKey();
			Subroutine sub = (Subroutine) entry.getValue();
			int index = instructions.indexOf(lab);
			markSubroutineWalk(sub, index, anyvisited);
		}
	}