59 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8//9// This file constains common code to combine machine functions at generic10// level.11//===----------------------------------------------------------------------===//12 13#include "llvm/CodeGen/GlobalISel/GISelChangeObserver.h"14#include "llvm/CodeGen/MachineRegisterInfo.h"15 16using namespace llvm;17 18void GISelChangeObserver::changingAllUsesOfReg(19 const MachineRegisterInfo &MRI, Register Reg) {20 for (auto &ChangingMI : MRI.use_instructions(Reg)) {21 changingInstr(ChangingMI);22 ChangingAllUsesOfReg.insert(&ChangingMI);23 }24}25 26void GISelChangeObserver::finishedChangingAllUsesOfReg() {27 for (auto *ChangedMI : ChangingAllUsesOfReg)28 changedInstr(*ChangedMI);29 ChangingAllUsesOfReg.clear();30}31 32RAIIDelegateInstaller::RAIIDelegateInstaller(MachineFunction &MF,33 MachineFunction::Delegate *Del)34 : MF(MF), Delegate(Del) {35 // Register this as the delegate for handling insertions and deletions of36 // instructions.37 MF.setDelegate(Del);38}39 40RAIIDelegateInstaller::~RAIIDelegateInstaller() { MF.resetDelegate(Delegate); }41 42RAIIMFObserverInstaller::RAIIMFObserverInstaller(MachineFunction &MF,43 GISelChangeObserver &Observer)44 : MF(MF) {45 MF.setObserver(&Observer);46}47 48RAIIMFObserverInstaller::~RAIIMFObserverInstaller() { MF.setObserver(nullptr); }49 50RAIITemporaryObserverInstaller::RAIITemporaryObserverInstaller(51 GISelObserverWrapper &Observers, GISelChangeObserver &TemporaryObserver)52 : Observers(Observers), TemporaryObserver(TemporaryObserver) {53 Observers.addObserver(&TemporaryObserver);54}55 56RAIITemporaryObserverInstaller::~RAIITemporaryObserverInstaller() {57 Observers.removeObserver(&TemporaryObserver);58}59