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 changingAllUsesOfReg(const MachineRegisterInfo & MRI,Register Reg)18629db5d8SDaniel Sandersvoid GISelChangeObserver::changingAllUsesOfReg( 19*e95c0843SMatt Arsenault const MachineRegisterInfo &MRI, Register 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 finishedChangingAllUsesOfReg()26629db5d8SDaniel Sandersvoid GISelChangeObserver::finishedChangingAllUsesOfReg() { 27629db5d8SDaniel Sanders for (auto *ChangedMI : ChangingAllUsesOfReg) 28629db5d8SDaniel Sanders changedInstr(*ChangedMI); 2993e58d23SAmara Emerson ChangingAllUsesOfReg.clear(); 30629db5d8SDaniel Sanders } 31629db5d8SDaniel Sanders RAIIDelegateInstaller(MachineFunction & MF,MachineFunction::Delegate * Del)32500e3eadSAditya NandakumarRAIIDelegateInstaller::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 ~RAIIDelegateInstaller()40500e3eadSAditya NandakumarRAIIDelegateInstaller::~RAIIDelegateInstaller() { MF.resetDelegate(Delegate); } 41b91d9ec0SAditya Nandakumar RAIIMFObserverInstaller(MachineFunction & MF,GISelChangeObserver & Observer)42b91d9ec0SAditya NandakumarRAIIMFObserverInstaller::RAIIMFObserverInstaller(MachineFunction &MF, 43b91d9ec0SAditya Nandakumar GISelChangeObserver &Observer) 44b91d9ec0SAditya Nandakumar : MF(MF) { 45b91d9ec0SAditya Nandakumar MF.setObserver(&Observer); 46b91d9ec0SAditya Nandakumar } 47b91d9ec0SAditya Nandakumar ~RAIIMFObserverInstaller()48b91d9ec0SAditya NandakumarRAIIMFObserverInstaller::~RAIIMFObserverInstaller() { MF.setObserver(nullptr); } 49