Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 //===- subzero/src/PNaClTranslator.cpp - ICE from bitcode -----------------===// | 1 //===- subzero/src/PNaClTranslator.cpp - ICE from bitcode -----------------===// |
| 2 // | 2 // |
| 3 // The Subzero Code Generator | 3 // The Subzero Code Generator |
| 4 // | 4 // |
| 5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
| 6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
| 7 // | 7 // |
| 8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
| 9 /// | 9 /// |
| 10 /// \file | 10 /// \file |
| (...skipping 1280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1291 } | 1291 } |
| 1292 | 1292 |
| 1293 // Set the next constant ID to the given constant C. | 1293 // Set the next constant ID to the given constant C. |
| 1294 void setNextConstantID(Ice::Constant *C) { setNextLocalInstIndex(C); } | 1294 void setNextConstantID(Ice::Constant *C) { setNextLocalInstIndex(C); } |
| 1295 | 1295 |
| 1296 // Returns the value referenced by the given value Index. | 1296 // Returns the value referenced by the given value Index. |
| 1297 Ice::Operand *getOperand(NaClBcIndexSize_t Index) { | 1297 Ice::Operand *getOperand(NaClBcIndexSize_t Index) { |
| 1298 if (Index < CachedNumGlobalValueIDs) { | 1298 if (Index < CachedNumGlobalValueIDs) { |
| 1299 return Context->getGlobalConstantByID(Index); | 1299 return Context->getGlobalConstantByID(Index); |
| 1300 } | 1300 } |
| 1301 if (isIRGenerationDisabled()) | |
| 1302 return nullptr; | |
| 1301 NaClBcIndexSize_t LocalIndex = Index - CachedNumGlobalValueIDs; | 1303 NaClBcIndexSize_t LocalIndex = Index - CachedNumGlobalValueIDs; |
| 1304 if (LocalIndex >= LocalOperands.size()) | |
| 1305 reportGetOperandUndefined(Index); | |
| 1302 Ice::Operand *Op = LocalOperands[LocalIndex]; | 1306 Ice::Operand *Op = LocalOperands[LocalIndex]; |
| 1303 if (Op == nullptr) { | 1307 if (Op == nullptr) |
| 1304 if (isIRGenerationDisabled()) | 1308 reportGetOperandUndefined(Index); |
| 1305 return nullptr; | |
| 1306 std::string Buffer; | |
| 1307 raw_string_ostream StrBuf(Buffer); | |
| 1308 StrBuf << "Value index " << Index << " not defined!"; | |
| 1309 Fatal(StrBuf.str()); | |
| 1310 } | |
| 1311 return Op; | 1309 return Op; |
| 1312 } | 1310 } |
| 1313 | 1311 |
| 1314 private: | 1312 private: |
| 1315 Ice::TimerMarker Timer; | 1313 Ice::TimerMarker Timer; |
| 1316 // The number of words in the bitstream defining the function block. | 1314 // The number of words in the bitstream defining the function block. |
| 1317 uint64_t NumBytesDefiningFunction = 0; | 1315 uint64_t NumBytesDefiningFunction = 0; |
| 1318 // Maximum number of records that can appear in the function block, based on | 1316 // Maximum number of records that can appear in the function block, based on |
| 1319 // the number of bytes defining the function block. | 1317 // the number of bytes defining the function block. |
| 1320 uint64_t MaxRecordsInBlock = 0; | 1318 uint64_t MaxRecordsInBlock = 0; |
| (...skipping 676 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1997 // for the badly formed instruction is not needed. Hence, if Ty is | 1995 // for the badly formed instruction is not needed. Hence, if Ty is |
| 1998 // void, an error instruction is not appended. | 1996 // void, an error instruction is not appended. |
| 1999 void appendErrorInstruction(Ice::Type Ty) { | 1997 void appendErrorInstruction(Ice::Type Ty) { |
| 2000 // Note: we don't worry about downstream translation errors because | 1998 // Note: we don't worry about downstream translation errors because |
| 2001 // the function will not be translated if any errors occur. | 1999 // the function will not be translated if any errors occur. |
| 2002 if (Ty == Ice::IceType_void) | 2000 if (Ty == Ice::IceType_void) |
| 2003 return; | 2001 return; |
| 2004 Ice::Variable *Var = getNextInstVar(Ty); | 2002 Ice::Variable *Var = getNextInstVar(Ty); |
| 2005 CurrentNode->appendInst(Ice::InstAssign::create(Func.get(), Var, Var)); | 2003 CurrentNode->appendInst(Ice::InstAssign::create(Func.get(), Var, Var)); |
| 2006 } | 2004 } |
| 2005 | |
| 2006 Ice::Operand *reportGetOperandUndefined(NaClBcIndexSize_t Index); | |
|
Jim Stichnoth
2015/09/16 19:57:41
Seems a little odd not to just provide the definit
Karl
2015/09/16 20:47:29
Done.
| |
| 2007 }; | 2007 }; |
| 2008 | 2008 |
| 2009 Ice::Operand * | |
| 2010 FunctionParser::reportGetOperandUndefined(NaClBcIndexSize_t Index) { | |
| 2011 std::string Buffer; | |
| 2012 raw_string_ostream StrBuf(Buffer); | |
| 2013 StrBuf << "Value index " << Index << " not defined!"; | |
| 2014 Fatal(StrBuf.str()); | |
| 2015 } | |
| 2016 | |
| 2009 void FunctionParser::ExitBlock() { | 2017 void FunctionParser::ExitBlock() { |
| 2010 // Check if the last instruction in the function was terminating. | 2018 // Check if the last instruction in the function was terminating. |
| 2011 if (!InstIsTerminating) { | 2019 if (!InstIsTerminating) { |
| 2012 Error("Last instruction in function not terminator"); | 2020 Error("Last instruction in function not terminator"); |
| 2013 if (isIRGenerationDisabled()) | 2021 if (isIRGenerationDisabled()) |
| 2014 return; | 2022 return; |
| 2015 // Recover by inserting an unreachable instruction. | 2023 // Recover by inserting an unreachable instruction. |
| 2016 CurrentNode->appendInst(Ice::InstUnreachable::create(Func.get())); | 2024 CurrentNode->appendInst(Ice::InstUnreachable::create(Func.get())); |
| 2017 } | 2025 } |
| 2018 ++CurrentBbIndex; | 2026 ++CurrentBbIndex; |
| (...skipping 1152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3171 } | 3179 } |
| 3172 if (InputStreamFile.getBitcodeBytes().getExtent() % 4 != 0) { | 3180 if (InputStreamFile.getBitcodeBytes().getExtent() % 4 != 0) { |
| 3173 ErrStream | 3181 ErrStream |
| 3174 << IRFilename | 3182 << IRFilename |
| 3175 << ": Bitcode stream should be a multiple of 4 bytes in length.\n"; | 3183 << ": Bitcode stream should be a multiple of 4 bytes in length.\n"; |
| 3176 llvm::report_fatal_error("Bitcode stream should be a multiple of 4 bytes"); | 3184 llvm::report_fatal_error("Bitcode stream should be a multiple of 4 bytes"); |
| 3177 } | 3185 } |
| 3178 } | 3186 } |
| 3179 | 3187 |
| 3180 } // end of namespace Ice | 3188 } // end of namespace Ice |
| OLD | NEW |