Example #1
0
  /**
   * Transfers the control dependencies from a given {@link Exit} to the done {@link Exit}, creating
   * one if necessary. The given {@link Exit} and its peer are then removed.
   */
  private void mergeBreakExit(Exit breakExit) {
    Exit doneExit = getExit(Exit.DONE);
    if (doneExit == null) {
      doneExit = makeExit(0, Exit.DONE);
    }

    OutBuf breakOutBuf = breakExit.getPeer();
    OutBuf doneOutBuf = doneExit.getPeer();
    Port donePort = doneOutBuf.getGoPort();

    for (Entry breakEntry : breakOutBuf.getEntries()) {
      Exit drivingExit = breakEntry.getDrivingExit();
      Entry doneEntry = doneOutBuf.makeEntry(drivingExit);
      doneEntry.addDependency(donePort, new ControlDependency(drivingExit.getDoneBus()));
    }

    breakOutBuf.disconnect();
    breakExit.disconnect();
    removeExit(breakExit);
  }