| 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 1265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1276 } | 1276 } |
| 1277 | 1277 |
| 1278 // Set the next constant ID to the given constant C. | 1278 // Set the next constant ID to the given constant C. |
| 1279 void setNextConstantID(Ice::Constant *C) { setNextLocalInstIndex(C); } | 1279 void setNextConstantID(Ice::Constant *C) { setNextLocalInstIndex(C); } |
| 1280 | 1280 |
| 1281 // Returns the value referenced by the given value Index. | 1281 // Returns the value referenced by the given value Index. |
| 1282 Ice::Operand *getOperand(NaClBcIndexSize_t Index) { | 1282 Ice::Operand *getOperand(NaClBcIndexSize_t Index) { |
| 1283 if (Index < CachedNumGlobalValueIDs) { | 1283 if (Index < CachedNumGlobalValueIDs) { |
| 1284 return Context->getGlobalConstantByID(Index); | 1284 return Context->getGlobalConstantByID(Index); |
| 1285 } | 1285 } |
| 1286 if (isIRGenerationDisabled()) |
| 1287 return nullptr; |
| 1286 NaClBcIndexSize_t LocalIndex = Index - CachedNumGlobalValueIDs; | 1288 NaClBcIndexSize_t LocalIndex = Index - CachedNumGlobalValueIDs; |
| 1289 if (LocalIndex >= LocalOperands.size()) |
| 1290 reportGetOperandUndefined(Index); |
| 1287 Ice::Operand *Op = LocalOperands[LocalIndex]; | 1291 Ice::Operand *Op = LocalOperands[LocalIndex]; |
| 1288 if (Op == nullptr) { | 1292 if (Op == nullptr) |
| 1289 if (isIRGenerationDisabled()) | 1293 reportGetOperandUndefined(Index); |
| 1290 return nullptr; | |
| 1291 std::string Buffer; | |
| 1292 raw_string_ostream StrBuf(Buffer); | |
| 1293 StrBuf << "Value index " << Index << " not defined!"; | |
| 1294 Fatal(StrBuf.str()); | |
| 1295 } | |
| 1296 return Op; | 1294 return Op; |
| 1297 } | 1295 } |
| 1298 | 1296 |
| 1299 private: | 1297 private: |
| 1300 Ice::TimerMarker Timer; | 1298 Ice::TimerMarker Timer; |
| 1301 // The number of words in the bitstream defining the function block. | 1299 // The number of words in the bitstream defining the function block. |
| 1302 uint64_t NumBytesDefiningFunction = 0; | 1300 uint64_t NumBytesDefiningFunction = 0; |
| 1303 // Maximum number of records that can appear in the function block, based on | 1301 // Maximum number of records that can appear in the function block, based on |
| 1304 // the number of bytes defining the function block. | 1302 // the number of bytes defining the function block. |
| 1305 uint64_t MaxRecordsInBlock = 0; | 1303 uint64_t MaxRecordsInBlock = 0; |
| (...skipping 668 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1974 // cases, a placeholder value for the badly formed instruction is not needed. | 1972 // cases, a placeholder value for the badly formed instruction is not needed. |
| 1975 // Hence, if Ty is void, an error instruction is not appended. | 1973 // Hence, if Ty is void, an error instruction is not appended. |
| 1976 void appendErrorInstruction(Ice::Type Ty) { | 1974 void appendErrorInstruction(Ice::Type Ty) { |
| 1977 // Note: we don't worry about downstream translation errors because the | 1975 // Note: we don't worry about downstream translation errors because the |
| 1978 // function will not be translated if any errors occur. | 1976 // function will not be translated if any errors occur. |
| 1979 if (Ty == Ice::IceType_void) | 1977 if (Ty == Ice::IceType_void) |
| 1980 return; | 1978 return; |
| 1981 Ice::Variable *Var = getNextInstVar(Ty); | 1979 Ice::Variable *Var = getNextInstVar(Ty); |
| 1982 CurrentNode->appendInst(Ice::InstAssign::create(Func.get(), Var, Var)); | 1980 CurrentNode->appendInst(Ice::InstAssign::create(Func.get(), Var, Var)); |
| 1983 } | 1981 } |
| 1982 |
| 1983 Ice::Operand *reportGetOperandUndefined(NaClBcIndexSize_t Index) { |
| 1984 std::string Buffer; |
| 1985 raw_string_ostream StrBuf(Buffer); |
| 1986 StrBuf << "Value index " << Index << " not defined!"; |
| 1987 Fatal(StrBuf.str()); |
| 1988 } |
| 1984 }; | 1989 }; |
| 1985 | 1990 |
| 1986 void FunctionParser::ExitBlock() { | 1991 void FunctionParser::ExitBlock() { |
| 1987 // Check if the last instruction in the function was terminating. | 1992 // Check if the last instruction in the function was terminating. |
| 1988 if (!InstIsTerminating) { | 1993 if (!InstIsTerminating) { |
| 1989 Error("Last instruction in function not terminator"); | 1994 Error("Last instruction in function not terminator"); |
| 1990 if (isIRGenerationDisabled()) | 1995 if (isIRGenerationDisabled()) |
| 1991 return; | 1996 return; |
| 1992 // Recover by inserting an unreachable instruction. | 1997 // Recover by inserting an unreachable instruction. |
| 1993 CurrentNode->appendInst(Ice::InstUnreachable::create(Func.get())); | 1998 CurrentNode->appendInst(Ice::InstUnreachable::create(Func.get())); |
| (...skipping 1152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3146 } | 3151 } |
| 3147 if (InputStreamFile.getBitcodeBytes().getExtent() % 4 != 0) { | 3152 if (InputStreamFile.getBitcodeBytes().getExtent() % 4 != 0) { |
| 3148 ErrStream | 3153 ErrStream |
| 3149 << IRFilename | 3154 << IRFilename |
| 3150 << ": Bitcode stream should be a multiple of 4 bytes in length.\n"; | 3155 << ": Bitcode stream should be a multiple of 4 bytes in length.\n"; |
| 3151 llvm::report_fatal_error("Bitcode stream should be a multiple of 4 bytes"); | 3156 llvm::report_fatal_error("Bitcode stream should be a multiple of 4 bytes"); |
| 3152 } | 3157 } |
| 3153 } | 3158 } |
| 3154 | 3159 |
| 3155 } // end of namespace Ice | 3160 } // end of namespace Ice |
| OLD | NEW |