blob: 23ec45edb3efd812a2b54fdc1323ed8254751de7 [file] [log] [blame]
Chris Lattner20abc412008-08-23 06:07:02 +00001//===- InstructionNamer.cpp - Give anonymous instructions names -----------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This is a little utility pass that gives instructions names, this is mostly
11// useful when diffing the effect of an optimization because deleting an
12// unnamed instruction can change all other instruction numbering, making the
13// diff very noisy.
14//
15//===----------------------------------------------------------------------===//
16
Chandler Carruth9fb823b2013-01-02 11:36:10 +000017#include "llvm/IR/Function.h"
18#include "llvm/IR/Type.h"
Chris Lattner20abc412008-08-23 06:07:02 +000019#include "llvm/Pass.h"
Chandler Carruth6bda14b2017-06-06 11:49:48 +000020#include "llvm/Transforms/Scalar.h"
Chris Lattner20abc412008-08-23 06:07:02 +000021using namespace llvm;
22
23namespace {
24 struct InstNamer : public FunctionPass {
25 static char ID; // Pass identification, replacement for typeid
Owen Anderson6c18d1a2010-10-19 17:21:58 +000026 InstNamer() : FunctionPass(ID) {
27 initializeInstNamerPass(*PassRegistry::getPassRegistry());
28 }
Sanjoy Das7be961b2017-05-08 23:18:36 +000029
Craig Topper3e4c6972014-03-05 09:10:37 +000030 void getAnalysisUsage(AnalysisUsage &Info) const override {
Devang Patel5a5ab732008-11-06 01:00:16 +000031 Info.setPreservesAll();
32 }
33
Craig Topper3e4c6972014-03-05 09:10:37 +000034 bool runOnFunction(Function &F) override {
Sanjoy Das76bbdd12017-05-08 23:18:43 +000035 for (auto &Arg : F.args())
36 if (!Arg.hasName())
37 Arg.setName("arg");
Devang Patel38642e52008-11-20 19:50:17 +000038
Benjamin Kramer135f7352016-06-26 12:28:59 +000039 for (BasicBlock &BB : F) {
40 if (!BB.hasName())
41 BB.setName("bb");
42
43 for (Instruction &I : BB)
44 if (!I.hasName() && !I.getType()->isVoidTy())
45 I.setName("tmp");
Chris Lattnerc1c64042008-12-18 00:33:11 +000046 }
Chris Lattner20abc412008-08-23 06:07:02 +000047 return true;
48 }
49 };
Sanjoy Das7be961b2017-05-08 23:18:36 +000050
Chris Lattner20abc412008-08-23 06:07:02 +000051 char InstNamer::ID = 0;
Alexander Kornienkof00654e2015-06-23 09:49:53 +000052}
Chris Lattner20abc412008-08-23 06:07:02 +000053
Sanjoy Das7be961b2017-05-08 23:18:36 +000054INITIALIZE_PASS(InstNamer, "instnamer",
Owen Andersondf7a4f22010-10-07 22:25:06 +000055 "Assign names to anonymous instructions", false, false)
Owen Andersona7aed182010-08-06 18:33:48 +000056char &llvm::InstructionNamerID = InstNamer::ID;
Chris Lattner20abc412008-08-23 06:07:02 +000057//===----------------------------------------------------------------------===//
58//
59// InstructionNamer - Give any unnamed non-void instructions "tmp" names.
60//
61FunctionPass *llvm::createInstructionNamerPass() {
62 return new InstNamer();
63}