1//===-- lib/CodeGen/GlobalISel/GISelChangeObserver.cpp --------------------===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8// 9// This file constains common code to combine machine functions at generic 10// level. 11//===----------------------------------------------------------------------===// 12 13#include "llvm/CodeGen/GlobalISel/GISelChangeObserver.h" 14#include "llvm/CodeGen/MachineRegisterInfo.h" 15 16using namespace llvm; 17 18void GISelChangeObserver::changingAllUsesOfReg( 19 const MachineRegisterInfo &MRI, Register Reg) { 20 for (auto &ChangingMI : MRI.use_instructions(Reg)) { 21 changingInstr(ChangingMI); 22 ChangingAllUsesOfReg.insert(&ChangingMI); 23 } 24} 25 26void GISelChangeObserver::finishedChangingAllUsesOfReg() { 27 for (auto *ChangedMI : ChangingAllUsesOfReg) 28 changedInstr(*ChangedMI); 29 ChangingAllUsesOfReg.clear(); 30} 31 32RAIIDelegateInstaller::RAIIDelegateInstaller(MachineFunction &MF, 33 MachineFunction::Delegate *Del) 34 : MF(MF), Delegate(Del) { 35 // Register this as the delegate for handling insertions and deletions of 36 // instructions. 37 MF.setDelegate(Del); 38} 39 40RAIIDelegateInstaller::~RAIIDelegateInstaller() { MF.resetDelegate(Delegate); } 41 42RAIIMFObserverInstaller::RAIIMFObserverInstaller(MachineFunction &MF, 43 GISelChangeObserver &Observer) 44 : MF(MF) { 45 MF.setObserver(&Observer); 46} 47 48RAIIMFObserverInstaller::~RAIIMFObserverInstaller() { MF.setObserver(nullptr); } 49