1 //===-- lib/CodeGen/GlobalISel/GISelChangeObserver.cpp --------------------===//
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
7 //===----------------------------------------------------------------------===//
9 // This file constains common code to combine machine functions at generic
11 //===----------------------------------------------------------------------===//
13 #include "llvm/CodeGen/GlobalISel/GISelChangeObserver.h"
14 #include "llvm/CodeGen/MachineRegisterInfo.h"
18 void GISelChangeObserver::changingAllUsesOfReg(
19 const MachineRegisterInfo
&MRI
, Register Reg
) {
20 for (auto &ChangingMI
: MRI
.use_instructions(Reg
)) {
21 changingInstr(ChangingMI
);
22 ChangingAllUsesOfReg
.insert(&ChangingMI
);
26 void GISelChangeObserver::finishedChangingAllUsesOfReg() {
27 for (auto *ChangedMI
: ChangingAllUsesOfReg
)
28 changedInstr(*ChangedMI
);
29 ChangingAllUsesOfReg
.clear();
32 RAIIDelegateInstaller::RAIIDelegateInstaller(MachineFunction
&MF
,
33 MachineFunction::Delegate
*Del
)
34 : MF(MF
), Delegate(Del
) {
35 // Register this as the delegate for handling insertions and deletions of
40 RAIIDelegateInstaller::~RAIIDelegateInstaller() { MF
.resetDelegate(Delegate
); }
42 RAIIMFObserverInstaller::RAIIMFObserverInstaller(MachineFunction
&MF
,
43 GISelChangeObserver
&Observer
)
45 MF
.setObserver(&Observer
);
48 RAIIMFObserverInstaller::~RAIIMFObserverInstaller() { MF
.setObserver(nullptr); }