brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · 836d54f Raw
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