1*b5893f02SDimitry Andric //===-- lib/CodeGen/GlobalISel/GISelChangeObserver.cpp --------------------===// 2*b5893f02SDimitry Andric // 3*b5893f02SDimitry Andric // The LLVM Compiler Infrastructure 4*b5893f02SDimitry Andric // 5*b5893f02SDimitry Andric // This file is distributed under the University of Illinois Open Source 6*b5893f02SDimitry Andric // License. See LICENSE.TXT for details. 7*b5893f02SDimitry Andric // 8*b5893f02SDimitry Andric //===----------------------------------------------------------------------===// 9*b5893f02SDimitry Andric // 10*b5893f02SDimitry Andric // This file constains common code to combine machine functions at generic 11*b5893f02SDimitry Andric // level. 12*b5893f02SDimitry Andric //===----------------------------------------------------------------------===// 13*b5893f02SDimitry Andric 14*b5893f02SDimitry Andric #include "llvm/CodeGen/GlobalISel/GISelChangeObserver.h" 15*b5893f02SDimitry Andric #include "llvm/CodeGen/MachineRegisterInfo.h" 16*b5893f02SDimitry Andric 17*b5893f02SDimitry Andric using namespace llvm; 18*b5893f02SDimitry Andric changingAllUsesOfReg(const MachineRegisterInfo & MRI,unsigned Reg)19*b5893f02SDimitry Andricvoid GISelChangeObserver::changingAllUsesOfReg( 20*b5893f02SDimitry Andric const MachineRegisterInfo &MRI, unsigned Reg) { 21*b5893f02SDimitry Andric for (auto &ChangingMI : MRI.use_instructions(Reg)) { 22*b5893f02SDimitry Andric changingInstr(ChangingMI); 23*b5893f02SDimitry Andric ChangingAllUsesOfReg.insert(&ChangingMI); 24*b5893f02SDimitry Andric } 25*b5893f02SDimitry Andric } 26*b5893f02SDimitry Andric finishedChangingAllUsesOfReg()27*b5893f02SDimitry Andricvoid GISelChangeObserver::finishedChangingAllUsesOfReg() { 28*b5893f02SDimitry Andric for (auto *ChangedMI : ChangingAllUsesOfReg) 29*b5893f02SDimitry Andric changedInstr(*ChangedMI); 30*b5893f02SDimitry Andric } 31*b5893f02SDimitry Andric RAIIDelegateInstaller(MachineFunction & MF,MachineFunction::Delegate * Del)32*b5893f02SDimitry AndricRAIIDelegateInstaller::RAIIDelegateInstaller(MachineFunction &MF, 33*b5893f02SDimitry Andric MachineFunction::Delegate *Del) 34*b5893f02SDimitry Andric : MF(MF), Delegate(Del) { 35*b5893f02SDimitry Andric // Register this as the delegate for handling insertions and deletions of 36*b5893f02SDimitry Andric // instructions. 37*b5893f02SDimitry Andric MF.setDelegate(Del); 38*b5893f02SDimitry Andric } 39*b5893f02SDimitry Andric ~RAIIDelegateInstaller()40*b5893f02SDimitry AndricRAIIDelegateInstaller::~RAIIDelegateInstaller() { MF.resetDelegate(Delegate); } 41