Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2056)

Side by Side Diff: lib/Bitcode/NaCl/Analysis/NaClBitcodeCodeDist.cpp

Issue 939073008: Rebased PNaCl localmods in LLVM to 223109 (Closed)
Patch Set: undo localmod Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 //===-- NaClBitcodeCodeDist.cpp -------------------------------------------===//
2 // Implements distribution maps for record codes within a PNaCl bitcode
3 // file.
4 //
5 // The LLVM Compiler Infrastructure
6 //
7 // This file is distributed under the University of Illinois Open Source
8 // License. See LICENSE.TXT for details.
9 //
10 //===----------------------------------------------------------------------===//
11
12 #include "llvm/Bitcode/NaCl/NaClBitcodeCodeDist.h"
13 #include "llvm/Bitcode/NaCl/NaClLLVMBitCodes.h"
14 #include "llvm/Support/raw_ostream.h"
15
16 using namespace llvm;
17
18 /// GetCodeName - Return a symbolic code name if known, otherwise return
19 /// null.
20 static const char *GetCodeName(unsigned CodeID, unsigned BlockID) {
21 // Standard blocks for all bitcode files.
22 if (BlockID < naclbitc::FIRST_APPLICATION_BLOCKID) {
23 if (BlockID == naclbitc::BLOCKINFO_BLOCK_ID) {
24 switch (CodeID) {
25 default: return 0;
26 case naclbitc::BLOCKINFO_CODE_SETBID: return "SETBID";
27 }
28 }
29 return 0;
30 }
31
32 switch (BlockID) {
33 default: return 0;
34 case naclbitc::MODULE_BLOCK_ID:
35 switch (CodeID) {
36 default: return 0;
37 case naclbitc::MODULE_CODE_VERSION: return "VERSION";
38 case naclbitc::MODULE_CODE_TRIPLE: return "TRIPLE";
39 case naclbitc::MODULE_CODE_DATALAYOUT: return "DATALAYOUT";
40 case naclbitc::MODULE_CODE_ASM: return "ASM";
41 case naclbitc::MODULE_CODE_SECTIONNAME: return "SECTIONNAME";
42 case naclbitc::MODULE_CODE_DEPLIB: return "DEPLIB"; // FIXME: Remove in 4.0
43 case naclbitc::MODULE_CODE_GLOBALVAR: return "GLOBALVAR";
44 case naclbitc::MODULE_CODE_FUNCTION: return "FUNCTION";
45 case naclbitc::MODULE_CODE_ALIAS: return "ALIAS";
46 case naclbitc::MODULE_CODE_PURGEVALS: return "PURGEVALS";
47 case naclbitc::MODULE_CODE_GCNAME: return "GCNAME";
48 }
49 case naclbitc::PARAMATTR_BLOCK_ID:
50 switch (CodeID) {
51 default: return 0;
52 case naclbitc::PARAMATTR_CODE_ENTRY_OLD: return "ENTRY";
53 case naclbitc::PARAMATTR_CODE_ENTRY: return "ENTRY";
54 case naclbitc::PARAMATTR_GRP_CODE_ENTRY: return "ENTRY";
55 }
56 case naclbitc::TYPE_BLOCK_ID_NEW:
57 switch (CodeID) {
58 default: return 0;
59 case naclbitc::TYPE_CODE_NUMENTRY: return "NUMENTRY";
60 case naclbitc::TYPE_CODE_VOID: return "VOID";
61 case naclbitc::TYPE_CODE_FLOAT: return "FLOAT";
62 case naclbitc::TYPE_CODE_DOUBLE: return "DOUBLE";
63 case naclbitc::TYPE_CODE_LABEL: return "LABEL";
64 case naclbitc::TYPE_CODE_OPAQUE: return "OPAQUE";
65 case naclbitc::TYPE_CODE_INTEGER: return "INTEGER";
66 case naclbitc::TYPE_CODE_POINTER: return "POINTER";
67 case naclbitc::TYPE_CODE_ARRAY: return "ARRAY";
68 case naclbitc::TYPE_CODE_VECTOR: return "VECTOR";
69 case naclbitc::TYPE_CODE_X86_FP80: return "X86_FP80";
70 case naclbitc::TYPE_CODE_FP128: return "FP128";
71 case naclbitc::TYPE_CODE_PPC_FP128: return "PPC_FP128";
72 case naclbitc::TYPE_CODE_METADATA: return "METADATA";
73 case naclbitc::TYPE_CODE_STRUCT_ANON: return "STRUCT_ANON";
74 case naclbitc::TYPE_CODE_STRUCT_NAME: return "STRUCT_NAME";
75 case naclbitc::TYPE_CODE_STRUCT_NAMED: return "STRUCT_NAMED";
76 case naclbitc::TYPE_CODE_FUNCTION: return "FUNCTION";
77 }
78
79 case naclbitc::CONSTANTS_BLOCK_ID:
80 switch (CodeID) {
81 default: return 0;
82 case naclbitc::CST_CODE_SETTYPE: return "SETTYPE";
83 case naclbitc::CST_CODE_NULL: return "NULL";
84 case naclbitc::CST_CODE_UNDEF: return "UNDEF";
85 case naclbitc::CST_CODE_INTEGER: return "INTEGER";
86 case naclbitc::CST_CODE_WIDE_INTEGER: return "WIDE_INTEGER";
87 case naclbitc::CST_CODE_FLOAT: return "FLOAT";
88 case naclbitc::CST_CODE_AGGREGATE: return "AGGREGATE";
89 case naclbitc::CST_CODE_STRING: return "STRING";
90 case naclbitc::CST_CODE_CSTRING: return "CSTRING";
91 case naclbitc::CST_CODE_CE_BINOP: return "CE_BINOP";
92 case naclbitc::CST_CODE_CE_CAST: return "CE_CAST";
93 case naclbitc::CST_CODE_CE_GEP: return "CE_GEP";
94 case naclbitc::CST_CODE_CE_INBOUNDS_GEP: return "CE_INBOUNDS_GEP";
95 case naclbitc::CST_CODE_CE_SELECT: return "CE_SELECT";
96 case naclbitc::CST_CODE_CE_EXTRACTELT: return "CE_EXTRACTELT";
97 case naclbitc::CST_CODE_CE_INSERTELT: return "CE_INSERTELT";
98 case naclbitc::CST_CODE_CE_SHUFFLEVEC: return "CE_SHUFFLEVEC";
99 case naclbitc::CST_CODE_CE_CMP: return "CE_CMP";
100 case naclbitc::CST_CODE_INLINEASM: return "INLINEASM";
101 case naclbitc::CST_CODE_CE_SHUFVEC_EX: return "CE_SHUFVEC_EX";
102 case naclbitc::CST_CODE_BLOCKADDRESS: return "CST_CODE_BLOCKADDRESS";
103 case naclbitc::CST_CODE_DATA: return "DATA";
104 }
105 case naclbitc::FUNCTION_BLOCK_ID:
106 switch (CodeID) {
107 default: return 0;
108 case naclbitc::FUNC_CODE_DECLAREBLOCKS: return "DECLAREBLOCKS";
109
110 case naclbitc::FUNC_CODE_INST_BINOP: return "INST_BINOP";
111 case naclbitc::FUNC_CODE_INST_CAST: return "INST_CAST";
112 case naclbitc::FUNC_CODE_INST_GEP: return "INST_GEP";
113 case naclbitc::FUNC_CODE_INST_INBOUNDS_GEP: return "INST_INBOUNDS_GEP";
114 case naclbitc::FUNC_CODE_INST_SELECT: return "INST_SELECT";
115 case naclbitc::FUNC_CODE_INST_EXTRACTELT: return "INST_EXTRACTELT";
116 case naclbitc::FUNC_CODE_INST_INSERTELT: return "INST_INSERTELT";
117 case naclbitc::FUNC_CODE_INST_SHUFFLEVEC: return "INST_SHUFFLEVEC";
118 case naclbitc::FUNC_CODE_INST_CMP: return "INST_CMP";
119
120 case naclbitc::FUNC_CODE_INST_RET: return "INST_RET";
121 case naclbitc::FUNC_CODE_INST_BR: return "INST_BR";
122 case naclbitc::FUNC_CODE_INST_SWITCH: return "INST_SWITCH";
123 case naclbitc::FUNC_CODE_INST_INVOKE: return "INST_INVOKE";
124 case naclbitc::FUNC_CODE_INST_UNREACHABLE: return "INST_UNREACHABLE";
125
126 case naclbitc::FUNC_CODE_INST_PHI: return "INST_PHI";
127 case naclbitc::FUNC_CODE_INST_ALLOCA: return "INST_ALLOCA";
128 case naclbitc::FUNC_CODE_INST_LOAD: return "INST_LOAD";
129 case naclbitc::FUNC_CODE_INST_VAARG: return "INST_VAARG";
130 case naclbitc::FUNC_CODE_INST_STORE: return "INST_STORE";
131 case naclbitc::FUNC_CODE_INST_EXTRACTVAL: return "INST_EXTRACTVAL";
132 case naclbitc::FUNC_CODE_INST_INSERTVAL: return "INST_INSERTVAL";
133 case naclbitc::FUNC_CODE_INST_CMP2: return "INST_CMP2";
134 case naclbitc::FUNC_CODE_INST_VSELECT: return "INST_VSELECT";
135 case naclbitc::FUNC_CODE_DEBUG_LOC_AGAIN: return "DEBUG_LOC_AGAIN";
136 case naclbitc::FUNC_CODE_INST_CALL: return "INST_CALL";
137 case naclbitc::FUNC_CODE_INST_CALL_INDIRECT: return "INST_CALL_INDIRECT";
138 case naclbitc::FUNC_CODE_DEBUG_LOC: return "DEBUG_LOC";
139 case naclbitc::FUNC_CODE_INST_FORWARDTYPEREF: return "FORWARDTYPEREF";
140 }
141 case naclbitc::VALUE_SYMTAB_BLOCK_ID:
142 switch (CodeID) {
143 default: return 0;
144 case naclbitc::VST_CODE_ENTRY: return "ENTRY";
145 case naclbitc::VST_CODE_BBENTRY: return "BBENTRY";
146 }
147 case naclbitc::METADATA_ATTACHMENT_ID:
148 switch(CodeID) {
149 default:return 0;
150 case naclbitc::METADATA_ATTACHMENT: return "METADATA_ATTACHMENT";
151 }
152 case naclbitc::METADATA_BLOCK_ID:
153 switch(CodeID) {
154 default:return 0;
155 case naclbitc::METADATA_STRING: return "METADATA_STRING";
156 case naclbitc::METADATA_NAME: return "METADATA_NAME";
157 case naclbitc::METADATA_KIND: return "METADATA_KIND";
158 case naclbitc::METADATA_NODE: return "METADATA_NODE";
159 case naclbitc::METADATA_FN_NODE: return "METADATA_FN_NODE";
160 case naclbitc::METADATA_NAMED_NODE: return "METADATA_NAMED_NODE";
161 }
162 case naclbitc::GLOBALVAR_BLOCK_ID:
163 switch (CodeID) {
164 default: return 0;
165 case naclbitc::GLOBALVAR_VAR: return "VAR";
166 case naclbitc::GLOBALVAR_COMPOUND: return "COMPOUND";
167 case naclbitc::GLOBALVAR_ZEROFILL: return "ZEROFILL";
168 case naclbitc::GLOBALVAR_DATA: return "DATA";
169 case naclbitc::GLOBALVAR_RELOC: return "RELOC";
170 case naclbitc::GLOBALVAR_COUNT: return "COUNT";
171 }
172 }
173 }
174
175 NaClBitcodeCodeDistElement::~NaClBitcodeCodeDistElement() {}
176
177 NaClBitcodeDistElement *NaClBitcodeCodeDistElement::CreateElement(
178 NaClBitcodeDistValue Value) const {
179 return new NaClBitcodeCodeDistElement();
180 }
181
182 void NaClBitcodeCodeDistElement::
183 GetValueList(const NaClBitcodeRecord &Record,
184 ValueListType &ValueList) const {
185 if (Record.GetEntryKind() == NaClBitstreamEntry::Record) {
186 ValueList.push_back(Record.GetCode());
187 }
188 }
189
190 const char *NaClBitcodeCodeDistElement::GetTitle() const {
191 return "Record Histogram:";
192 }
193
194 const char *NaClBitcodeCodeDistElement::GetValueHeader() const {
195 return "Record Kind";
196 }
197
198 void NaClBitcodeCodeDistElement::
199 PrintRowValue(raw_ostream &Stream,
200 NaClBitcodeDistValue Value,
201 const NaClBitcodeDist *Distribution) const {
202 Stream <<
203 NaClBitcodeCodeDist::
204 GetCodeName(Value,
205 cast<NaClBitcodeCodeDist>(Distribution)->GetBlockID());
206 }
207
208 NaClBitcodeCodeDistElement NaClBitcodeCodeDist::DefaultSentinel;
209
210 NaClBitcodeCodeDist::~NaClBitcodeCodeDist() {}
211
212 std::string NaClBitcodeCodeDist::GetCodeName(unsigned CodeID,
213 unsigned BlockID) {
214 if (const char *CodeName = ::GetCodeName(CodeID, BlockID))
215 return CodeName;
216
217 std::string Str;
218 raw_string_ostream StrStrm(Str);
219 StrStrm << "UnknownCode" << CodeID;
220 return StrStrm.str();
221 }
OLDNEW
« no previous file with comments | « lib/Bitcode/NaCl/Analysis/NaClBitcodeBlockDist.cpp ('k') | lib/Bitcode/NaCl/Analysis/NaClBitcodeDist.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698