65 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8//9// The purpose of this pass is to rename virtual register operands with the goal10// of making it easier to author easier to read tests for MIR. This pass reuses11// the vreg renamer used by MIRCanonicalizerPass.12//13// Basic Usage:14//15// llc -o - -run-pass mir-namer example.mir16//17//===----------------------------------------------------------------------===//18 19#include "MIRVRegNamerUtils.h"20#include "llvm/ADT/PostOrderIterator.h"21#include "llvm/CodeGen/MachineFunctionPass.h"22#include "llvm/InitializePasses.h"23 24using namespace llvm;25 26#define DEBUG_TYPE "mir-namer"27 28namespace {29 30class MIRNamer : public MachineFunctionPass {31public:32 static char ID;33 MIRNamer() : MachineFunctionPass(ID) {}34 35 StringRef getPassName() const override {36 return "Rename virtual register operands";37 }38 39 void getAnalysisUsage(AnalysisUsage &AU) const override {40 AU.setPreservesCFG();41 MachineFunctionPass::getAnalysisUsage(AU);42 }43 44 bool runOnMachineFunction(MachineFunction &MF) override {45 bool Changed = false;46 47 if (MF.empty())48 return Changed;49 50 VRegRenamer Renamer(MF.getRegInfo());51 52 ReversePostOrderTraversal<MachineBasicBlock *> RPOT(&*MF.begin());53 for (const auto &[BBIndex, MBB] : enumerate(RPOT))54 Changed |= Renamer.renameVRegs(MBB, BBIndex);55 56 return Changed;57 }58};59 60} // end anonymous namespace61 62char MIRNamer::ID;63 64INITIALIZE_PASS(MIRNamer, "mir-namer", "Rename Register Operands", false, false)65