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

Unified Diff: src/PNaClTranslator.cpp

Issue 735513002: Create local config file for subzero reader tests. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Fix nit. Created 6 years 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 | « no previous file | tests_lit/parse_errs/insertextract-err.ll » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/PNaClTranslator.cpp
diff --git a/src/PNaClTranslator.cpp b/src/PNaClTranslator.cpp
index 9c1b65fd6d0b71d9a3c07c4a07ddff423a571761..3f14ae028b3fedc639e3d42b9d33e7f0cc59c953 100644
--- a/src/PNaClTranslator.cpp
+++ b/src/PNaClTranslator.cpp
@@ -161,6 +161,8 @@ void ExtendedType::dump(Ice::Ostream &Stream) const {
}
}
+class BlockParserBaseClass;
+
// Top-level class to read PNaCl bitcode files, and translate to ICE.
class TopLevelParser : public NaClBitcodeParser {
TopLevelParser(const TopLevelParser &) = delete;
@@ -176,7 +178,7 @@ public:
Mod(new Module(InputName, getGlobalContext())), DL(PNaClDataLayout),
Header(Header), TypeConverter(Mod->getContext()),
ErrorStatus(ErrorStatus), NumErrors(0), NumFunctionIds(0),
- NumFunctionBlocks(0) {
+ NumFunctionBlocks(0), BlockParser(nullptr) {
Mod->setDataLayout(PNaClDataLayout);
setErrStream(Translator.getContext()->getStrDump());
}
@@ -185,16 +187,16 @@ public:
Ice::Translator &getTranslator() { return Translator; }
- // Generates error with given Message. Always returns true.
- bool Error(const std::string &Message) override {
- ErrorStatus = true;
- ++NumErrors;
- NaClBitcodeParser::Error(Message);
- if (!AllowErrorRecovery)
- report_fatal_error("Unable to continue");
- return true;
+ void setBlockParser(BlockParserBaseClass *NewBlockParser) {
+ BlockParser = NewBlockParser;
}
+ // Generates error with given Message. Always returns true.
+ bool Error(const std::string &Message) override;
+
+ // Generates error message with respect to the current block parser.
+ bool BlockError(const std::string &Message);
+
/// Returns the number of errors found while parsing the bitcode
/// file.
unsigned getNumErrors() const { return NumErrors; }
@@ -322,7 +324,7 @@ public:
std::string Buffer;
raw_string_ostream StrBuf(Buffer);
StrBuf << "Reference to global not defined: " << ID;
- Error(StrBuf.str());
+ BlockError(StrBuf.str());
// TODO(kschimpf) Remove error recovery once implementation complete.
Name = "??";
SuppressMangling = false;
@@ -432,6 +434,9 @@ private:
std::vector<unsigned> DefiningFunctionDeclarationsList;
// Error recovery value to use when getFuncSigTypeByID fails.
Ice::FuncSigType UndefinedFuncSigType;
+ // The block parser currently being applied. Used for error
+ // reporting.
+ BlockParserBaseClass *BlockParser;
bool ParseBlock(unsigned BlockID) override;
@@ -469,6 +474,15 @@ private:
Ice::Type convertToIceTypeError(Type *LLVMTy);
};
+bool TopLevelParser::Error(const std::string &Message) {
+ ErrorStatus = true;
+ ++NumErrors;
+ NaClBitcodeParser::Error(Message);
+ if (!AllowErrorRecovery)
+ report_fatal_error("Unable to continue");
+ return true;
+}
+
void TopLevelParser::reportBadTypeIDAs(unsigned ID, const ExtendedType *Ty,
ExtendedType::TypeKind WantedType) {
std::string Buffer;
@@ -478,7 +492,7 @@ void TopLevelParser::reportBadTypeIDAs(unsigned ID, const ExtendedType *Ty,
} else {
StrBuf << "Type id " << ID << " not " << WantedType << ". Found: " << *Ty;
}
- Error(StrBuf.str());
+ BlockError(StrBuf.str());
}
Ice::FunctionDeclaration *
@@ -488,7 +502,7 @@ TopLevelParser::reportGetFunctionByIDError(unsigned ID) {
StrBuf << "Function index " << ID
<< " not allowed. Out of range. Must be less than "
<< FunctionDeclarationList.size();
- Error(StrBuf.str());
+ BlockError(StrBuf.str());
// TODO(kschimpf) Remove error recovery once implementation complete.
if (!FunctionDeclarationList.empty())
return FunctionDeclarationList[0];
@@ -502,7 +516,7 @@ TopLevelParser::reportGetGlobalVariableByIDError(unsigned Index) {
StrBuf << "Global index " << Index
<< " not allowed. Out of range. Must be less than "
<< VariableDeclarations.size();
- Error(StrBuf.str());
+ BlockError(StrBuf.str());
// TODO(kschimpf) Remove error recovery once implementation complete.
if (!VariableDeclarations.empty())
return VariableDeclarations[0];
@@ -522,12 +536,26 @@ Ice::Type TopLevelParser::convertToIceTypeError(Type *LLVMTy) {
// messages if ParseBlock or ParseRecord is not overridden in derived
// classes.
class BlockParserBaseClass : public NaClBitcodeParser {
+ BlockParserBaseClass(const BlockParserBaseClass &) = delete;
+ BlockParserBaseClass &operator=(const BlockParserBaseClass &) = delete;
+
public:
// Constructor for the top-level module block parser.
BlockParserBaseClass(unsigned BlockID, TopLevelParser *Context)
- : NaClBitcodeParser(BlockID, Context), Context(Context) {}
+ : NaClBitcodeParser(BlockID, Context), Context(Context) {
+ Context->setBlockParser(this);
+ }
+
+ ~BlockParserBaseClass() override { Context->setBlockParser(nullptr); }
+
+ // Returns the printable name of the type of block being parsed.
+ virtual const char *getBlockName() const {
+ // If this class is used, it is parsing an unknown block.
+ return "unknown";
+ }
- ~BlockParserBaseClass() override {}
+ // Generates an error Message with the bit address prefixed to it.
+ bool Error(const std::string &Message) override;
protected:
// The context parser that contains the decoded state.
@@ -548,22 +576,6 @@ protected:
: false;
}
- // Generates an error Message with the bit address prefixed to it.
- bool Error(const std::string &Message) override {
- uint64_t Bit = Record.GetStartBit() + Context->getHeaderSize() * 8;
- std::string Buffer;
- raw_string_ostream StrBuf(Buffer);
- StrBuf << "(" << format("%" PRIu64 ":%u", (Bit / 8),
- static_cast<unsigned>(Bit % 8)) << ") ";
- // Note: If dump routines have been turned off, the error messages
- // will not be readable. Hence, replace with simple error.
- if (ALLOW_DUMP)
- StrBuf << Message;
- else
- StrBuf << "Invalid input record";
- return Context->Error(StrBuf.str());
- }
-
// Default implementation. Reports that block is unknown and skips
// its contents.
bool ParseBlock(unsigned BlockID) override;
@@ -623,12 +635,43 @@ private:
const char *ContextMessage);
};
+bool TopLevelParser::BlockError(const std::string &Message) {
+ if (BlockParser)
+ return BlockParser->Error(Message);
+ else
+ return Error(Message);
+}
+
+// Generates an error Message with the bit address prefixed to it.
+bool BlockParserBaseClass::Error(const std::string &Message) {
+ uint64_t Bit = Record.GetStartBit() + Context->getHeaderSize() * 8;
+ std::string Buffer;
+ raw_string_ostream StrBuf(Buffer);
+ StrBuf << "(" << format("%" PRIu64 ":%u", (Bit / 8),
+ static_cast<unsigned>(Bit % 8)) << ") ";
+ // Note: If dump routines have been turned off, the error messages
+ // will not be readable. Hence, replace with simple error.
+ if (ALLOW_DUMP)
+ StrBuf << Message;
+ else {
+ StrBuf << "Invalid " << getBlockName() << " record: <" << Record.GetCode();
+ for (const uint64_t Val : Record.GetValues()) {
+ StrBuf << " " << Val;
+ }
+ StrBuf << ">";
+ }
+ return Context->Error(StrBuf.str());
+}
+
void BlockParserBaseClass::ReportRecordSizeError(unsigned ExpectedSize,
const char *RecordName,
const char *ContextMessage) {
std::string Buffer;
raw_string_ostream StrBuf(Buffer);
- StrBuf << RecordName << " record expects";
+ const char *BlockName = getBlockName();
+ const char FirstChar = toupper(*BlockName);
+ StrBuf << FirstChar << (BlockName + 1) << " " << RecordName
+ << " record expects";
if (ContextMessage)
StrBuf << " " << ContextMessage;
StrBuf << " " << ExpectedSize << " argument";
@@ -654,7 +697,8 @@ void BlockParserBaseClass::ProcessRecord() {
// If called, derived class doesn't know how to handle.
std::string Buffer;
raw_string_ostream StrBuf(Buffer);
- StrBuf << "Don't know how to process record: " << Record;
+ StrBuf << "Don't know how to process " << getBlockName()
+ << " record:" << Record;
Error(StrBuf.str());
}
@@ -676,6 +720,8 @@ private:
void ProcessRecord() override;
+ const char *getBlockName() const override { return "type"; }
+
void setNextTypeIDAsSimpleType(Ice::Type Ty) {
Context->getTypeByIDForDefining(NextTypeId++)->setAsSimpleType(Ty);
}
@@ -686,31 +732,31 @@ void TypesParser::ProcessRecord() {
switch (Record.GetCode()) {
case naclbitc::TYPE_CODE_NUMENTRY:
// NUMENTRY: [numentries]
- if (!isValidRecordSize(1, "Type count"))
+ if (!isValidRecordSize(1, "count"))
return;
Context->resizeTypeIDValues(Values[0]);
return;
case naclbitc::TYPE_CODE_VOID:
// VOID
- if (!isValidRecordSize(0, "Type void"))
+ if (!isValidRecordSize(0, "void"))
return;
setNextTypeIDAsSimpleType(Ice::IceType_void);
return;
case naclbitc::TYPE_CODE_FLOAT:
// FLOAT
- if (!isValidRecordSize(0, "Type float"))
+ if (!isValidRecordSize(0, "float"))
return;
setNextTypeIDAsSimpleType(Ice::IceType_f32);
return;
case naclbitc::TYPE_CODE_DOUBLE:
// DOUBLE
- if (!isValidRecordSize(0, "Type double"))
+ if (!isValidRecordSize(0, "double"))
return;
setNextTypeIDAsSimpleType(Ice::IceType_f64);
return;
case naclbitc::TYPE_CODE_INTEGER:
// INTEGER: [width]
- if (!isValidRecordSize(1, "Type integer"))
+ if (!isValidRecordSize(1, "integer"))
return;
switch (Values[0]) {
case 1:
@@ -740,7 +786,7 @@ void TypesParser::ProcessRecord() {
return;
case naclbitc::TYPE_CODE_VECTOR: {
// VECTOR: [numelts, eltty]
- if (!isValidRecordSize(2, "Type vector"))
+ if (!isValidRecordSize(2, "vector"))
return;
Ice::Type BaseTy = Context->getSimpleTypeByID(Values[1]);
Ice::SizeT Size = Values[0];
@@ -798,7 +844,7 @@ void TypesParser::ProcessRecord() {
}
case naclbitc::TYPE_CODE_FUNCTION: {
// FUNCTION: [vararg, retty, paramty x N]
- if (!isValidRecordSizeAtLeast(2, "Type signature"))
+ if (!isValidRecordSizeAtLeast(2, "signature"))
return;
if (Values[0])
Error("Function type can't define varargs");
@@ -844,6 +890,8 @@ public:
~GlobalsParser() final {}
+ const char *getBlockName() const override { return "globals"; }
+
private:
Ice::TimerMarker Timer;
// Keeps track of how many initializers are expected for the global variable
@@ -867,7 +915,7 @@ private:
if (NextGlobalID < NumIDs) {
std::string Buffer;
raw_string_ostream StrBuf(Buffer);
- StrBuf << "Globals block expects " << NumIDs
+ StrBuf << getBlockName() << " block expects " << NumIDs
<< " global variable declarations. Found: " << NextGlobalID;
Error(StrBuf.str());
}
@@ -901,7 +949,7 @@ void GlobalsParser::ProcessRecord() {
switch (Record.GetCode()) {
case naclbitc::GLOBALVAR_COUNT:
// COUNT: [n]
- if (!isValidRecordSize(1, "Globals count"))
+ if (!isValidRecordSize(1, "count"))
return;
if (NextGlobalID != Context->getNumGlobalVariables()) {
Error("Globals count record not first in block.");
@@ -911,7 +959,7 @@ void GlobalsParser::ProcessRecord() {
return;
case naclbitc::GLOBALVAR_VAR: {
// VAR: [align, isconst]
- if (!isValidRecordSize(2, "Globals variable"))
+ if (!isValidRecordSize(2, "variable"))
return;
verifyNoMissingInitializers();
if (!isIRGenerationDisabled()) {
@@ -925,7 +973,7 @@ void GlobalsParser::ProcessRecord() {
}
case naclbitc::GLOBALVAR_COMPOUND:
// COMPOUND: [size]
- if (!isValidRecordSize(1, "globals compound"))
+ if (!isValidRecordSize(1, "compound"))
return;
if (!CurGlobalVar->getInitializers().empty()) {
Error("Globals compound record not first initializer");
@@ -934,7 +982,8 @@ void GlobalsParser::ProcessRecord() {
if (Values[0] < 2) {
std::string Buffer;
raw_string_ostream StrBuf(Buffer);
- StrBuf << "Globals compound record size invalid. Found: " << Values[0];
+ StrBuf << getBlockName()
+ << " compound record size invalid. Found: " << Values[0];
Error(StrBuf.str());
return;
}
@@ -944,7 +993,7 @@ void GlobalsParser::ProcessRecord() {
return;
case naclbitc::GLOBALVAR_ZEROFILL: {
// ZEROFILL: [size]
- if (!isValidRecordSize(1, "Globals zerofill"))
+ if (!isValidRecordSize(1, "zerofill"))
return;
if (isIRGenerationDisabled())
return;
@@ -954,7 +1003,7 @@ void GlobalsParser::ProcessRecord() {
}
case naclbitc::GLOBALVAR_DATA: {
// DATA: [b0, b1, ...]
- if (!isValidRecordSizeAtLeast(1, "Globals data"))
+ if (!isValidRecordSizeAtLeast(1, "data"))
return;
if (isIRGenerationDisabled())
return;
@@ -964,7 +1013,7 @@ void GlobalsParser::ProcessRecord() {
}
case naclbitc::GLOBALVAR_RELOC: {
// RELOC: [val, [addend]]
- if (!isValidRecordSizeInRange(1, 2, "Globals reloc"))
+ if (!isValidRecordSizeInRange(1, 2, "reloc"))
return;
if (isIRGenerationDisabled())
return;
@@ -993,6 +1042,8 @@ public:
~ValuesymtabParser() override {}
+ const char *getBlockName() const override { return "valuesymtab"; }
+
protected:
typedef SmallString<128> StringType;
@@ -1020,7 +1071,7 @@ void ValuesymtabParser::ProcessRecord() {
switch (Record.GetCode()) {
case naclbitc::VST_CODE_ENTRY: {
// VST_ENTRY: [ValueId, namechar x N]
- if (!isValidRecordSizeAtLeast(2, "Valuesymtab value entry"))
+ if (!isValidRecordSizeAtLeast(2, "value entry"))
return;
ConvertToString(ConvertedName);
setValueName(Values[0], ConvertedName);
@@ -1028,7 +1079,7 @@ void ValuesymtabParser::ProcessRecord() {
}
case naclbitc::VST_CODE_BBENTRY: {
// VST_BBENTRY: [BbId, namechar x N]
- if (!isValidRecordSizeAtLeast(2, "Valuesymtab basic block entry"))
+ if (!isValidRecordSizeAtLeast(2, "basic block entry"))
return;
ConvertToString(ConvertedName);
setBbName(Values[0], ConvertedName);
@@ -1048,7 +1099,6 @@ class FunctionValuesymtabParser;
class FunctionParser : public BlockParserBaseClass {
FunctionParser(const FunctionParser &) = delete;
FunctionParser &operator=(const FunctionParser &) = delete;
- friend class FunctionValuesymtabParser;
public:
FunctionParser(unsigned BlockID, BlockParserBaseClass *EnclosingParser)
@@ -1090,6 +1140,16 @@ public:
~FunctionParser() final {}
+ const char *getBlockName() const override { return "function"; }
+
+ Ice::Cfg *getFunc() const {
+ return Func;
+ }
+
+ uint32_t getNumGlobalIDs() const {
+ return CachedNumGlobalValueIDs;
+ }
+
void setNextLocalInstIndex(Ice::Operand *Op) {
setOperand(NextLocalInstIndex++, Op);
}
@@ -1097,6 +1157,32 @@ public:
// Set the next constant ID to the given constant C.
void setNextConstantID(Ice::Constant *C) { setNextLocalInstIndex(C); }
+ // Returns the value referenced by the given value Index.
+ Ice::Operand *getOperand(uint32_t Index) {
+ if (Index < CachedNumGlobalValueIDs) {
+ return Context->getOrCreateGlobalConstantByID(Index);
+ }
+ uint32_t LocalIndex = Index - CachedNumGlobalValueIDs;
+ if (LocalIndex >= LocalOperands.size()) {
+ std::string Buffer;
+ raw_string_ostream StrBuf(Buffer);
+ StrBuf << "Value index " << Index << " not defined!";
+ Error(StrBuf.str());
+ report_fatal_error("Unable to continue");
+ }
+ Ice::Operand *Op = LocalOperands[LocalIndex];
+ if (Op == nullptr) {
+ if (isIRGenerationDisabled())
+ return nullptr;
+ std::string Buffer;
+ raw_string_ostream StrBuf(Buffer);
+ StrBuf << "Value index " << Index << " not defined!";
+ Error(StrBuf.str());
+ report_fatal_error("Unable to continue");
+ }
+ return Op;
+ }
+
private:
Ice::TimerMarker Timer;
// The corresponding ICE function defined by the function block.
@@ -1247,32 +1333,6 @@ private:
return BaseIndex - Id;
}
- // Returns the value referenced by the given value Index.
- Ice::Operand *getOperand(uint32_t Index) {
- if (Index < CachedNumGlobalValueIDs) {
- return Context->getOrCreateGlobalConstantByID(Index);
- }
- uint32_t LocalIndex = Index - CachedNumGlobalValueIDs;
- if (LocalIndex >= LocalOperands.size()) {
- std::string Buffer;
- raw_string_ostream StrBuf(Buffer);
- StrBuf << "Value index " << Index << " not defined!";
- Error(StrBuf.str());
- report_fatal_error("Unable to continue");
- }
- Ice::Operand *Op = LocalOperands[LocalIndex];
- if (Op == nullptr) {
- if (isIRGenerationDisabled())
- return nullptr;
- std::string Buffer;
- raw_string_ostream StrBuf(Buffer);
- StrBuf << "Value index " << Index << " not defined!";
- Error(StrBuf.str());
- report_fatal_error("Unable to continue");
- }
- return Op;
- }
-
// Sets element Index (in the local operands list) to Op.
void setOperand(uint32_t Index, Ice::Operand *Op) {
assert(Op || isIRGenerationDisabled());
@@ -1761,7 +1821,7 @@ void FunctionParser::ProcessRecord() {
switch (Record.GetCode()) {
case naclbitc::FUNC_CODE_DECLAREBLOCKS: {
// DECLAREBLOCKS: [n]
- if (!isValidRecordSize(1, "function block count"))
+ if (!isValidRecordSize(1, "count"))
return;
uint32_t NumBbs = Values[0];
if (NumBbs == 0) {
@@ -1783,7 +1843,7 @@ void FunctionParser::ProcessRecord() {
}
case naclbitc::FUNC_CODE_INST_BINOP: {
// BINOP: [opval, opval, opcode]
- if (!isValidRecordSize(3, "function block binop"))
+ if (!isValidRecordSize(3, "binop"))
return;
Ice::Operand *Op1 = getRelativeOperand(Values[0], BaseIndex);
Ice::Operand *Op2 = getRelativeOperand(Values[1], BaseIndex);
@@ -1812,7 +1872,7 @@ void FunctionParser::ProcessRecord() {
}
case naclbitc::FUNC_CODE_INST_CAST: {
// CAST: [opval, destty, castopc]
- if (!isValidRecordSize(3, "function block cast"))
+ if (!isValidRecordSize(3, "cast"))
return;
Ice::Operand *Src = getRelativeOperand(Values[0], BaseIndex);
Ice::Type CastType = Context->getSimpleTypeByID(Values[1]);
@@ -1849,7 +1909,7 @@ void FunctionParser::ProcessRecord() {
}
case naclbitc::FUNC_CODE_INST_VSELECT: {
// VSELECT: [opval, opval, pred]
- if (!isValidRecordSize(3, "function block select"))
+ if (!isValidRecordSize(3, "select"))
return;
Ice::Operand *ThenVal = getRelativeOperand(Values[0], BaseIndex);
Ice::Operand *ElseVal = getRelativeOperand(Values[1], BaseIndex);
@@ -1898,7 +1958,7 @@ void FunctionParser::ProcessRecord() {
}
case naclbitc::FUNC_CODE_INST_EXTRACTELT: {
// EXTRACTELT: [opval, opval]
- if (!isValidRecordSize(2, "function block extract element"))
+ if (!isValidRecordSize(2, "extract element"))
return;
Ice::Operand *Vec = getRelativeOperand(Values[0], BaseIndex);
Ice::Operand *Index = getRelativeOperand(Values[1], BaseIndex);
@@ -1925,7 +1985,7 @@ void FunctionParser::ProcessRecord() {
}
case naclbitc::FUNC_CODE_INST_INSERTELT: {
// INSERTELT: [opval, opval, opval]
- if (!isValidRecordSize(3, "function block insert element"))
+ if (!isValidRecordSize(3, "insert element"))
return;
Ice::Operand *Vec = getRelativeOperand(Values[0], BaseIndex);
Ice::Operand *Elt = getRelativeOperand(Values[1], BaseIndex);
@@ -1954,7 +2014,7 @@ void FunctionParser::ProcessRecord() {
}
case naclbitc::FUNC_CODE_INST_CMP2: {
// CMP2: [opval, opval, pred]
- if (!isValidRecordSize(3, "function block compare"))
+ if (!isValidRecordSize(3, "compare"))
return;
Ice::Operand *Op1 = getRelativeOperand(Values[0], BaseIndex);
Ice::Operand *Op2 = getRelativeOperand(Values[1], BaseIndex);
@@ -2020,7 +2080,7 @@ void FunctionParser::ProcessRecord() {
}
case naclbitc::FUNC_CODE_INST_RET: {
// RET: [opval?]
- if (!isValidRecordSizeInRange(0, 1, "function block ret"))
+ if (!isValidRecordSizeInRange(0, 1, "return"))
return;
if (Values.empty()) {
if (isIRGenerationDisabled())
@@ -2048,7 +2108,7 @@ void FunctionParser::ProcessRecord() {
CurrentNode->appendInst(Ice::InstBr::create(Func, Block));
} else {
// BR: [bb#, bb#, opval]
- if (!isValidRecordSize(3, "function block branch"))
+ if (!isValidRecordSize(3, "branch"))
return;
Ice::Operand *Cond = getRelativeOperand(Values[2], BaseIndex);
if (isIRGenerationDisabled()) {
@@ -2082,7 +2142,7 @@ void FunctionParser::ProcessRecord() {
// unnecesary data fields (i.e. constants 1). These were not
// cleaned up in PNaCl bitcode because the bitcode format was
// already frozen when the problem was noticed.
- if (!isValidRecordSizeAtLeast(4, "function block switch"))
+ if (!isValidRecordSizeAtLeast(4, "switch"))
return;
Ice::Type CondTy = Context->getSimpleTypeByID(Values[0]);
@@ -2112,7 +2172,7 @@ void FunctionParser::ProcessRecord() {
unsigned NumCases = Values[3];
// Now recognize each of the cases.
- if (!isValidRecordSize(4 + NumCases * 4, "Function block switch"))
+ if (!isValidRecordSize(4 + NumCases * 4, "switch"))
return;
Ice::InstSwitch *Switch =
isIRGenDisabled ? nullptr : Ice::InstSwitch::create(Func, NumCases,
@@ -2144,7 +2204,7 @@ void FunctionParser::ProcessRecord() {
}
case naclbitc::FUNC_CODE_INST_UNREACHABLE: {
// UNREACHABLE: []
- if (!isValidRecordSize(0, "function block unreachable"))
+ if (!isValidRecordSize(0, "unreachable"))
return;
if (isIRGenerationDisabled())
return;
@@ -2155,7 +2215,7 @@ void FunctionParser::ProcessRecord() {
}
case naclbitc::FUNC_CODE_INST_PHI: {
// PHI: [ty, val1, bb1, ..., valN, bbN] for n >= 2.
- if (!isValidRecordSizeAtLeast(3, "function block phi"))
+ if (!isValidRecordSizeAtLeast(3, "phi"))
return;
Ice::Type Ty = Context->getSimpleTypeByID(Values[0]);
if ((Values.size() & 0x1) == 0) {
@@ -2201,7 +2261,7 @@ void FunctionParser::ProcessRecord() {
}
case naclbitc::FUNC_CODE_INST_ALLOCA: {
// ALLOCA: [Size, align]
- if (!isValidRecordSize(2, "function block alloca"))
+ if (!isValidRecordSize(2, "alloca"))
return;
Ice::Operand *ByteCount = getRelativeOperand(Values[0], BaseIndex);
unsigned Alignment;
@@ -2226,7 +2286,7 @@ void FunctionParser::ProcessRecord() {
}
case naclbitc::FUNC_CODE_INST_LOAD: {
// LOAD: [address, align, ty]
- if (!isValidRecordSize(3, "function block load"))
+ if (!isValidRecordSize(3, "load"))
return;
Ice::Operand *Address = getRelativeOperand(Values[0], BaseIndex);
Ice::Type Ty = Context->getSimpleTypeByID(Values[2]);
@@ -2251,7 +2311,7 @@ void FunctionParser::ProcessRecord() {
}
case naclbitc::FUNC_CODE_INST_STORE: {
// STORE: [address, value, align]
- if (!isValidRecordSize(3, "function block store"))
+ if (!isValidRecordSize(3, "store"))
return;
Ice::Operand *Address = getRelativeOperand(Values[0], BaseIndex);
Ice::Operand *Value = getRelativeOperand(Values[1], BaseIndex);
@@ -2283,10 +2343,10 @@ void FunctionParser::ProcessRecord() {
// corresponding return type stored in CALL_INDIRECT record.
Ice::SizeT ParamsStartIndex = 2;
if (Record.GetCode() == naclbitc::FUNC_CODE_INST_CALL) {
- if (!isValidRecordSizeAtLeast(2, "function block call"))
+ if (!isValidRecordSizeAtLeast(2, "call"))
return;
} else {
- if (!isValidRecordSizeAtLeast(3, "function block call indirect"))
+ if (!isValidRecordSizeAtLeast(3, "call indirect"))
return;
ParamsStartIndex = 3;
}
@@ -2415,7 +2475,7 @@ void FunctionParser::ProcessRecord() {
}
case naclbitc::FUNC_CODE_INST_FORWARDTYPEREF: {
// FORWARDTYPEREF: [opval, ty]
- if (!isValidRecordSize(2, "function block forward type ref"))
+ if (!isValidRecordSize(2, "forward type ref"))
return;
Ice::Type OpType = Context->getSimpleTypeByID(Values[1]);
setOperand(Values[0],
@@ -2442,6 +2502,8 @@ public:
~ConstantsParser() override {}
+ const char *getBlockName() const override { return "constants"; }
+
private:
Ice::TimerMarker Timer;
// The parser of the function block this constants block appears in.
@@ -2468,7 +2530,7 @@ void ConstantsParser::ProcessRecord() {
switch (Record.GetCode()) {
case naclbitc::CST_CODE_SETTYPE: {
// SETTYPE: [typeid]
- if (!isValidRecordSize(1, "constants block set type"))
+ if (!isValidRecordSize(1, "set type"))
return;
NextConstantType = Context->getSimpleTypeByID(Values[0]);
if (NextConstantType == Ice::IceType_void)
@@ -2477,7 +2539,7 @@ void ConstantsParser::ProcessRecord() {
}
case naclbitc::CST_CODE_UNDEF: {
// UNDEF
- if (!isValidRecordSize(0, "constants block undef"))
+ if (!isValidRecordSize(0, "undef"))
return;
if (!isValidNextConstantType())
return;
@@ -2491,7 +2553,7 @@ void ConstantsParser::ProcessRecord() {
}
case naclbitc::CST_CODE_INTEGER: {
// INTEGER: [intval]
- if (!isValidRecordSize(1, "constants block integer"))
+ if (!isValidRecordSize(1, "integer"))
return;
if (!isValidNextConstantType())
return;
@@ -2517,7 +2579,7 @@ void ConstantsParser::ProcessRecord() {
}
case naclbitc::CST_CODE_FLOAT: {
// FLOAT: [fpval]
- if (!isValidRecordSize(1, "constants block float"))
+ if (!isValidRecordSize(1, "float"))
return;
if (!isValidNextConstantType())
return;
@@ -2592,7 +2654,7 @@ private:
void FunctionValuesymtabParser::setValueName(uint64_t Index, StringType &Name) {
// Note: We check when Index is too small, so that we can error recover
// (FP->getOperand will create fatal error).
- if (Index < getFunctionParser()->CachedNumGlobalValueIDs) {
+ if (Index < getFunctionParser()->getNumGlobalIDs()) {
reportUnableToAssign("instruction", Index, Name);
// TODO(kschimpf) Remove error recovery once implementation complete.
return;
@@ -2611,12 +2673,12 @@ void FunctionValuesymtabParser::setValueName(uint64_t Index, StringType &Name) {
void FunctionValuesymtabParser::setBbName(uint64_t Index, StringType &Name) {
if (isIRGenerationDisabled())
return;
- if (Index >= getFunctionParser()->Func->getNumNodes()) {
+ if (Index >= getFunctionParser()->getFunc()->getNumNodes()) {
reportUnableToAssign("block", Index, Name);
return;
}
std::string Nm(Name.data(), Name.size());
- getFunctionParser()->Func->getNodes()[Index]->setName(Nm);
+ getFunctionParser()->getFunc()->getNodes()[Index]->setName(Nm);
}
bool FunctionParser::ParseBlock(unsigned BlockID) {
@@ -2649,6 +2711,8 @@ public:
~ModuleParser() override {}
+ const char *getBlockName() const override { return "module"; }
+
private:
Ice::TimerMarker Timer;
// True if we have already installed names for unnamed global declarations,
@@ -2768,7 +2832,7 @@ void ModuleParser::ProcessRecord() {
switch (Record.GetCode()) {
case naclbitc::MODULE_CODE_VERSION: {
// VERSION: [version#]
- if (!isValidRecordSize(1, "Module version"))
+ if (!isValidRecordSize(1, "version"))
return;
unsigned Version = Values[0];
if (Version != 1) {
@@ -2781,14 +2845,14 @@ void ModuleParser::ProcessRecord() {
}
case naclbitc::MODULE_CODE_FUNCTION: {
// FUNCTION: [type, callingconv, isproto, linkage]
- if (!isValidRecordSize(4, "Function heading"))
+ if (!isValidRecordSize(4, "address"))
return;
const Ice::FuncSigType &Signature = Context->getFuncSigTypeByID(Values[0]);
CallingConv::ID CallingConv;
if (!naclbitc::DecodeCallingConv(Values[1], CallingConv)) {
std::string Buffer;
raw_string_ostream StrBuf(Buffer);
- StrBuf << "Function heading has unknown calling convention: "
+ StrBuf << "Function address has unknown calling convention: "
<< Values[1];
Error(StrBuf.str());
return;
@@ -2797,7 +2861,7 @@ void ModuleParser::ProcessRecord() {
if (!naclbitc::DecodeLinkage(Values[3], Linkage)) {
std::string Buffer;
raw_string_ostream StrBuf(Buffer);
- StrBuf << "Function heading has unknown linkage. Found " << Values[3];
+ StrBuf << "Function address has unknown linkage. Found " << Values[3];
Error(StrBuf.str());
return;
}
« no previous file with comments | « no previous file | tests_lit/parse_errs/insertextract-err.ll » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698