message: [XLA] HloPassFix should implement RunOnModuleGroup
  The default implementation just forwards to the underlying pass' RunOnModuleGroup, which means we silently run the underlying pass once, instead of running it to a fixed point.
diff: @@ -19,6 +19,7 @@ limitations under the License.
  #include <algorithm>
  #include "tensorflow/compiler/xla/service/hlo_module.h"
  +#include "tensorflow/compiler/xla/service/hlo_module_group.h"
  #include "tensorflow/compiler/xla/status_macros.h"
  #include "tensorflow/compiler/xla/statusor.h"
  #include "tensorflow/compiler/xla/types.h"
  @@ -39,9 +40,36 @@ class HloPassFix : public Pass {
  int64 iteration_count = 0;
  int64 limit =
  std::max(static_cast<int64>(1000), module->instruction_count());
  + VLOG(3) << "Running HloPassFix.";
  while (changed_this_iteration) {
  TF_ASSIGN_OR_RETURN(changed_this_iteration, Pass::Run(module));
  changed |= changed_this_iteration;
  + VLOG(3) << "changed_this_iteration: " << changed_this_iteration;
  + ++iteration_count;
  + if (iteration_count == limit) {
  + LOG(ERROR)
  + << "Unexpectedly high number of iterations in HLO passes ("
  + << iteration_count
  + << ")\nIf compilation hangs here, please file a bug with XLA.";
  + }
  + }
  + return changed;
  + }
  +
  + StatusOr<bool> RunOnModuleGroup(HloModuleGroup* module_group) override {
  + bool changed = false;
  + bool changed_this_iteration = true;
  + int64 iteration_count = 0;
  + int64 limit = 1000;
  + for (const HloModule* module : module_group->modules()) {
  + limit = std::max<int64>(limit, module->instruction_count());
  + }
  + VLOG(3) << "Running HloPassFix.";
  + while (changed_this_iteration) {
  + TF_ASSIGN_OR_RETURN(changed_this_iteration,
  + Pass::RunOnModuleGroup(module_group));
  + changed |= changed_this_iteration;
  + VLOG(3) << "changed_this_iteration: " << changed_this_iteration;
  ++iteration_count;
  if (iteration_count == limit) {
  LOG(ERROR)
  