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

Unified Diff: lib/Bitcode/NaCl/Analysis/NaClBitcodeCodeDist.cpp

Issue 939073008: Rebased PNaCl localmods in LLVM to 223109 (Closed)
Patch Set: undo localmod Created 5 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « lib/Bitcode/NaCl/Analysis/NaClBitcodeBlockDist.cpp ('k') | lib/Bitcode/NaCl/Analysis/NaClBitcodeDist.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/Bitcode/NaCl/Analysis/NaClBitcodeCodeDist.cpp
diff --git a/lib/Bitcode/NaCl/Analysis/NaClBitcodeCodeDist.cpp b/lib/Bitcode/NaCl/Analysis/NaClBitcodeCodeDist.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..aadea756b6e63a07c1555c212fef468d6f4e7231
--- /dev/null
+++ b/lib/Bitcode/NaCl/Analysis/NaClBitcodeCodeDist.cpp
@@ -0,0 +1,221 @@
+//===-- NaClBitcodeCodeDist.cpp -------------------------------------------===//
+// Implements distribution maps for record codes within a PNaCl bitcode
+// file.
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/Bitcode/NaCl/NaClBitcodeCodeDist.h"
+#include "llvm/Bitcode/NaCl/NaClLLVMBitCodes.h"
+#include "llvm/Support/raw_ostream.h"
+
+using namespace llvm;
+
+/// GetCodeName - Return a symbolic code name if known, otherwise return
+/// null.
+static const char *GetCodeName(unsigned CodeID, unsigned BlockID) {
+ // Standard blocks for all bitcode files.
+ if (BlockID < naclbitc::FIRST_APPLICATION_BLOCKID) {
+ if (BlockID == naclbitc::BLOCKINFO_BLOCK_ID) {
+ switch (CodeID) {
+ default: return 0;
+ case naclbitc::BLOCKINFO_CODE_SETBID: return "SETBID";
+ }
+ }
+ return 0;
+ }
+
+ switch (BlockID) {
+ default: return 0;
+ case naclbitc::MODULE_BLOCK_ID:
+ switch (CodeID) {
+ default: return 0;
+ case naclbitc::MODULE_CODE_VERSION: return "VERSION";
+ case naclbitc::MODULE_CODE_TRIPLE: return "TRIPLE";
+ case naclbitc::MODULE_CODE_DATALAYOUT: return "DATALAYOUT";
+ case naclbitc::MODULE_CODE_ASM: return "ASM";
+ case naclbitc::MODULE_CODE_SECTIONNAME: return "SECTIONNAME";
+ case naclbitc::MODULE_CODE_DEPLIB: return "DEPLIB"; // FIXME: Remove in 4.0
+ case naclbitc::MODULE_CODE_GLOBALVAR: return "GLOBALVAR";
+ case naclbitc::MODULE_CODE_FUNCTION: return "FUNCTION";
+ case naclbitc::MODULE_CODE_ALIAS: return "ALIAS";
+ case naclbitc::MODULE_CODE_PURGEVALS: return "PURGEVALS";
+ case naclbitc::MODULE_CODE_GCNAME: return "GCNAME";
+ }
+ case naclbitc::PARAMATTR_BLOCK_ID:
+ switch (CodeID) {
+ default: return 0;
+ case naclbitc::PARAMATTR_CODE_ENTRY_OLD: return "ENTRY";
+ case naclbitc::PARAMATTR_CODE_ENTRY: return "ENTRY";
+ case naclbitc::PARAMATTR_GRP_CODE_ENTRY: return "ENTRY";
+ }
+ case naclbitc::TYPE_BLOCK_ID_NEW:
+ switch (CodeID) {
+ default: return 0;
+ case naclbitc::TYPE_CODE_NUMENTRY: return "NUMENTRY";
+ case naclbitc::TYPE_CODE_VOID: return "VOID";
+ case naclbitc::TYPE_CODE_FLOAT: return "FLOAT";
+ case naclbitc::TYPE_CODE_DOUBLE: return "DOUBLE";
+ case naclbitc::TYPE_CODE_LABEL: return "LABEL";
+ case naclbitc::TYPE_CODE_OPAQUE: return "OPAQUE";
+ case naclbitc::TYPE_CODE_INTEGER: return "INTEGER";
+ case naclbitc::TYPE_CODE_POINTER: return "POINTER";
+ case naclbitc::TYPE_CODE_ARRAY: return "ARRAY";
+ case naclbitc::TYPE_CODE_VECTOR: return "VECTOR";
+ case naclbitc::TYPE_CODE_X86_FP80: return "X86_FP80";
+ case naclbitc::TYPE_CODE_FP128: return "FP128";
+ case naclbitc::TYPE_CODE_PPC_FP128: return "PPC_FP128";
+ case naclbitc::TYPE_CODE_METADATA: return "METADATA";
+ case naclbitc::TYPE_CODE_STRUCT_ANON: return "STRUCT_ANON";
+ case naclbitc::TYPE_CODE_STRUCT_NAME: return "STRUCT_NAME";
+ case naclbitc::TYPE_CODE_STRUCT_NAMED: return "STRUCT_NAMED";
+ case naclbitc::TYPE_CODE_FUNCTION: return "FUNCTION";
+ }
+
+ case naclbitc::CONSTANTS_BLOCK_ID:
+ switch (CodeID) {
+ default: return 0;
+ case naclbitc::CST_CODE_SETTYPE: return "SETTYPE";
+ case naclbitc::CST_CODE_NULL: return "NULL";
+ case naclbitc::CST_CODE_UNDEF: return "UNDEF";
+ case naclbitc::CST_CODE_INTEGER: return "INTEGER";
+ case naclbitc::CST_CODE_WIDE_INTEGER: return "WIDE_INTEGER";
+ case naclbitc::CST_CODE_FLOAT: return "FLOAT";
+ case naclbitc::CST_CODE_AGGREGATE: return "AGGREGATE";
+ case naclbitc::CST_CODE_STRING: return "STRING";
+ case naclbitc::CST_CODE_CSTRING: return "CSTRING";
+ case naclbitc::CST_CODE_CE_BINOP: return "CE_BINOP";
+ case naclbitc::CST_CODE_CE_CAST: return "CE_CAST";
+ case naclbitc::CST_CODE_CE_GEP: return "CE_GEP";
+ case naclbitc::CST_CODE_CE_INBOUNDS_GEP: return "CE_INBOUNDS_GEP";
+ case naclbitc::CST_CODE_CE_SELECT: return "CE_SELECT";
+ case naclbitc::CST_CODE_CE_EXTRACTELT: return "CE_EXTRACTELT";
+ case naclbitc::CST_CODE_CE_INSERTELT: return "CE_INSERTELT";
+ case naclbitc::CST_CODE_CE_SHUFFLEVEC: return "CE_SHUFFLEVEC";
+ case naclbitc::CST_CODE_CE_CMP: return "CE_CMP";
+ case naclbitc::CST_CODE_INLINEASM: return "INLINEASM";
+ case naclbitc::CST_CODE_CE_SHUFVEC_EX: return "CE_SHUFVEC_EX";
+ case naclbitc::CST_CODE_BLOCKADDRESS: return "CST_CODE_BLOCKADDRESS";
+ case naclbitc::CST_CODE_DATA: return "DATA";
+ }
+ case naclbitc::FUNCTION_BLOCK_ID:
+ switch (CodeID) {
+ default: return 0;
+ case naclbitc::FUNC_CODE_DECLAREBLOCKS: return "DECLAREBLOCKS";
+
+ case naclbitc::FUNC_CODE_INST_BINOP: return "INST_BINOP";
+ case naclbitc::FUNC_CODE_INST_CAST: return "INST_CAST";
+ case naclbitc::FUNC_CODE_INST_GEP: return "INST_GEP";
+ case naclbitc::FUNC_CODE_INST_INBOUNDS_GEP: return "INST_INBOUNDS_GEP";
+ case naclbitc::FUNC_CODE_INST_SELECT: return "INST_SELECT";
+ case naclbitc::FUNC_CODE_INST_EXTRACTELT: return "INST_EXTRACTELT";
+ case naclbitc::FUNC_CODE_INST_INSERTELT: return "INST_INSERTELT";
+ case naclbitc::FUNC_CODE_INST_SHUFFLEVEC: return "INST_SHUFFLEVEC";
+ case naclbitc::FUNC_CODE_INST_CMP: return "INST_CMP";
+
+ case naclbitc::FUNC_CODE_INST_RET: return "INST_RET";
+ case naclbitc::FUNC_CODE_INST_BR: return "INST_BR";
+ case naclbitc::FUNC_CODE_INST_SWITCH: return "INST_SWITCH";
+ case naclbitc::FUNC_CODE_INST_INVOKE: return "INST_INVOKE";
+ case naclbitc::FUNC_CODE_INST_UNREACHABLE: return "INST_UNREACHABLE";
+
+ case naclbitc::FUNC_CODE_INST_PHI: return "INST_PHI";
+ case naclbitc::FUNC_CODE_INST_ALLOCA: return "INST_ALLOCA";
+ case naclbitc::FUNC_CODE_INST_LOAD: return "INST_LOAD";
+ case naclbitc::FUNC_CODE_INST_VAARG: return "INST_VAARG";
+ case naclbitc::FUNC_CODE_INST_STORE: return "INST_STORE";
+ case naclbitc::FUNC_CODE_INST_EXTRACTVAL: return "INST_EXTRACTVAL";
+ case naclbitc::FUNC_CODE_INST_INSERTVAL: return "INST_INSERTVAL";
+ case naclbitc::FUNC_CODE_INST_CMP2: return "INST_CMP2";
+ case naclbitc::FUNC_CODE_INST_VSELECT: return "INST_VSELECT";
+ case naclbitc::FUNC_CODE_DEBUG_LOC_AGAIN: return "DEBUG_LOC_AGAIN";
+ case naclbitc::FUNC_CODE_INST_CALL: return "INST_CALL";
+ case naclbitc::FUNC_CODE_INST_CALL_INDIRECT: return "INST_CALL_INDIRECT";
+ case naclbitc::FUNC_CODE_DEBUG_LOC: return "DEBUG_LOC";
+ case naclbitc::FUNC_CODE_INST_FORWARDTYPEREF: return "FORWARDTYPEREF";
+ }
+ case naclbitc::VALUE_SYMTAB_BLOCK_ID:
+ switch (CodeID) {
+ default: return 0;
+ case naclbitc::VST_CODE_ENTRY: return "ENTRY";
+ case naclbitc::VST_CODE_BBENTRY: return "BBENTRY";
+ }
+ case naclbitc::METADATA_ATTACHMENT_ID:
+ switch(CodeID) {
+ default:return 0;
+ case naclbitc::METADATA_ATTACHMENT: return "METADATA_ATTACHMENT";
+ }
+ case naclbitc::METADATA_BLOCK_ID:
+ switch(CodeID) {
+ default:return 0;
+ case naclbitc::METADATA_STRING: return "METADATA_STRING";
+ case naclbitc::METADATA_NAME: return "METADATA_NAME";
+ case naclbitc::METADATA_KIND: return "METADATA_KIND";
+ case naclbitc::METADATA_NODE: return "METADATA_NODE";
+ case naclbitc::METADATA_FN_NODE: return "METADATA_FN_NODE";
+ case naclbitc::METADATA_NAMED_NODE: return "METADATA_NAMED_NODE";
+ }
+ case naclbitc::GLOBALVAR_BLOCK_ID:
+ switch (CodeID) {
+ default: return 0;
+ case naclbitc::GLOBALVAR_VAR: return "VAR";
+ case naclbitc::GLOBALVAR_COMPOUND: return "COMPOUND";
+ case naclbitc::GLOBALVAR_ZEROFILL: return "ZEROFILL";
+ case naclbitc::GLOBALVAR_DATA: return "DATA";
+ case naclbitc::GLOBALVAR_RELOC: return "RELOC";
+ case naclbitc::GLOBALVAR_COUNT: return "COUNT";
+ }
+ }
+}
+
+NaClBitcodeCodeDistElement::~NaClBitcodeCodeDistElement() {}
+
+NaClBitcodeDistElement *NaClBitcodeCodeDistElement::CreateElement(
+ NaClBitcodeDistValue Value) const {
+ return new NaClBitcodeCodeDistElement();
+}
+
+void NaClBitcodeCodeDistElement::
+GetValueList(const NaClBitcodeRecord &Record,
+ ValueListType &ValueList) const {
+ if (Record.GetEntryKind() == NaClBitstreamEntry::Record) {
+ ValueList.push_back(Record.GetCode());
+ }
+}
+
+const char *NaClBitcodeCodeDistElement::GetTitle() const {
+ return "Record Histogram:";
+}
+
+const char *NaClBitcodeCodeDistElement::GetValueHeader() const {
+ return "Record Kind";
+}
+
+void NaClBitcodeCodeDistElement::
+PrintRowValue(raw_ostream &Stream,
+ NaClBitcodeDistValue Value,
+ const NaClBitcodeDist *Distribution) const {
+ Stream <<
+ NaClBitcodeCodeDist::
+ GetCodeName(Value,
+ cast<NaClBitcodeCodeDist>(Distribution)->GetBlockID());
+}
+
+NaClBitcodeCodeDistElement NaClBitcodeCodeDist::DefaultSentinel;
+
+NaClBitcodeCodeDist::~NaClBitcodeCodeDist() {}
+
+std::string NaClBitcodeCodeDist::GetCodeName(unsigned CodeID,
+ unsigned BlockID) {
+ if (const char *CodeName = ::GetCodeName(CodeID, BlockID))
+ return CodeName;
+
+ std::string Str;
+ raw_string_ostream StrStrm(Str);
+ StrStrm << "UnknownCode" << CodeID;
+ return StrStrm.str();
+}
« 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