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" |
20 | #include "llvm/ADT/PostOrderIterator.h" |
21 | #include "llvm/CodeGen/MachineFunctionPass.h" |
22 | #include "llvm/InitializePasses.h" |
23 | |
24 | using namespace llvm; |
25 | |
26 | namespace llvm { |
27 | extern char &MIRNamerID; |
28 | } // namespace llvm |
29 | |
30 | #define DEBUG_TYPE "mir-namer" |
31 | |
32 | namespace { |
33 | |
34 | class MIRNamer : public MachineFunctionPass { |
35 | public: |
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(); |
45 | MachineFunctionPass::getAnalysisUsage(AU); |
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; |
57 | ReversePostOrderTraversal<MachineBasicBlock *> RPOT(&*MF.begin()); |
58 | for (auto &MBB : RPOT) |
59 | Changed |= Renamer.renameVRegs(MBB, BBNum: BBIndex++); |
60 | |
61 | return Changed; |
62 | } |
63 | }; |
64 | |
65 | } // end anonymous namespace |
66 | |
67 | char MIRNamer::ID; |
68 | |
69 | char &llvm::MIRNamerID = MIRNamer::ID; |
70 | |
71 | INITIALIZE_PASS_BEGIN(MIRNamer, "mir-namer" , "Rename Register Operands" , false, |
72 | false) |
73 | |
74 | INITIALIZE_PASS_END(MIRNamer, "mir-namer" , "Rename Register Operands" , false, |
75 | false) |
76 | |