1629db5d8SDaniel Sanders //===-- lib/CodeGen/GlobalISel/GISelChangeObserver.cpp --------------------===// 2629db5d8SDaniel Sanders // 32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6629db5d8SDaniel Sanders // 7629db5d8SDaniel Sanders //===----------------------------------------------------------------------===// 8629db5d8SDaniel Sanders // 9629db5d8SDaniel Sanders // This file constains common code to combine machine functions at generic 10629db5d8SDaniel Sanders // level. 11629db5d8SDaniel Sanders //===----------------------------------------------------------------------===// 12629db5d8SDaniel Sanders 13629db5d8SDaniel Sanders #include "llvm/CodeGen/GlobalISel/GISelChangeObserver.h" 14629db5d8SDaniel Sanders #include "llvm/CodeGen/MachineRegisterInfo.h" 15629db5d8SDaniel Sanders 16629db5d8SDaniel Sanders using namespace llvm; 17629db5d8SDaniel Sanders 18629db5d8SDaniel Sanders void GISelChangeObserver::changingAllUsesOfReg( 19629db5d8SDaniel Sanders const MachineRegisterInfo &MRI, unsigned Reg) { 20629db5d8SDaniel Sanders for (auto &ChangingMI : MRI.use_instructions(Reg)) { 21629db5d8SDaniel Sanders changingInstr(ChangingMI); 22629db5d8SDaniel Sanders ChangingAllUsesOfReg.insert(&ChangingMI); 23629db5d8SDaniel Sanders } 24629db5d8SDaniel Sanders } 25629db5d8SDaniel Sanders 26629db5d8SDaniel Sanders void GISelChangeObserver::finishedChangingAllUsesOfReg() { 27629db5d8SDaniel Sanders for (auto *ChangedMI : ChangingAllUsesOfReg) 28629db5d8SDaniel Sanders changedInstr(*ChangedMI); 29*93e58d23SAmara Emerson ChangingAllUsesOfReg.clear(); 30629db5d8SDaniel Sanders } 31629db5d8SDaniel Sanders 32500e3eadSAditya Nandakumar RAIIDelegateInstaller::RAIIDelegateInstaller(MachineFunction &MF, 33500e3eadSAditya Nandakumar MachineFunction::Delegate *Del) 34500e3eadSAditya Nandakumar : MF(MF), Delegate(Del) { 35500e3eadSAditya Nandakumar // Register this as the delegate for handling insertions and deletions of 36500e3eadSAditya Nandakumar // instructions. 37500e3eadSAditya Nandakumar MF.setDelegate(Del); 38500e3eadSAditya Nandakumar } 39500e3eadSAditya Nandakumar 40500e3eadSAditya Nandakumar RAIIDelegateInstaller::~RAIIDelegateInstaller() { MF.resetDelegate(Delegate); } 41