1 //===-- lib/CodeGen/GlobalISel/GISelChangeObserver.cpp --------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // This file constains common code to combine machine functions at generic 10 // level. 11 //===----------------------------------------------------------------------===// 12 13 #include "llvm/CodeGen/GlobalISel/GISelChangeObserver.h" 14 #include "llvm/CodeGen/MachineRegisterInfo.h" 15 16 using namespace llvm; 17 18 void GISelChangeObserver::changingAllUsesOfReg( 19 const MachineRegisterInfo &MRI, unsigned Reg) { 20 for (auto &ChangingMI : MRI.use_instructions(Reg)) { 21 changingInstr(ChangingMI); 22 ChangingAllUsesOfReg.insert(&ChangingMI); 23 } 24 } 25 26 void GISelChangeObserver::finishedChangingAllUsesOfReg() { 27 for (auto *ChangedMI : ChangingAllUsesOfReg) 28 changedInstr(*ChangedMI); 29 } 30 31 RAIIDelegateInstaller::RAIIDelegateInstaller(MachineFunction &MF, 32 MachineFunction::Delegate *Del) 33 : MF(MF), Delegate(Del) { 34 // Register this as the delegate for handling insertions and deletions of 35 // instructions. 36 MF.setDelegate(Del); 37 } 38 39 RAIIDelegateInstaller::~RAIIDelegateInstaller() { MF.resetDelegate(Delegate); } 40