public void removeOnetimeLocals() {
		StructuredBlock secondBlock = subBlocks[1];
		if (secondBlock instanceof SequentialBlock)
			secondBlock = ((SequentialBlock) secondBlock).subBlocks[0];
		if (subBlocks[0] instanceof InstructionBlock
				&& secondBlock instanceof InstructionContainer) {
			InstructionBlock first = (InstructionBlock) subBlocks[0];
			InstructionContainer second = (InstructionContainer) secondBlock;
			/*
			 * check if subBlocks[0] writes to a local, second reads that local,
			 * the local is only used by this two blocks, and there are no side
			 * effects. In that case replace the LoadLocal with the
			 * righthandside of subBlocks[0] and replace subBlocks[1] with this
			 * block. Call removeOnetimelLocals on subBlocks[1] afterwards and
			 * return.
			 */

			if (first.getInstruction() instanceof StoreInstruction) {
				StoreInstruction store = (StoreInstruction) first
						.getInstruction();
				if (store.getLValue() instanceof LocalStoreOperator
						&& (((LocalStoreOperator) store.getLValue())
								.getLocalInfo().getUseCount() == 2)
						&& (second.getInstruction().canCombine(store) > 0)) {
					System.err.println("before: " + first + second);

					second.setInstruction(second.getInstruction()
							.combine(store));
					System.err.println("after: " + second);
					StructuredBlock sb = subBlocks[1];
					sb.moveDefinitions(this, sb);
					sb.replace(this);
					sb.removeOnetimeLocals();
					return;
				}
			}
		}
		super.removeOnetimeLocals();
	}