LLVM 20.0.0git
GISelChangeObserver.cpp
Go to the documentation of this file.
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
15
16using namespace llvm;
17
19 const MachineRegisterInfo &MRI, Register Reg) {
20 for (auto &ChangingMI : MRI.use_instructions(Reg)) {
21 changingInstr(ChangingMI);
22 ChangingAllUsesOfReg.insert(&ChangingMI);
23 }
24}
25
27 for (auto *ChangedMI : ChangingAllUsesOfReg)
28 changedInstr(*ChangedMI);
29 ChangingAllUsesOfReg.clear();
30}
31
34 : MF(MF), Delegate(Del) {
35 // Register this as the delegate for handling insertions and deletions of
36 // instructions.
37 MF.setDelegate(Del);
38}
39
41
43 GISelChangeObserver &Observer)
44 : MF(MF) {
45 MF.setObserver(&Observer);
46}
47
49
51 GISelObserverWrapper &Observers, GISelChangeObserver &TemporaryObserver)
52 : Observers(Observers), TemporaryObserver(TemporaryObserver) {
53 Observers.addObserver(&TemporaryObserver);
54}
55
57 Observers.removeObserver(&TemporaryObserver);
58}
unsigned const MachineRegisterInfo * MRI
This contains common code to allow clients to notify changes to machine instr.
Abstract class that contains various methods for clients to notify about changes.
virtual void changingInstr(MachineInstr &MI)=0
This instruction is about to be mutated in some way.
void finishedChangingAllUsesOfReg()
All instructions reported as changing by changingAllUsesOfReg() have finished being changed.
virtual void changedInstr(MachineInstr &MI)=0
This instruction was mutated in some way.
void changingAllUsesOfReg(const MachineRegisterInfo &MRI, Register Reg)
All the instructions using the given register are being changed.
Simple wrapper observer that takes several observers, and calls each one for each event.
void removeObserver(GISelChangeObserver *O)
void addObserver(GISelChangeObserver *O)
void setObserver(GISelChangeObserver *O)
void resetDelegate(Delegate *delegate)
Reset the currently registered delegate - otherwise assert.
void setDelegate(Delegate *delegate)
Set the delegate.
MachineRegisterInfo - Keep track of information for virtual and physical registers,...
RAIIDelegateInstaller(MachineFunction &MF, MachineFunction::Delegate *Del)
RAIIMFObserverInstaller(MachineFunction &MF, GISelChangeObserver &Observer)
RAIITemporaryObserverInstaller(GISelObserverWrapper &Observers, GISelChangeObserver &TemporaryObserver)
Wrapper class representing virtual and physical registers.
Definition: Register.h:19
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18