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 16 using namespace llvm; 17 changingAllUsesOfReg(const MachineRegisterInfo & MRI,Register Reg)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 finishedChangingAllUsesOfReg()26void GISelChangeObserver::finishedChangingAllUsesOfReg() { 27 for (auto *ChangedMI : ChangingAllUsesOfReg) 28 changedInstr(*ChangedMI); 29 ChangingAllUsesOfReg.clear(); 30 } 31 RAIIDelegateInstaller(MachineFunction & MF,MachineFunction::Delegate * Del)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 ~RAIIDelegateInstaller()40RAIIDelegateInstaller::~RAIIDelegateInstaller() { MF.resetDelegate(Delegate); } 41 RAIIMFObserverInstaller(MachineFunction & MF,GISelChangeObserver & Observer)42RAIIMFObserverInstaller::RAIIMFObserverInstaller(MachineFunction &MF, 43 GISelChangeObserver &Observer) 44 : MF(MF) { 45 MF.setObserver(&Observer); 46 } 47 ~RAIIMFObserverInstaller()48RAIIMFObserverInstaller::~RAIIMFObserverInstaller() { MF.setObserver(nullptr); } 49