LLVM 19.0.0git
MIRNamerPass.cpp
Go to the documentation of this file.
1//===----------------------- MIRNamer.cpp - MIR Namer ---------------------===//
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// The purpose of this pass is to rename virtual register operands with the goal
10// of making it easier to author easier to read tests for MIR. This pass reuses
11// the vreg renamer used by MIRCanonicalizerPass.
12//
13// Basic Usage:
14//
15// llc -o - -run-pass mir-namer example.mir
16//
17//===----------------------------------------------------------------------===//
18
19#include "MIRVRegNamerUtils.h"
23
24using namespace llvm;
25
26namespace llvm {
27extern char &MIRNamerID;
28} // namespace llvm
29
30#define DEBUG_TYPE "mir-namer"
31
32namespace {
33
34class MIRNamer : public MachineFunctionPass {
35public:
36 static char ID;
37 MIRNamer() : MachineFunctionPass(ID) {}
38
39 StringRef getPassName() const override {
40 return "Rename virtual register operands";
41 }
42
43 void getAnalysisUsage(AnalysisUsage &AU) const override {
44 AU.setPreservesCFG();
46 }
47
48 bool runOnMachineFunction(MachineFunction &MF) override {
49 bool Changed = false;
50
51 if (MF.empty())
52 return Changed;
53
54 VRegRenamer Renamer(MF.getRegInfo());
55
56 unsigned BBIndex = 0;
58 for (auto &MBB : RPOT)
59 Changed |= Renamer.renameVRegs(MBB, BBIndex++);
60
61 return Changed;
62 }
63};
64
65} // end anonymous namespace
66
67char MIRNamer::ID;
68
69char &llvm::MIRNamerID = MIRNamer::ID;
70
71INITIALIZE_PASS_BEGIN(MIRNamer, "mir-namer", "Rename Register Operands", false,
72 false)
73
74INITIALIZE_PASS_END(MIRNamer, "mir-namer", "Rename Register Operands", false,
75 false)
MachineBasicBlock & MBB
mir Rename Register Operands
mir namer
#define INITIALIZE_PASS_END(passName, arg, name, cfg, analysis)
Definition: PassSupport.h:59
#define INITIALIZE_PASS_BEGIN(passName, arg, name, cfg, analysis)
Definition: PassSupport.h:52
This file builds on the ADT/GraphTraits.h file to build a generic graph post order iterator.
Represent the analysis usage information of a pass.
void setPreservesCFG()
This function should be called by the pass, iff they do not:
Definition: Pass.cpp:269
MachineFunctionPass - This class adapts the FunctionPass interface to allow convenient creation of pa...
void getAnalysisUsage(AnalysisUsage &AU) const override
getAnalysisUsage - Subclasses that override getAnalysisUsage must call this.
virtual bool runOnMachineFunction(MachineFunction &MF)=0
runOnMachineFunction - This method must be overloaded to perform the desired machine code transformat...
MachineRegisterInfo & getRegInfo()
getRegInfo - Return information about the registers currently in use.
virtual StringRef getPassName() const
getPassName - Return a nice clean name for a pass.
Definition: Pass.cpp:81
Wrapper class representing virtual and physical registers.
Definition: Register.h:19
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:50
VRegRenamer - This class is used for renaming vregs in a machine basic block according to semantics o...
bool renameVRegs(MachineBasicBlock *MBB, unsigned BBNum)
Same as the above, but sets a BBNum depending on BB traversal that will be used as prefix for the vre...
unsigned ID
LLVM IR allows to use arbitrary numbers as calling convention identifiers.
Definition: CallingConv.h:24
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
char & MIRNamerID