//===-- lib/CodeGen/GlobalISel/GISelChangeObserver.cpp --------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// This file constains common code to combine machine functions at generic
// level.
//===----------------------------------------------------------------------===//

#include "llvm/CodeGen/GlobalISel/GISelChangeObserver.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"

using namespace llvm;

void GISelChangeObserver::changingAllUsesOfReg(
    const MachineRegisterInfo &MRI, unsigned Reg) {
  for (auto &ChangingMI : MRI.use_instructions(Reg)) {
    changingInstr(ChangingMI);
    ChangingAllUsesOfReg.insert(&ChangingMI);
  }
}

void GISelChangeObserver::finishedChangingAllUsesOfReg() {
  for (auto *ChangedMI : ChangingAllUsesOfReg)
    changedInstr(*ChangedMI);
  ChangingAllUsesOfReg.clear();
}

RAIIDelegateInstaller::RAIIDelegateInstaller(MachineFunction &MF,
                                             MachineFunction::Delegate *Del)
    : MF(MF), Delegate(Del) {
  // Register this as the delegate for handling insertions and deletions of
  // instructions.
  MF.setDelegate(Del);
}

RAIIDelegateInstaller::~RAIIDelegateInstaller() { MF.resetDelegate(Delegate); }
