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

Side by Side Diff: src/PNaClTranslator.cpp

Issue 607443003: Subzero: Enable the C++11 build. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Change LLVM_OVERRIDE to override. Remove assembler padding. Created 6 years, 2 months 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 unified diff | Download patch
« no previous file with comments | « src/IceTypeConverter.cpp ('k') | src/assembler_ia32.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 : NaClBitcodeParser(Cursor), Translator(Translator), 59 : NaClBitcodeParser(Cursor), Translator(Translator),
60 Mod(new Module(InputName, getGlobalContext())), DL(PNaClDataLayout), 60 Mod(new Module(InputName, getGlobalContext())), DL(PNaClDataLayout),
61 Header(Header), TypeConverter(getLLVMContext()), 61 Header(Header), TypeConverter(getLLVMContext()),
62 ErrorStatus(ErrorStatus), NumErrors(0), NumFunctionIds(0), 62 ErrorStatus(ErrorStatus), NumErrors(0), NumFunctionIds(0),
63 NumFunctionBlocks(0), 63 NumFunctionBlocks(0),
64 GlobalVarPlaceHolderType(convertToLLVMType(Ice::IceType_i8)) { 64 GlobalVarPlaceHolderType(convertToLLVMType(Ice::IceType_i8)) {
65 Mod->setDataLayout(PNaClDataLayout); 65 Mod->setDataLayout(PNaClDataLayout);
66 setErrStream(Translator.getContext()->getStrDump()); 66 setErrStream(Translator.getContext()->getStrDump());
67 } 67 }
68 68
69 virtual ~TopLevelParser() {} 69 ~TopLevelParser() override {}
70 LLVM_OVERRIDE;
71 70
72 Ice::Translator &getTranslator() { return Translator; } 71 Ice::Translator &getTranslator() { return Translator; }
73 72
74 // Generates error with given Message. Always returns true. 73 // Generates error with given Message. Always returns true.
75 virtual bool Error(const std::string &Message) LLVM_OVERRIDE { 74 bool Error(const std::string &Message) override {
76 ErrorStatus = true; 75 ErrorStatus = true;
77 ++NumErrors; 76 ++NumErrors;
78 NaClBitcodeParser::Error(Message); 77 NaClBitcodeParser::Error(Message);
79 if (!AllowErrorRecovery) 78 if (!AllowErrorRecovery)
80 report_fatal_error("Unable to continue"); 79 report_fatal_error("Unable to continue");
81 return true; 80 return true;
82 } 81 }
83 82
84 /// Returns the number of errors found while parsing the bitcode 83 /// Returns the number of errors found while parsing the bitcode
85 /// file. 84 /// file.
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 unsigned NumFunctionIds; 273 unsigned NumFunctionIds;
275 // The number of function blocks (processed so far). 274 // The number of function blocks (processed so far).
276 unsigned NumFunctionBlocks; 275 unsigned NumFunctionBlocks;
277 // The list of value IDs (in the order found) of defining function 276 // The list of value IDs (in the order found) of defining function
278 // addresses. 277 // addresses.
279 std::vector<unsigned> DefiningFunctionsList; 278 std::vector<unsigned> DefiningFunctionsList;
280 // Cached global variable placeholder type. Used for all forward 279 // Cached global variable placeholder type. Used for all forward
281 // references to global variable addresses. 280 // references to global variable addresses.
282 Type *GlobalVarPlaceHolderType; 281 Type *GlobalVarPlaceHolderType;
283 282
284 virtual bool ParseBlock(unsigned BlockID) LLVM_OVERRIDE; 283 bool ParseBlock(unsigned BlockID) override;
285 284
286 /// Reports that type ID is undefined, and then returns 285 /// Reports that type ID is undefined, and then returns
287 /// the void type. 286 /// the void type.
288 Type *reportTypeIDAsUndefined(unsigned ID); 287 Type *reportTypeIDAsUndefined(unsigned ID);
289 288
290 /// Reports error about bad call to setTypeID. 289 /// Reports error about bad call to setTypeID.
291 void reportBadSetTypeID(unsigned ID, Type *Ty); 290 void reportBadSetTypeID(unsigned ID, Type *Ty);
292 291
293 // Reports that there is no corresponding ICE type for LLVMTy, and 292 // Reports that there is no corresponding ICE type for LLVMTy, and
294 // returns ICE::IceType_void. 293 // returns ICE::IceType_void.
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 // Base class for parsing blocks within the bitcode file. Note: 331 // Base class for parsing blocks within the bitcode file. Note:
333 // Because this is the base class of block parsers, we generate error 332 // Because this is the base class of block parsers, we generate error
334 // messages if ParseBlock or ParseRecord is not overridden in derived 333 // messages if ParseBlock or ParseRecord is not overridden in derived
335 // classes. 334 // classes.
336 class BlockParserBaseClass : public NaClBitcodeParser { 335 class BlockParserBaseClass : public NaClBitcodeParser {
337 public: 336 public:
338 // Constructor for the top-level module block parser. 337 // Constructor for the top-level module block parser.
339 BlockParserBaseClass(unsigned BlockID, TopLevelParser *Context) 338 BlockParserBaseClass(unsigned BlockID, TopLevelParser *Context)
340 : NaClBitcodeParser(BlockID, Context), Context(Context) {} 339 : NaClBitcodeParser(BlockID, Context), Context(Context) {}
341 340
342 virtual ~BlockParserBaseClass() LLVM_OVERRIDE {} 341 ~BlockParserBaseClass() override {}
343 342
344 protected: 343 protected:
345 // The context parser that contains the decoded state. 344 // The context parser that contains the decoded state.
346 TopLevelParser *Context; 345 TopLevelParser *Context;
347 346
348 // Constructor for nested block parsers. 347 // Constructor for nested block parsers.
349 BlockParserBaseClass(unsigned BlockID, BlockParserBaseClass *EnclosingParser) 348 BlockParserBaseClass(unsigned BlockID, BlockParserBaseClass *EnclosingParser)
350 : NaClBitcodeParser(BlockID, EnclosingParser), 349 : NaClBitcodeParser(BlockID, EnclosingParser),
351 Context(EnclosingParser->Context) {} 350 Context(EnclosingParser->Context) {}
352 351
353 // Gets the translator associated with the bitcode parser. 352 // Gets the translator associated with the bitcode parser.
354 Ice::Translator &getTranslator() const { return Context->getTranslator(); } 353 Ice::Translator &getTranslator() const { return Context->getTranslator(); }
355 354
356 const Ice::ClFlags &getFlags() const { return getTranslator().getFlags(); } 355 const Ice::ClFlags &getFlags() const { return getTranslator().getFlags(); }
357 356
358 // Generates an error Message with the bit address prefixed to it. 357 // Generates an error Message with the bit address prefixed to it.
359 virtual bool Error(const std::string &Message) LLVM_OVERRIDE { 358 bool Error(const std::string &Message) override {
360 uint64_t Bit = Record.GetStartBit() + Context->getHeaderSize() * 8; 359 uint64_t Bit = Record.GetStartBit() + Context->getHeaderSize() * 8;
361 std::string Buffer; 360 std::string Buffer;
362 raw_string_ostream StrBuf(Buffer); 361 raw_string_ostream StrBuf(Buffer);
363 StrBuf << "(" << format("%" PRIu64 ":%u", (Bit / 8), 362 StrBuf << "(" << format("%" PRIu64 ":%u", (Bit / 8),
364 static_cast<unsigned>(Bit % 8)) << ") " << Message; 363 static_cast<unsigned>(Bit % 8)) << ") " << Message;
365 return Context->Error(StrBuf.str()); 364 return Context->Error(StrBuf.str());
366 } 365 }
367 366
368 // Default implementation. Reports that block is unknown and skips 367 // Default implementation. Reports that block is unknown and skips
369 // its contents. 368 // its contents.
370 virtual bool ParseBlock(unsigned BlockID) LLVM_OVERRIDE; 369 bool ParseBlock(unsigned BlockID) override;
371 370
372 // Default implementation. Reports that the record is not 371 // Default implementation. Reports that the record is not
373 // understood. 372 // understood.
374 virtual void ProcessRecord() LLVM_OVERRIDE; 373 void ProcessRecord() override;
375 374
376 // Checks if the size of the record is Size. Return true if valid. 375 // Checks if the size of the record is Size. Return true if valid.
377 // Otherwise generates an error and returns false. 376 // Otherwise generates an error and returns false.
378 bool isValidRecordSize(unsigned Size, const char *RecordName) { 377 bool isValidRecordSize(unsigned Size, const char *RecordName) {
379 const NaClBitcodeRecord::RecordVector &Values = Record.GetValues(); 378 const NaClBitcodeRecord::RecordVector &Values = Record.GetValues();
380 if (Values.size() == Size) 379 if (Values.size() == Size)
381 return true; 380 return true;
382 ReportRecordSizeError(Size, RecordName, NULL); 381 ReportRecordSizeError(Size, RecordName, NULL);
383 return false; 382 return false;
384 } 383 }
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
458 StrBuf << "Don't know how to process record: " << Record; 457 StrBuf << "Don't know how to process record: " << Record;
459 Error(StrBuf.str()); 458 Error(StrBuf.str());
460 } 459 }
461 460
462 // Class to parse a types block. 461 // Class to parse a types block.
463 class TypesParser : public BlockParserBaseClass { 462 class TypesParser : public BlockParserBaseClass {
464 public: 463 public:
465 TypesParser(unsigned BlockID, BlockParserBaseClass *EnclosingParser) 464 TypesParser(unsigned BlockID, BlockParserBaseClass *EnclosingParser)
466 : BlockParserBaseClass(BlockID, EnclosingParser), NextTypeId(0) {} 465 : BlockParserBaseClass(BlockID, EnclosingParser), NextTypeId(0) {}
467 466
468 ~TypesParser() LLVM_OVERRIDE {} 467 ~TypesParser() override {}
469 468
470 private: 469 private:
471 // The type ID that will be associated with the next type defining 470 // The type ID that will be associated with the next type defining
472 // record in the types block. 471 // record in the types block.
473 unsigned NextTypeId; 472 unsigned NextTypeId;
474 473
475 virtual void ProcessRecord() LLVM_OVERRIDE; 474 void ProcessRecord() override;
476 }; 475 };
477 476
478 void TypesParser::ProcessRecord() { 477 void TypesParser::ProcessRecord() {
479 Type *Ty = NULL; 478 Type *Ty = NULL;
480 const NaClBitcodeRecord::RecordVector &Values = Record.GetValues(); 479 const NaClBitcodeRecord::RecordVector &Values = Record.GetValues();
481 switch (Record.GetCode()) { 480 switch (Record.GetCode()) {
482 case naclbitc::TYPE_CODE_NUMENTRY: 481 case naclbitc::TYPE_CODE_NUMENTRY:
483 // NUMENTRY: [numentries] 482 // NUMENTRY: [numentries]
484 if (!isValidRecordSize(1, "Type count")) 483 if (!isValidRecordSize(1, "Type count"))
485 return; 484 return;
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
558 557
559 /// Parses the globals block (i.e. global variables). 558 /// Parses the globals block (i.e. global variables).
560 class GlobalsParser : public BlockParserBaseClass { 559 class GlobalsParser : public BlockParserBaseClass {
561 public: 560 public:
562 GlobalsParser(unsigned BlockID, BlockParserBaseClass *EnclosingParser) 561 GlobalsParser(unsigned BlockID, BlockParserBaseClass *EnclosingParser)
563 : BlockParserBaseClass(BlockID, EnclosingParser), InitializersNeeded(0), 562 : BlockParserBaseClass(BlockID, EnclosingParser), InitializersNeeded(0),
564 Alignment(1), IsConstant(false) { 563 Alignment(1), IsConstant(false) {
565 NextGlobalID = Context->getNumFunctionIDs(); 564 NextGlobalID = Context->getNumFunctionIDs();
566 } 565 }
567 566
568 virtual ~GlobalsParser() LLVM_OVERRIDE {} 567 ~GlobalsParser() override {}
569 568
570 private: 569 private:
571 // Holds the sequence of initializers for the global. 570 // Holds the sequence of initializers for the global.
572 SmallVector<Constant *, 10> Initializers; 571 SmallVector<Constant *, 10> Initializers;
573 572
574 // Keeps track of how many initializers are expected for 573 // Keeps track of how many initializers are expected for
575 // the global variable being built. 574 // the global variable being built.
576 unsigned InitializersNeeded; 575 unsigned InitializersNeeded;
577 576
578 // The alignment assumed for the global variable being built. 577 // The alignment assumed for the global variable being built.
579 unsigned Alignment; 578 unsigned Alignment;
580 579
581 // True if the global variable being built is a constant. 580 // True if the global variable being built is a constant.
582 bool IsConstant; 581 bool IsConstant;
583 582
584 // The index of the next global variable. 583 // The index of the next global variable.
585 unsigned NextGlobalID; 584 unsigned NextGlobalID;
586 585
587 virtual void ExitBlock() LLVM_OVERRIDE { 586 void ExitBlock() override {
588 verifyNoMissingInitializers(); 587 verifyNoMissingInitializers();
589 unsigned NumIDs = Context->getNumGlobalValueIDs(); 588 unsigned NumIDs = Context->getNumGlobalValueIDs();
590 if (NextGlobalID < NumIDs) { 589 if (NextGlobalID < NumIDs) {
591 unsigned NumFcnIDs = Context->getNumFunctionIDs(); 590 unsigned NumFcnIDs = Context->getNumFunctionIDs();
592 std::string Buffer; 591 std::string Buffer;
593 raw_string_ostream StrBuf(Buffer); 592 raw_string_ostream StrBuf(Buffer);
594 StrBuf << "Globals block expects " << (NumIDs - NumFcnIDs) 593 StrBuf << "Globals block expects " << (NumIDs - NumFcnIDs)
595 << " global definitions. Found: " << (NextGlobalID - NumFcnIDs); 594 << " global definitions. Found: " << (NextGlobalID - NumFcnIDs);
596 Error(StrBuf.str()); 595 Error(StrBuf.str());
597 } 596 }
598 BlockParserBaseClass::ExitBlock(); 597 BlockParserBaseClass::ExitBlock();
599 } 598 }
600 599
601 virtual void ProcessRecord() LLVM_OVERRIDE; 600 void ProcessRecord() override;
602 601
603 // Checks if the number of initializers needed is the same as the 602 // Checks if the number of initializers needed is the same as the
604 // number found in the bitcode file. If different, and error message 603 // number found in the bitcode file. If different, and error message
605 // is generated, and the internal state of the parser is fixed so 604 // is generated, and the internal state of the parser is fixed so
606 // this condition is no longer violated. 605 // this condition is no longer violated.
607 void verifyNoMissingInitializers() { 606 void verifyNoMissingInitializers() {
608 if (InitializersNeeded != Initializers.size()) { 607 if (InitializersNeeded != Initializers.size()) {
609 std::string Buffer; 608 std::string Buffer;
610 raw_string_ostream StrBuf(Buffer); 609 raw_string_ostream StrBuf(Buffer);
611 StrBuf << "Global variable @g" 610 StrBuf << "Global variable @g"
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
766 765
767 /// Base class for parsing a valuesymtab block in the bitcode file. 766 /// Base class for parsing a valuesymtab block in the bitcode file.
768 class ValuesymtabParser : public BlockParserBaseClass { 767 class ValuesymtabParser : public BlockParserBaseClass {
769 ValuesymtabParser(const ValuesymtabParser &) LLVM_DELETED_FUNCTION; 768 ValuesymtabParser(const ValuesymtabParser &) LLVM_DELETED_FUNCTION;
770 void operator=(const ValuesymtabParser &) LLVM_DELETED_FUNCTION; 769 void operator=(const ValuesymtabParser &) LLVM_DELETED_FUNCTION;
771 770
772 public: 771 public:
773 ValuesymtabParser(unsigned BlockID, BlockParserBaseClass *EnclosingParser) 772 ValuesymtabParser(unsigned BlockID, BlockParserBaseClass *EnclosingParser)
774 : BlockParserBaseClass(BlockID, EnclosingParser) {} 773 : BlockParserBaseClass(BlockID, EnclosingParser) {}
775 774
776 virtual ~ValuesymtabParser() LLVM_OVERRIDE {} 775 ~ValuesymtabParser() override {}
777 776
778 protected: 777 protected:
779 typedef SmallString<128> StringType; 778 typedef SmallString<128> StringType;
780 779
781 // Associates Name with the value defined by the given Index. 780 // Associates Name with the value defined by the given Index.
782 virtual void setValueName(uint64_t Index, StringType &Name) = 0; 781 virtual void setValueName(uint64_t Index, StringType &Name) = 0;
783 782
784 // Associates Name with the value defined by the given Index; 783 // Associates Name with the value defined by the given Index;
785 virtual void setBbName(uint64_t Index, StringType &Name) = 0; 784 virtual void setBbName(uint64_t Index, StringType &Name) = 0;
786 785
787 private: 786 private:
788 787
789 virtual void ProcessRecord() LLVM_OVERRIDE; 788 void ProcessRecord() override;
790 789
791 void ConvertToString(StringType &ConvertedName) { 790 void ConvertToString(StringType &ConvertedName) {
792 const NaClBitcodeRecord::RecordVector &Values = Record.GetValues(); 791 const NaClBitcodeRecord::RecordVector &Values = Record.GetValues();
793 for (size_t i = 1, e = Values.size(); i != e; ++i) { 792 for (size_t i = 1, e = Values.size(); i != e; ++i) {
794 ConvertedName += static_cast<char>(Values[i]); 793 ConvertedName += static_cast<char>(Values[i]);
795 } 794 }
796 } 795 }
797 }; 796 };
798 797
799 void ValuesymtabParser::ProcessRecord() { 798 void ValuesymtabParser::ProcessRecord() {
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
846 Func->setInternal(LLVMFunc->hasInternalLinkage()); 845 Func->setInternal(LLVMFunc->hasInternalLinkage());
847 CurrentNode = InstallNextBasicBlock(); 846 CurrentNode = InstallNextBasicBlock();
848 Func->setEntryNode(CurrentNode); 847 Func->setEntryNode(CurrentNode);
849 for (Function::const_arg_iterator ArgI = LLVMFunc->arg_begin(), 848 for (Function::const_arg_iterator ArgI = LLVMFunc->arg_begin(),
850 ArgE = LLVMFunc->arg_end(); 849 ArgE = LLVMFunc->arg_end();
851 ArgI != ArgE; ++ArgI) { 850 ArgI != ArgE; ++ArgI) {
852 Func->addArg(getNextInstVar(Context->convertToIceType(ArgI->getType()))); 851 Func->addArg(getNextInstVar(Context->convertToIceType(ArgI->getType())));
853 } 852 }
854 } 853 }
855 854
856 ~FunctionParser() LLVM_OVERRIDE; 855 ~FunctionParser() override;
857 856
858 // Set the next constant ID to the given constant C. 857 // Set the next constant ID to the given constant C.
859 void setNextConstantID(Ice::Constant *C) { 858 void setNextConstantID(Ice::Constant *C) {
860 setOperand(NextLocalInstIndex++, C); 859 setOperand(NextLocalInstIndex++, C);
861 } 860 }
862 861
863 private: 862 private:
864 // Timer for reading function bitcode and converting to ICE. 863 // Timer for reading function bitcode and converting to ICE.
865 Ice::Timer TConvert; 864 Ice::Timer TConvert;
866 // The corresponding ICE function defined by the function block. 865 // The corresponding ICE function defined by the function block.
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
898 } 897 }
899 std::string Buffer; 898 std::string Buffer;
900 raw_string_ostream StrBuf(Buffer); 899 raw_string_ostream StrBuf(Buffer);
901 StrBuf << InstName << " alignment greater than 2**" << AlignPowerLimit 900 StrBuf << InstName << " alignment greater than 2**" << AlignPowerLimit
902 << ". Found: 2**" << AlignPower; 901 << ". Found: 2**" << AlignPower;
903 Error(StrBuf.str()); 902 Error(StrBuf.str());
904 // Error recover with value that is always acceptable. 903 // Error recover with value that is always acceptable.
905 Alignment = 1; 904 Alignment = 1;
906 } 905 }
907 906
908 virtual bool ParseBlock(unsigned BlockID) LLVM_OVERRIDE; 907 bool ParseBlock(unsigned BlockID) override;
909 908
910 virtual void ProcessRecord() LLVM_OVERRIDE; 909 void ProcessRecord() override;
911 910
912 virtual void ExitBlock() LLVM_OVERRIDE; 911 void ExitBlock() override;
913 912
914 // Creates and appends a new basic block to the list of basic blocks. 913 // Creates and appends a new basic block to the list of basic blocks.
915 Ice::CfgNode *InstallNextBasicBlock() { return Func->makeNode(); } 914 Ice::CfgNode *InstallNextBasicBlock() { return Func->makeNode(); }
916 915
917 // Returns the Index-th basic block in the list of basic blocks. 916 // Returns the Index-th basic block in the list of basic blocks.
918 Ice::CfgNode *getBasicBlock(uint32_t Index) { 917 Ice::CfgNode *getBasicBlock(uint32_t Index) {
919 const Ice::NodeList &Nodes = Func->getNodes(); 918 const Ice::NodeList &Nodes = Func->getNodes();
920 if (Index >= Nodes.size()) { 919 if (Index >= Nodes.size()) {
921 std::string Buffer; 920 std::string Buffer;
922 raw_string_ostream StrBuf(Buffer); 921 raw_string_ostream StrBuf(Buffer);
(...skipping 1102 matching lines...) Expand 10 before | Expand all | Expand 10 after
2025 /// Parses constants within a function block. 2024 /// Parses constants within a function block.
2026 class ConstantsParser : public BlockParserBaseClass { 2025 class ConstantsParser : public BlockParserBaseClass {
2027 ConstantsParser(const ConstantsParser &) LLVM_DELETED_FUNCTION; 2026 ConstantsParser(const ConstantsParser &) LLVM_DELETED_FUNCTION;
2028 ConstantsParser &operator=(const ConstantsParser &) LLVM_DELETED_FUNCTION; 2027 ConstantsParser &operator=(const ConstantsParser &) LLVM_DELETED_FUNCTION;
2029 2028
2030 public: 2029 public:
2031 ConstantsParser(unsigned BlockID, FunctionParser *FuncParser) 2030 ConstantsParser(unsigned BlockID, FunctionParser *FuncParser)
2032 : BlockParserBaseClass(BlockID, FuncParser), FuncParser(FuncParser), 2031 : BlockParserBaseClass(BlockID, FuncParser), FuncParser(FuncParser),
2033 NextConstantType(Ice::IceType_void) {} 2032 NextConstantType(Ice::IceType_void) {}
2034 2033
2035 ~ConstantsParser() LLVM_OVERRIDE {} 2034 ~ConstantsParser() override {}
2036 2035
2037 private: 2036 private:
2038 // The parser of the function block this constants block appears in. 2037 // The parser of the function block this constants block appears in.
2039 FunctionParser *FuncParser; 2038 FunctionParser *FuncParser;
2040 // The type to use for succeeding constants. 2039 // The type to use for succeeding constants.
2041 Ice::Type NextConstantType; 2040 Ice::Type NextConstantType;
2042 2041
2043 virtual void ProcessRecord() LLVM_OVERRIDE; 2042 void ProcessRecord() override;
2044 2043
2045 Ice::GlobalContext *getContext() { return getTranslator().getContext(); } 2044 Ice::GlobalContext *getContext() { return getTranslator().getContext(); }
2046 2045
2047 // Returns true if the type to use for succeeding constants is defined. 2046 // Returns true if the type to use for succeeding constants is defined.
2048 // If false, also generates an error message. 2047 // If false, also generates an error message.
2049 bool isValidNextConstantType() { 2048 bool isValidNextConstantType() {
2050 if (NextConstantType != Ice::IceType_void) 2049 if (NextConstantType != Ice::IceType_void)
2051 return true; 2050 return true;
2052 Error("Constant record not preceded by set type record"); 2051 Error("Constant record not preceded by set type record");
2053 return false; 2052 return false;
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
2147 public: 2146 public:
2148 FunctionValuesymtabParser(unsigned BlockID, FunctionParser *EnclosingParser) 2147 FunctionValuesymtabParser(unsigned BlockID, FunctionParser *EnclosingParser)
2149 : ValuesymtabParser(BlockID, EnclosingParser) {} 2148 : ValuesymtabParser(BlockID, EnclosingParser) {}
2150 2149
2151 private: 2150 private:
2152 // Returns the enclosing function parser. 2151 // Returns the enclosing function parser.
2153 FunctionParser *getFunctionParser() const { 2152 FunctionParser *getFunctionParser() const {
2154 return reinterpret_cast<FunctionParser *>(GetEnclosingParser()); 2153 return reinterpret_cast<FunctionParser *>(GetEnclosingParser());
2155 } 2154 }
2156 2155
2157 virtual void setValueName(uint64_t Index, StringType &Name) LLVM_OVERRIDE; 2156 void setValueName(uint64_t Index, StringType &Name) override;
2158 virtual void setBbName(uint64_t Index, StringType &Name) LLVM_OVERRIDE; 2157 void setBbName(uint64_t Index, StringType &Name) override;
2159 2158
2160 // Reports that the assignment of Name to the value associated with 2159 // Reports that the assignment of Name to the value associated with
2161 // index is not possible, for the given Context. 2160 // index is not possible, for the given Context.
2162 void reportUnableToAssign(const char *Context, uint64_t Index, 2161 void reportUnableToAssign(const char *Context, uint64_t Index,
2163 StringType &Name) { 2162 StringType &Name) {
2164 std::string Buffer; 2163 std::string Buffer;
2165 raw_string_ostream StrBuf(Buffer); 2164 raw_string_ostream StrBuf(Buffer);
2166 StrBuf << "Function-local " << Context << " name '" << Name 2165 StrBuf << "Function-local " << Context << " name '" << Name
2167 << "' can't be associated with index " << Index; 2166 << "' can't be associated with index " << Index;
2168 Error(StrBuf.str()); 2167 Error(StrBuf.str());
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
2214 return BlockParserBaseClass::ParseBlock(BlockID); 2213 return BlockParserBaseClass::ParseBlock(BlockID);
2215 } 2214 }
2216 2215
2217 /// Parses the module block in the bitcode file. 2216 /// Parses the module block in the bitcode file.
2218 class ModuleParser : public BlockParserBaseClass { 2217 class ModuleParser : public BlockParserBaseClass {
2219 public: 2218 public:
2220 ModuleParser(unsigned BlockID, TopLevelParser *Context) 2219 ModuleParser(unsigned BlockID, TopLevelParser *Context)
2221 : BlockParserBaseClass(BlockID, Context), 2220 : BlockParserBaseClass(BlockID, Context),
2222 GlobalAddressNamesAndInitializersInstalled(false) {} 2221 GlobalAddressNamesAndInitializersInstalled(false) {}
2223 2222
2224 virtual ~ModuleParser() LLVM_OVERRIDE {} 2223 ~ModuleParser() override {}
2225 2224
2226 private: 2225 private:
2227 // True if we have already instaledl names for unnamed global addresses, 2226 // True if we have already instaledl names for unnamed global addresses,
2228 // and generated global constant initializers. 2227 // and generated global constant initializers.
2229 bool GlobalAddressNamesAndInitializersInstalled; 2228 bool GlobalAddressNamesAndInitializersInstalled;
2230 2229
2231 // Temporary hack to generate names for unnamed global addresses, 2230 // Temporary hack to generate names for unnamed global addresses,
2232 // and generate global constant initializers. May be called multiple 2231 // and generate global constant initializers. May be called multiple
2233 // times. Only the first call will do the installation. 2232 // times. Only the first call will do the installation.
2234 // NOTE: Doesn't handle relocations for global constant initializers. 2233 // NOTE: Doesn't handle relocations for global constant initializers.
2235 void InstallGlobalAddressNamesAndInitializers() { 2234 void InstallGlobalAddressNamesAndInitializers() {
2236 if (!GlobalAddressNamesAndInitializersInstalled) { 2235 if (!GlobalAddressNamesAndInitializersInstalled) {
2237 getTranslator().nameUnnamedGlobalAddresses(Context->getModule()); 2236 getTranslator().nameUnnamedGlobalAddresses(Context->getModule());
2238 if (!getFlags().DisableGlobals) 2237 if (!getFlags().DisableGlobals)
2239 getTranslator().convertGlobals(Context->getModule()); 2238 getTranslator().convertGlobals(Context->getModule());
2240 GlobalAddressNamesAndInitializersInstalled = true; 2239 GlobalAddressNamesAndInitializersInstalled = true;
2241 } 2240 }
2242 } 2241 }
2243 2242
2244 virtual bool ParseBlock(unsigned BlockID) LLVM_OVERRIDE; 2243 bool ParseBlock(unsigned BlockID) override;
2245 2244
2246 virtual void ExitBlock() LLVM_OVERRIDE { 2245 void ExitBlock() override {
2247 InstallGlobalAddressNamesAndInitializers(); 2246 InstallGlobalAddressNamesAndInitializers();
2248 getTranslator().emitConstants(); 2247 getTranslator().emitConstants();
2249 } 2248 }
2250 2249
2251 virtual void ProcessRecord() LLVM_OVERRIDE; 2250 void ProcessRecord() override;
2252 }; 2251 };
2253 2252
2254 class ModuleValuesymtabParser : public ValuesymtabParser { 2253 class ModuleValuesymtabParser : public ValuesymtabParser {
2255 ModuleValuesymtabParser(const ModuleValuesymtabParser &) 2254 ModuleValuesymtabParser(const ModuleValuesymtabParser &)
2256 LLVM_DELETED_FUNCTION; 2255 LLVM_DELETED_FUNCTION;
2257 void operator=(const ModuleValuesymtabParser &) LLVM_DELETED_FUNCTION; 2256 void operator=(const ModuleValuesymtabParser &) LLVM_DELETED_FUNCTION;
2258 2257
2259 public: 2258 public:
2260 ModuleValuesymtabParser(unsigned BlockID, ModuleParser *MP) 2259 ModuleValuesymtabParser(unsigned BlockID, ModuleParser *MP)
2261 : ValuesymtabParser(BlockID, MP) {} 2260 : ValuesymtabParser(BlockID, MP) {}
2262 2261
2263 virtual ~ModuleValuesymtabParser() LLVM_OVERRIDE {} 2262 ~ModuleValuesymtabParser() override {}
2264 2263
2265 private: 2264 private:
2266 virtual void setValueName(uint64_t Index, StringType &Name) LLVM_OVERRIDE; 2265 void setValueName(uint64_t Index, StringType &Name) override;
2267 virtual void setBbName(uint64_t Index, StringType &Name) LLVM_OVERRIDE; 2266 void setBbName(uint64_t Index, StringType &Name) override;
2268 }; 2267 };
2269 2268
2270 void ModuleValuesymtabParser::setValueName(uint64_t Index, StringType &Name) { 2269 void ModuleValuesymtabParser::setValueName(uint64_t Index, StringType &Name) {
2271 Value *V = Context->getGlobalValueByID(Index); 2270 Value *V = Context->getGlobalValueByID(Index);
2272 if (V == NULL) { 2271 if (V == NULL) {
2273 std::string Buffer; 2272 std::string Buffer;
2274 raw_string_ostream StrBuf(Buffer); 2273 raw_string_ostream StrBuf(Buffer);
2275 StrBuf << "Invalid global address ID in valuesymtab: " << Index; 2274 StrBuf << "Invalid global address ID in valuesymtab: " << Index;
2276 Error(StrBuf.str()); 2275 Error(StrBuf.str());
2277 return; 2276 return;
2278 } 2277 }
2279 V->setName(StringRef(Name.data(), Name.size())); 2278 V->setName(StringRef(Name.data(), Name.size()));
2280 } 2279 }
2281 2280
2282 void ModuleValuesymtabParser::setBbName(uint64_t Index, StringType &Name) { 2281 void ModuleValuesymtabParser::setBbName(uint64_t Index, StringType &Name) {
2283 std::string Buffer; 2282 std::string Buffer;
2284 raw_string_ostream StrBuf(Buffer); 2283 raw_string_ostream StrBuf(Buffer);
2285 StrBuf << "Can't define basic block name at global level: '" << Name 2284 StrBuf << "Can't define basic block name at global level: '" << Name
2286 << "' -> " << Index; 2285 << "' -> " << Index;
2287 Error(StrBuf.str()); 2286 Error(StrBuf.str());
2288 } 2287 }
2289 2288
2290 bool ModuleParser::ParseBlock(unsigned BlockID) LLVM_OVERRIDE { 2289 bool ModuleParser::ParseBlock(unsigned BlockID) {
2291 switch (BlockID) { 2290 switch (BlockID) {
2292 case naclbitc::BLOCKINFO_BLOCK_ID: 2291 case naclbitc::BLOCKINFO_BLOCK_ID:
2293 return NaClBitcodeParser::ParseBlock(BlockID); 2292 return NaClBitcodeParser::ParseBlock(BlockID);
2294 case naclbitc::TYPE_BLOCK_ID_NEW: { 2293 case naclbitc::TYPE_BLOCK_ID_NEW: {
2295 TypesParser Parser(BlockID, this); 2294 TypesParser Parser(BlockID, this);
2296 return Parser.ParseThisBlock(); 2295 return Parser.ParseThisBlock();
2297 } 2296 }
2298 case naclbitc::GLOBALVAR_BLOCK_ID: { 2297 case naclbitc::GLOBALVAR_BLOCK_ID: {
2299 GlobalsParser Parser(BlockID, this); 2298 GlobalsParser Parser(BlockID, this);
2300 return Parser.ParseThisBlock(); 2299 return Parser.ParseThisBlock();
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
2431 2430
2432 if (TopLevelBlocks != 1) { 2431 if (TopLevelBlocks != 1) {
2433 errs() << IRFilename 2432 errs() << IRFilename
2434 << ": Contains more than one module. Found: " << TopLevelBlocks 2433 << ": Contains more than one module. Found: " << TopLevelBlocks
2435 << "\n"; 2434 << "\n";
2436 ErrorStatus = true; 2435 ErrorStatus = true;
2437 } 2436 }
2438 } 2437 }
2439 2438
2440 } // end of namespace Ice 2439 } // end of namespace Ice
OLDNEW
« no previous file with comments | « src/IceTypeConverter.cpp ('k') | src/assembler_ia32.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698