1 //===-- lib/CodeGen/GlobalISel/GISelChangeObserver.cpp --------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file constains common code to combine machine functions at generic 11 // level. 12 //===----------------------------------------------------------------------===// 13 14 #include "llvm/CodeGen/GlobalISel/GISelChangeObserver.h" 15 #include "llvm/CodeGen/MachineRegisterInfo.h" 16 17 using namespace llvm; 18 changingAllUsesOfReg(const MachineRegisterInfo & MRI,unsigned Reg)19void GISelChangeObserver::changingAllUsesOfReg( 20 const MachineRegisterInfo &MRI, unsigned Reg) { 21 for (auto &ChangingMI : MRI.use_instructions(Reg)) { 22 changingInstr(ChangingMI); 23 ChangingAllUsesOfReg.insert(&ChangingMI); 24 } 25 } 26 finishedChangingAllUsesOfReg()27void GISelChangeObserver::finishedChangingAllUsesOfReg() { 28 for (auto *ChangedMI : ChangingAllUsesOfReg) 29 changedInstr(*ChangedMI); 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