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 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
161 | 161 |
162 public: | 162 public: |
163 typedef std::vector<Ice::FunctionDeclaration *> FunctionDeclarationListType; | 163 typedef std::vector<Ice::FunctionDeclaration *> FunctionDeclarationListType; |
164 | 164 |
165 TopLevelParser(Ice::Translator &Translator, NaClBitstreamCursor &Cursor, | 165 TopLevelParser(Ice::Translator &Translator, NaClBitstreamCursor &Cursor, |
166 Ice::ErrorCode &ErrorStatus) | 166 Ice::ErrorCode &ErrorStatus) |
167 : NaClBitcodeParser(Cursor), Translator(Translator), | 167 : NaClBitcodeParser(Cursor), Translator(Translator), |
168 ErrorStatus(ErrorStatus), | 168 ErrorStatus(ErrorStatus), |
169 VariableDeclarations(new Ice::VariableDeclarationList()) {} | 169 VariableDeclarations(new Ice::VariableDeclarationList()) {} |
170 | 170 |
171 ~TopLevelParser() override {} | 171 ~TopLevelParser() override = default; |
172 | 172 |
173 Ice::Translator &getTranslator() const { return Translator; } | 173 Ice::Translator &getTranslator() const { return Translator; } |
174 | 174 |
175 void setBlockParser(BlockParserBaseClass *NewBlockParser) { | 175 void setBlockParser(BlockParserBaseClass *NewBlockParser) { |
176 BlockParser = NewBlockParser; | 176 BlockParser = NewBlockParser; |
177 } | 177 } |
178 | 178 |
179 /// Generates error with given Message, occurring at BitPosition | 179 /// Generates error with given Message, occurring at BitPosition |
180 /// within the bitcode file. Always returns true. | 180 /// within the bitcode file. Always returns true. |
181 bool ErrorAt(naclbitc::ErrorLevel Level, uint64_t BitPosition, | 181 bool ErrorAt(naclbitc::ErrorLevel Level, uint64_t BitPosition, |
(...skipping 539 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
721 class TypesParser : public BlockParserBaseClass { | 721 class TypesParser : public BlockParserBaseClass { |
722 TypesParser() = delete; | 722 TypesParser() = delete; |
723 TypesParser(const TypesParser &) = delete; | 723 TypesParser(const TypesParser &) = delete; |
724 TypesParser &operator=(const TypesParser &) = delete; | 724 TypesParser &operator=(const TypesParser &) = delete; |
725 | 725 |
726 public: | 726 public: |
727 TypesParser(unsigned BlockID, BlockParserBaseClass *EnclosingParser) | 727 TypesParser(unsigned BlockID, BlockParserBaseClass *EnclosingParser) |
728 : BlockParserBaseClass(BlockID, EnclosingParser), | 728 : BlockParserBaseClass(BlockID, EnclosingParser), |
729 Timer(Ice::TimerStack::TT_parseTypes, getTranslator().getContext()) {} | 729 Timer(Ice::TimerStack::TT_parseTypes, getTranslator().getContext()) {} |
730 | 730 |
731 ~TypesParser() override {} | 731 ~TypesParser() override = default; |
732 | 732 |
733 private: | 733 private: |
734 Ice::TimerMarker Timer; | 734 Ice::TimerMarker Timer; |
735 // The type ID that will be associated with the next type defining | 735 // The type ID that will be associated with the next type defining |
736 // record in the types block. | 736 // record in the types block. |
737 unsigned NextTypeId = 0; | 737 unsigned NextTypeId = 0; |
738 | 738 |
739 void ProcessRecord() override; | 739 void ProcessRecord() override; |
740 | 740 |
741 const char *getBlockName() const override { return "type"; } | 741 const char *getBlockName() const override { return "type"; } |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
902 GlobalsParser &operator=(const GlobalsParser &) = delete; | 902 GlobalsParser &operator=(const GlobalsParser &) = delete; |
903 | 903 |
904 public: | 904 public: |
905 GlobalsParser(unsigned BlockID, BlockParserBaseClass *EnclosingParser) | 905 GlobalsParser(unsigned BlockID, BlockParserBaseClass *EnclosingParser) |
906 : BlockParserBaseClass(BlockID, EnclosingParser), | 906 : BlockParserBaseClass(BlockID, EnclosingParser), |
907 Timer(Ice::TimerStack::TT_parseGlobals, getTranslator().getContext()), | 907 Timer(Ice::TimerStack::TT_parseGlobals, getTranslator().getContext()), |
908 DummyGlobalVar( | 908 DummyGlobalVar( |
909 Ice::VariableDeclaration::create(getTranslator().getContext())), | 909 Ice::VariableDeclaration::create(getTranslator().getContext())), |
910 CurGlobalVar(DummyGlobalVar) {} | 910 CurGlobalVar(DummyGlobalVar) {} |
911 | 911 |
912 ~GlobalsParser() final {} | 912 ~GlobalsParser() final = default; |
913 | 913 |
914 const char *getBlockName() const override { return "globals"; } | 914 const char *getBlockName() const override { return "globals"; } |
915 | 915 |
916 private: | 916 private: |
917 Ice::TimerMarker Timer; | 917 Ice::TimerMarker Timer; |
918 // Keeps track of how many initializers are expected for the global variable | 918 // Keeps track of how many initializers are expected for the global variable |
919 // declaration being built. | 919 // declaration being built. |
920 unsigned InitializersNeeded = 0; | 920 unsigned InitializersNeeded = 0; |
921 | 921 |
922 // The index of the next global variable declaration. | 922 // The index of the next global variable declaration. |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1056 /// Base class for parsing a valuesymtab block in the bitcode file. | 1056 /// Base class for parsing a valuesymtab block in the bitcode file. |
1057 class ValuesymtabParser : public BlockParserBaseClass { | 1057 class ValuesymtabParser : public BlockParserBaseClass { |
1058 ValuesymtabParser() = delete; | 1058 ValuesymtabParser() = delete; |
1059 ValuesymtabParser(const ValuesymtabParser &) = delete; | 1059 ValuesymtabParser(const ValuesymtabParser &) = delete; |
1060 void operator=(const ValuesymtabParser &) = delete; | 1060 void operator=(const ValuesymtabParser &) = delete; |
1061 | 1061 |
1062 public: | 1062 public: |
1063 ValuesymtabParser(unsigned BlockID, BlockParserBaseClass *EnclosingParser) | 1063 ValuesymtabParser(unsigned BlockID, BlockParserBaseClass *EnclosingParser) |
1064 : BlockParserBaseClass(BlockID, EnclosingParser) {} | 1064 : BlockParserBaseClass(BlockID, EnclosingParser) {} |
1065 | 1065 |
1066 ~ValuesymtabParser() override {} | 1066 ~ValuesymtabParser() override = default; |
1067 | 1067 |
1068 const char *getBlockName() const override { return "valuesymtab"; } | 1068 const char *getBlockName() const override { return "valuesymtab"; } |
1069 | 1069 |
1070 protected: | 1070 protected: |
1071 typedef SmallString<128> StringType; | 1071 typedef SmallString<128> StringType; |
1072 | 1072 |
1073 // Associates Name with the value defined by the given Index. | 1073 // Associates Name with the value defined by the given Index. |
1074 virtual void setValueName(uint64_t Index, StringType &Name) = 0; | 1074 virtual void setValueName(uint64_t Index, StringType &Name) = 0; |
1075 | 1075 |
1076 // Associates Name with the value defined by the given Index; | 1076 // Associates Name with the value defined by the given Index; |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1180 if (Context->getNumErrors() == 0 && Func) { | 1180 if (Context->getNumErrors() == 0 && Func) { |
1181 getTranslator().translateFcn(std::move(Func)); | 1181 getTranslator().translateFcn(std::move(Func)); |
1182 // The translator now has ownership of Func. | 1182 // The translator now has ownership of Func. |
1183 } else { | 1183 } else { |
1184 Func.reset(); | 1184 Func.reset(); |
1185 } | 1185 } |
1186 | 1186 |
1187 return ParserResult; | 1187 return ParserResult; |
1188 } | 1188 } |
1189 | 1189 |
1190 ~FunctionParser() final {} | 1190 ~FunctionParser() final = default; |
1191 | 1191 |
1192 const char *getBlockName() const override { return "function"; } | 1192 const char *getBlockName() const override { return "function"; } |
1193 | 1193 |
1194 Ice::Cfg *getFunc() const { return Func.get(); } | 1194 Ice::Cfg *getFunc() const { return Func.get(); } |
1195 | 1195 |
1196 uint32_t getNumGlobalIDs() const { return CachedNumGlobalValueIDs; } | 1196 uint32_t getNumGlobalIDs() const { return CachedNumGlobalValueIDs; } |
1197 | 1197 |
1198 void setNextLocalInstIndex(Ice::Operand *Op) { | 1198 void setNextLocalInstIndex(Ice::Operand *Op) { |
1199 setOperand(NextLocalInstIndex++, Op); | 1199 setOperand(NextLocalInstIndex++, Op); |
1200 } | 1200 } |
(...skipping 1398 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2599 ConstantsParser() = delete; | 2599 ConstantsParser() = delete; |
2600 ConstantsParser(const ConstantsParser &) = delete; | 2600 ConstantsParser(const ConstantsParser &) = delete; |
2601 ConstantsParser &operator=(const ConstantsParser &) = delete; | 2601 ConstantsParser &operator=(const ConstantsParser &) = delete; |
2602 | 2602 |
2603 public: | 2603 public: |
2604 ConstantsParser(unsigned BlockID, FunctionParser *FuncParser) | 2604 ConstantsParser(unsigned BlockID, FunctionParser *FuncParser) |
2605 : BlockParserBaseClass(BlockID, FuncParser), | 2605 : BlockParserBaseClass(BlockID, FuncParser), |
2606 Timer(Ice::TimerStack::TT_parseConstants, getTranslator().getContext()), | 2606 Timer(Ice::TimerStack::TT_parseConstants, getTranslator().getContext()), |
2607 FuncParser(FuncParser) {} | 2607 FuncParser(FuncParser) {} |
2608 | 2608 |
2609 ~ConstantsParser() override {} | 2609 ~ConstantsParser() override = default; |
2610 | 2610 |
2611 const char *getBlockName() const override { return "constants"; } | 2611 const char *getBlockName() const override { return "constants"; } |
2612 | 2612 |
2613 private: | 2613 private: |
2614 Ice::TimerMarker Timer; | 2614 Ice::TimerMarker Timer; |
2615 // The parser of the function block this constants block appears in. | 2615 // The parser of the function block this constants block appears in. |
2616 FunctionParser *FuncParser; | 2616 FunctionParser *FuncParser; |
2617 // The type to use for succeeding constants. | 2617 // The type to use for succeeding constants. |
2618 Ice::Type NextConstantType = Ice::IceType_void; | 2618 Ice::Type NextConstantType = Ice::IceType_void; |
2619 | 2619 |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2814 ModuleParser() = delete; | 2814 ModuleParser() = delete; |
2815 ModuleParser(const ModuleParser &) = delete; | 2815 ModuleParser(const ModuleParser &) = delete; |
2816 ModuleParser &operator=(const ModuleParser &) = delete; | 2816 ModuleParser &operator=(const ModuleParser &) = delete; |
2817 | 2817 |
2818 public: | 2818 public: |
2819 ModuleParser(unsigned BlockID, TopLevelParser *Context) | 2819 ModuleParser(unsigned BlockID, TopLevelParser *Context) |
2820 : BlockParserBaseClass(BlockID, Context), | 2820 : BlockParserBaseClass(BlockID, Context), |
2821 Timer(Ice::TimerStack::TT_parseModule, | 2821 Timer(Ice::TimerStack::TT_parseModule, |
2822 Context->getTranslator().getContext()) {} | 2822 Context->getTranslator().getContext()) {} |
2823 | 2823 |
2824 ~ModuleParser() override {} | 2824 ~ModuleParser() override = default; |
2825 | 2825 |
2826 const char *getBlockName() const override { return "module"; } | 2826 const char *getBlockName() const override { return "module"; } |
2827 | 2827 |
2828 private: | 2828 private: |
2829 Ice::TimerMarker Timer; | 2829 Ice::TimerMarker Timer; |
2830 // True if we have already installed names for unnamed global declarations, | 2830 // True if we have already installed names for unnamed global declarations, |
2831 // and have generated global constant initializers. | 2831 // and have generated global constant initializers. |
2832 bool GlobalDeclarationNamesAndInitializersInstalled = false; | 2832 bool GlobalDeclarationNamesAndInitializersInstalled = false; |
2833 | 2833 |
2834 // Generates names for unnamed global addresses (i.e. functions and | 2834 // Generates names for unnamed global addresses (i.e. functions and |
(...skipping 19 matching lines...) Expand all Loading... |
2854 ModuleValuesymtabParser() = delete; | 2854 ModuleValuesymtabParser() = delete; |
2855 ModuleValuesymtabParser(const ModuleValuesymtabParser &) = delete; | 2855 ModuleValuesymtabParser(const ModuleValuesymtabParser &) = delete; |
2856 void operator=(const ModuleValuesymtabParser &) = delete; | 2856 void operator=(const ModuleValuesymtabParser &) = delete; |
2857 | 2857 |
2858 public: | 2858 public: |
2859 ModuleValuesymtabParser(unsigned BlockID, ModuleParser *MP) | 2859 ModuleValuesymtabParser(unsigned BlockID, ModuleParser *MP) |
2860 : ValuesymtabParser(BlockID, MP), | 2860 : ValuesymtabParser(BlockID, MP), |
2861 Timer(Ice::TimerStack::TT_parseModuleValuesymtabs, | 2861 Timer(Ice::TimerStack::TT_parseModuleValuesymtabs, |
2862 getTranslator().getContext()) {} | 2862 getTranslator().getContext()) {} |
2863 | 2863 |
2864 ~ModuleValuesymtabParser() override {} | 2864 ~ModuleValuesymtabParser() override = default; |
2865 | 2865 |
2866 private: | 2866 private: |
2867 Ice::TimerMarker Timer; | 2867 Ice::TimerMarker Timer; |
2868 void setValueName(uint64_t Index, StringType &Name) override; | 2868 void setValueName(uint64_t Index, StringType &Name) override; |
2869 void setBbName(uint64_t Index, StringType &Name) override; | 2869 void setBbName(uint64_t Index, StringType &Name) override; |
2870 }; | 2870 }; |
2871 | 2871 |
2872 void ModuleValuesymtabParser::setValueName(uint64_t Index, StringType &Name) { | 2872 void ModuleValuesymtabParser::setValueName(uint64_t Index, StringType &Name) { |
2873 Context->getGlobalDeclarationByID(Index) | 2873 Context->getGlobalDeclarationByID(Index) |
2874 ->setName(StringRef(Name.data(), Name.size())); | 2874 ->setName(StringRef(Name.data(), Name.size())); |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3024 } | 3024 } |
3025 if (InputStreamFile.getBitcodeBytes().getExtent() % 4 != 0) { | 3025 if (InputStreamFile.getBitcodeBytes().getExtent() % 4 != 0) { |
3026 ErrStream | 3026 ErrStream |
3027 << IRFilename | 3027 << IRFilename |
3028 << ": Bitcode stream should be a multiple of 4 bytes in length.\n"; | 3028 << ": Bitcode stream should be a multiple of 4 bytes in length.\n"; |
3029 llvm::report_fatal_error("Bitcode stream should be a multiple of 4 bytes"); | 3029 llvm::report_fatal_error("Bitcode stream should be a multiple of 4 bytes"); |
3030 } | 3030 } |
3031 } | 3031 } |
3032 | 3032 |
3033 } // end of namespace Ice | 3033 } // end of namespace Ice |
OLD | NEW |