anchor.diff:  
       // Perform bookkeeping on removed body and scan for new redexes.
       new _RemovalVisitor(_worklist).visit(cont);
  +  }
  +
  +  void _reduceBranch(_ReductionTask task) {
  +    Branch branch = task.node;
  +    // Replace Branch with InvokeContinuation of one of the targets. When the
  +    // branch is deleted the other target becomes unreferenced and the chosen
  +    // target becomes available for eta-cont and further reductions.
  +    Continuation target;
  +    Primitive condition = branch.condition.definition;
  +    if (condition is Constant) {
  +      target = isTruthyConstant(condition.value, strict: branch.isStrictCheck)
  +          ? branch.trueContinuation.definition
  +          : branch.falseContinuation.definition;
  +    } else if (_isBranchTargetOfUselessIf(branch.trueContinuation.definition)) {
  +      target = branch.trueContinuation.definition;
  +    } else {
  +      return;
  +    }
  +
  +    InvokeContinuation invoke = new InvokeContinuation(
  +        target, <Primitive>[]
  +        // TODO(sra): Add sourceInformation.
  +        /*, sourceInformation: branch.sourceInformation*/);
  +    branch.parent.body = invoke;
  +    invoke.parent = branch.parent;
  +    branch.parent = _DELETED;
  +
  +    new _RemovalVisitor(_worklist).visit(branch);
     }
   
     void _reduceDeadParameter(_ReductionTask task) {
  
positive.code:   return true;
  }
  
  bool _isDeadParameter(Parameter parameter) {
    // We cannot remove function parameters as an intraprocedural optimization.
    if (parameter.parent is! Continuation || parameter.hasAtLeastOneUse) {
  
negative.code:           worklist.add(new _ReductionTask(_ReductionKind.DEAD_CONT, cont));
          } else if (_isBetaContLin(cont)) {
            worklist.add(new _ReductionTask(_ReductionKind.BETA_CONT_LIN, cont));
          } else if (_isBranchTargetOfUselessIf(cont)) {
            worklist.add(
                new _ReductionTask(_ReductionKind.BRANCH, cont.firstRef.parent));
          }
        }
      }
  