1629db5d8SDaniel Sanders //===-- lib/CodeGen/GlobalISel/GISelChangeObserver.cpp --------------------===// 2629db5d8SDaniel Sanders // 3629db5d8SDaniel Sanders // The LLVM Compiler Infrastructure 4629db5d8SDaniel Sanders // 5629db5d8SDaniel Sanders // This file is distributed under the University of Illinois Open Source 6629db5d8SDaniel Sanders // License. See LICENSE.TXT for details. 7629db5d8SDaniel Sanders // 8629db5d8SDaniel Sanders //===----------------------------------------------------------------------===// 9629db5d8SDaniel Sanders // 10629db5d8SDaniel Sanders // This file constains common code to combine machine functions at generic 11629db5d8SDaniel Sanders // level. 12629db5d8SDaniel Sanders //===----------------------------------------------------------------------===// 13629db5d8SDaniel Sanders 14629db5d8SDaniel Sanders #include "llvm/CodeGen/GlobalISel/GISelChangeObserver.h" 15629db5d8SDaniel Sanders #include "llvm/CodeGen/MachineRegisterInfo.h" 16629db5d8SDaniel Sanders 17629db5d8SDaniel Sanders using namespace llvm; 18629db5d8SDaniel Sanders 19629db5d8SDaniel Sanders void GISelChangeObserver::changingAllUsesOfReg( 20629db5d8SDaniel Sanders const MachineRegisterInfo &MRI, unsigned Reg) { 21629db5d8SDaniel Sanders for (auto &ChangingMI : MRI.use_instructions(Reg)) { 22629db5d8SDaniel Sanders changingInstr(ChangingMI); 23629db5d8SDaniel Sanders ChangingAllUsesOfReg.insert(&ChangingMI); 24629db5d8SDaniel Sanders } 25629db5d8SDaniel Sanders } 26629db5d8SDaniel Sanders 27629db5d8SDaniel Sanders void GISelChangeObserver::finishedChangingAllUsesOfReg() { 28629db5d8SDaniel Sanders for (auto *ChangedMI : ChangingAllUsesOfReg) 29629db5d8SDaniel Sanders changedInstr(*ChangedMI); 30629db5d8SDaniel Sanders } 31629db5d8SDaniel Sanders 32*500e3eadSAditya Nandakumar RAIIDelegateInstaller::RAIIDelegateInstaller(MachineFunction &MF, 33*500e3eadSAditya Nandakumar MachineFunction::Delegate *Del) 34*500e3eadSAditya Nandakumar : MF(MF), Delegate(Del) { 35*500e3eadSAditya Nandakumar // Register this as the delegate for handling insertions and deletions of 36*500e3eadSAditya Nandakumar // instructions. 37*500e3eadSAditya Nandakumar MF.setDelegate(Del); 38*500e3eadSAditya Nandakumar } 39*500e3eadSAditya Nandakumar 40*500e3eadSAditya Nandakumar RAIIDelegateInstaller::~RAIIDelegateInstaller() { MF.resetDelegate(Delegate); } 41