brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · cbf8867 Raw
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