There are now two methods for retrieving destinations: getDestinationOpOperands and getDestination. The former one returns the OpOperands of the op. The latter one is allowed to create new IR in case the op does not have destination operands.
This change is in preparation of explicitly capturing shared tensors in scf.foreach_thread. Inside of the foreach_thread body, all destinations must be expressed in terms of the block arguments of the foreach_thread body.
Note: getDestinationOpOperands is identical to DestinationStyleOpInterface::getOutputOperands, but we cannot use DestinationStyleOpInterface yet because it was not yet moved to mlir/Interfaces.