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 // This file implements the PNaCl bitcode file to Ice, to machine code | 10 // This file implements the PNaCl bitcode file to Ice, to machine code |
(...skipping 19 matching lines...) Expand all Loading... |
30 #include "IceGlobalInits.h" | 30 #include "IceGlobalInits.h" |
31 #include "IceInst.h" | 31 #include "IceInst.h" |
32 #include "IceOperand.h" | 32 #include "IceOperand.h" |
33 #include "PNaClTranslator.h" | 33 #include "PNaClTranslator.h" |
34 | 34 |
35 #include <memory> | 35 #include <memory> |
36 | 36 |
37 namespace { | 37 namespace { |
38 using namespace llvm; | 38 using namespace llvm; |
39 | 39 |
40 // TODO(kschimpf) Remove error recovery once implementation complete. | |
41 static cl::opt<bool> AllowErrorRecovery( | |
42 "allow-pnacl-reader-error-recovery", | |
43 cl::desc("Allow error recovery when reading PNaCl bitcode."), | |
44 cl::init(false)); | |
45 | |
46 // Models elements in the list of types defined in the types block. | 40 // Models elements in the list of types defined in the types block. |
47 // These elements can be undefined, a (simple) type, or a function type | 41 // These elements can be undefined, a (simple) type, or a function type |
48 // signature. Note that an extended type is undefined on construction. | 42 // signature. Note that an extended type is undefined on construction. |
49 // Use methods setAsSimpleType and setAsFuncSigType to define | 43 // Use methods setAsSimpleType and setAsFuncSigType to define |
50 // the extended type. | 44 // the extended type. |
51 class ExtendedType { | 45 class ExtendedType { |
52 // ExtendedType(const ExtendedType &Ty) = delete; | 46 // ExtendedType(const ExtendedType &Ty) = delete; |
53 ExtendedType &operator=(const ExtendedType &Ty) = delete; | 47 ExtendedType &operator=(const ExtendedType &Ty) = delete; |
54 public: | 48 public: |
55 /// Discriminator for LLVM-style RTTI. | 49 /// Discriminator for LLVM-style RTTI. |
(...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
433 | 427 |
434 // Reports that there is no corresponding ICE type for LLVMTy, and | 428 // Reports that there is no corresponding ICE type for LLVMTy, and |
435 // returns ICE::IceType_void. | 429 // returns ICE::IceType_void. |
436 Ice::Type convertToIceTypeError(Type *LLVMTy); | 430 Ice::Type convertToIceTypeError(Type *LLVMTy); |
437 }; | 431 }; |
438 | 432 |
439 bool TopLevelParser::Error(const std::string &Message) { | 433 bool TopLevelParser::Error(const std::string &Message) { |
440 ErrorStatus = true; | 434 ErrorStatus = true; |
441 ++NumErrors; | 435 ++NumErrors; |
442 NaClBitcodeParser::Error(Message); | 436 NaClBitcodeParser::Error(Message); |
443 if (!AllowErrorRecovery) | 437 if (!Translator.getFlags().AllowErrorRecovery) |
444 report_fatal_error("Unable to continue"); | 438 report_fatal_error("Unable to continue"); |
445 return true; | 439 return true; |
446 } | 440 } |
447 | 441 |
448 void TopLevelParser::reportBadTypeIDAs(unsigned ID, const ExtendedType *Ty, | 442 void TopLevelParser::reportBadTypeIDAs(unsigned ID, const ExtendedType *Ty, |
449 ExtendedType::TypeKind WantedType) { | 443 ExtendedType::TypeKind WantedType) { |
450 std::string Buffer; | 444 std::string Buffer; |
451 raw_string_ostream StrBuf(Buffer); | 445 raw_string_ostream StrBuf(Buffer); |
452 if (Ty == nullptr) { | 446 if (Ty == nullptr) { |
453 StrBuf << "Can't find extended type for type id: " << ID; | 447 StrBuf << "Can't find extended type for type id: " << ID; |
(...skipping 2506 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2960 void PNaClTranslator::translate(const std::string &IRFilename) { | 2954 void PNaClTranslator::translate(const std::string &IRFilename) { |
2961 ErrorOr<std::unique_ptr<MemoryBuffer>> ErrOrFile = | 2955 ErrorOr<std::unique_ptr<MemoryBuffer>> ErrOrFile = |
2962 MemoryBuffer::getFileOrSTDIN(IRFilename); | 2956 MemoryBuffer::getFileOrSTDIN(IRFilename); |
2963 if (std::error_code EC = ErrOrFile.getError()) { | 2957 if (std::error_code EC = ErrOrFile.getError()) { |
2964 errs() << "Error reading '" << IRFilename << "': " << EC.message() << "\n"; | 2958 errs() << "Error reading '" << IRFilename << "': " << EC.message() << "\n"; |
2965 ErrorStatus = true; | 2959 ErrorStatus = true; |
2966 return; | 2960 return; |
2967 } | 2961 } |
2968 | 2962 |
2969 std::unique_ptr<MemoryBuffer> MemBuf(ErrOrFile.get().release()); | 2963 std::unique_ptr<MemoryBuffer> MemBuf(ErrOrFile.get().release()); |
| 2964 translateBuffer(IRFilename, MemBuf.get()); |
| 2965 } |
| 2966 |
| 2967 void PNaClTranslator::translateBuffer(const std::string &IRFilename, |
| 2968 MemoryBuffer *MemBuf) { |
2970 if (MemBuf->getBufferSize() % 4 != 0) { | 2969 if (MemBuf->getBufferSize() % 4 != 0) { |
2971 errs() << IRFilename | 2970 errs() << IRFilename |
2972 << ": Bitcode stream should be a multiple of 4 bytes in length.\n"; | 2971 << ": Bitcode stream should be a multiple of 4 bytes in length.\n"; |
2973 ErrorStatus = true; | 2972 ErrorStatus = true; |
2974 return; | 2973 return; |
2975 } | 2974 } |
2976 | 2975 |
2977 const unsigned char *BufPtr = (const unsigned char *)MemBuf->getBufferStart(); | 2976 const unsigned char *BufPtr = (const unsigned char *)MemBuf->getBufferStart(); |
2978 const unsigned char *EndBufPtr = BufPtr + MemBuf->getBufferSize(); | 2977 const unsigned char *EndBufPtr = BufPtr + MemBuf->getBufferSize(); |
2979 | 2978 |
(...skipping 21 matching lines...) Expand all Loading... |
3001 | 3000 |
3002 if (TopLevelBlocks != 1) { | 3001 if (TopLevelBlocks != 1) { |
3003 errs() << IRFilename | 3002 errs() << IRFilename |
3004 << ": Contains more than one module. Found: " << TopLevelBlocks | 3003 << ": Contains more than one module. Found: " << TopLevelBlocks |
3005 << "\n"; | 3004 << "\n"; |
3006 ErrorStatus = true; | 3005 ErrorStatus = true; |
3007 } | 3006 } |
3008 } | 3007 } |
3009 | 3008 |
3010 } // end of namespace Ice | 3009 } // end of namespace Ice |
OLD | NEW |