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; MIRNamer()37 MIRNamer() : MachineFunctionPass(ID) {} 38 getPassName() const39 StringRef getPassName() const override { 40 return "Rename virtual register operands"; 41 } 42 getAnalysisUsage(AnalysisUsage & AU) const43 void getAnalysisUsage(AnalysisUsage &AU) const override { 44 AU.setPreservesCFG(); 45 MachineFunctionPass::getAnalysisUsage(AU); 46 } 47 runOnMachineFunction(MachineFunction & MF)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, 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