LLVM  9.0.0svn
InstructionNamer.cpp
Go to the documentation of this file.
1 //===- InstructionNamer.cpp - Give anonymous instructions names -----------===//
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 // This is a little utility pass that gives instructions names, this is mostly
10 // useful when diffing the effect of an optimization because deleting an
11 // unnamed instruction can change all other instruction numbering, making the
12 // diff very noisy.
13 //
14 //===----------------------------------------------------------------------===//
15 
16 #include "llvm/IR/Function.h"
17 #include "llvm/IR/Type.h"
18 #include "llvm/Pass.h"
19 #include "llvm/Transforms/Utils.h"
20 using namespace llvm;
21 
22 namespace {
23  struct InstNamer : public FunctionPass {
24  static char ID; // Pass identification, replacement for typeid
25  InstNamer() : FunctionPass(ID) {
27  }
28 
29  void getAnalysisUsage(AnalysisUsage &Info) const override {
30  Info.setPreservesAll();
31  }
32 
33  bool runOnFunction(Function &F) override {
34  for (auto &Arg : F.args())
35  if (!Arg.hasName())
36  Arg.setName("arg");
37 
38  for (BasicBlock &BB : F) {
39  if (!BB.hasName())
40  BB.setName("bb");
41 
42  for (Instruction &I : BB)
43  if (!I.hasName() && !I.getType()->isVoidTy())
44  I.setName("tmp");
45  }
46  return true;
47  }
48  };
49 
50  char InstNamer::ID = 0;
51 }
52 
53 INITIALIZE_PASS(InstNamer, "instnamer",
54  "Assign names to anonymous instructions", false, false)
55 char &llvm::InstructionNamerID = InstNamer::ID;
56 //===----------------------------------------------------------------------===//
57 //
58 // InstructionNamer - Give any unnamed non-void instructions "tmp" names.
59 //
61  return new InstNamer();
62 }
static PassRegistry * getPassRegistry()
getPassRegistry - Access the global registry object, which is automatically initialized at applicatio...
This class represents lattice values for constants.
Definition: AllocatorList.h:23
F(f)
Analysis containing CSE Info
Definition: CSEInfo.cpp:20
static bool runOnFunction(Function &F, bool PostInlining)
LLVM Basic Block Representation.
Definition: BasicBlock.h:57
Represent the analysis usage information of a pass.
FunctionPass class - This class is used to implement most global optimizations.
Definition: Pass.h:284
amdgpu Simplify well known AMD library false FunctionCallee Value * Arg
#define INITIALIZE_PASS(passName, arg, name, cfg, analysis)
Definition: PassSupport.h:33
void setPreservesAll()
Set by analyses that do not transform their input at all.
void initializeInstNamerPass(PassRegistry &)
#define I(x, y, z)
Definition: MD5.cpp:58
char & InstructionNamerID
FunctionPass * createInstructionNamerPass()
iterator_range< arg_iterator > args()
Definition: Function.h:688