protected void commonExpressionChangeToMove(Block root) {
		HashMap<Block, HashMap<SSAInstruction, Integer>> blockInstructionHistroy = new HashMap<Block, HashMap<SSAInstruction, Integer>>();
		Queue<Entry<Block, HashMap<SSAInstruction, Integer>>> queue = new LinkedList<Entry<Block, HashMap<SSAInstruction, Integer>>>();
		queue.add(new AbstractMap.SimpleEntry<Block, HashMap<SSAInstruction, Integer>>(root,
				new HashMap<SSAInstruction, Integer>()));

		while (!queue.isEmpty()) {
			Entry<Block, HashMap<SSAInstruction, Integer>> entry = queue.remove();
			Block blk = entry.getKey();
			if (blk == null || blockInstructionHistroy.containsKey(blk)) {
				continue;
			}
			HashMap<SSAInstruction, Integer> history = entry.getValue();
			blockInstructionHistroy.put(blk, blk.copyCommonExpression(history));

			if (blk.getNextBlock() != null) {
				queue.add(new SimpleEntry<Block, HashMap<SSAInstruction, Integer>>(blk
						.getNextBlock(), commonExpressionVisit(blk.getNextBlock(),
						blockInstructionHistroy)));
			}
			if (blk.getNegBranchBlock() != null) {
				queue.add(new SimpleEntry<Block, HashMap<SSAInstruction, Integer>>(blk
						.getNegBranchBlock(), commonExpressionVisit(blk.getNegBranchBlock(),
						blockInstructionHistroy)));
			}

		}
	}