| 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 2932 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2943 | 2943 |
| 2944 ~ModuleParser() override = default; | 2944 ~ModuleParser() override = default; |
| 2945 | 2945 |
| 2946 const char *getBlockName() const override { return "module"; } | 2946 const char *getBlockName() const override { return "module"; } |
| 2947 | 2947 |
| 2948 private: | 2948 private: |
| 2949 Ice::TimerMarker Timer; | 2949 Ice::TimerMarker Timer; |
| 2950 // True if we have already installed names for unnamed global declarations, | 2950 // True if we have already installed names for unnamed global declarations, |
| 2951 // and have generated global constant initializers. | 2951 // and have generated global constant initializers. |
| 2952 bool GlobalDeclarationNamesAndInitializersInstalled = false; | 2952 bool GlobalDeclarationNamesAndInitializersInstalled = false; |
| 2953 // True if we have already processed the symbol table for the module. |
| 2954 bool FoundValuesymtab = false; |
| 2953 | 2955 |
| 2954 // Generates names for unnamed global addresses (i.e. functions and global | 2956 // Generates names for unnamed global addresses (i.e. functions and global |
| 2955 // variables). Then lowers global variable declaration initializers to the | 2957 // variables). Then lowers global variable declaration initializers to the |
| 2956 // target. May be called multiple times. Only the first call will do the | 2958 // target. May be called multiple times. Only the first call will do the |
| 2957 // installation. | 2959 // installation. |
| 2958 void installGlobalNamesAndGlobalVarInitializers() { | 2960 void installGlobalNamesAndGlobalVarInitializers() { |
| 2959 if (!GlobalDeclarationNamesAndInitializersInstalled) { | 2961 if (!GlobalDeclarationNamesAndInitializersInstalled) { |
| 2960 Context->installGlobalNames(); | 2962 Context->installGlobalNames(); |
| 2961 Context->createValueIDs(); | 2963 Context->createValueIDs(); |
| 2962 getTranslator().lowerGlobals(Context->getGlobalVariables()); | 2964 std::unique_ptr<Ice::VariableDeclarationList> Globals = |
| 2965 Context->getGlobalVariables(); |
| 2966 if (Globals) |
| 2967 getTranslator().lowerGlobals(std::move(Globals)); |
| 2963 GlobalDeclarationNamesAndInitializersInstalled = true; | 2968 GlobalDeclarationNamesAndInitializersInstalled = true; |
| 2964 } | 2969 } |
| 2965 } | 2970 } |
| 2966 bool ParseBlock(unsigned BlockID) override; | 2971 bool ParseBlock(unsigned BlockID) override; |
| 2967 | 2972 |
| 2968 void ExitBlock() override { installGlobalNamesAndGlobalVarInitializers(); } | 2973 void ExitBlock() override { installGlobalNamesAndGlobalVarInitializers(); } |
| 2969 | 2974 |
| 2970 void ProcessRecord() override; | 2975 void ProcessRecord() override; |
| 2971 }; | 2976 }; |
| 2972 | 2977 |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3010 return NaClBitcodeParser::ParseBlock(BlockID); | 3015 return NaClBitcodeParser::ParseBlock(BlockID); |
| 3011 case naclbitc::TYPE_BLOCK_ID_NEW: { | 3016 case naclbitc::TYPE_BLOCK_ID_NEW: { |
| 3012 TypesParser Parser(BlockID, this); | 3017 TypesParser Parser(BlockID, this); |
| 3013 return Parser.ParseThisBlock(); | 3018 return Parser.ParseThisBlock(); |
| 3014 } | 3019 } |
| 3015 case naclbitc::GLOBALVAR_BLOCK_ID: { | 3020 case naclbitc::GLOBALVAR_BLOCK_ID: { |
| 3016 GlobalsParser Parser(BlockID, this); | 3021 GlobalsParser Parser(BlockID, this); |
| 3017 return Parser.ParseThisBlock(); | 3022 return Parser.ParseThisBlock(); |
| 3018 } | 3023 } |
| 3019 case naclbitc::VALUE_SYMTAB_BLOCK_ID: { | 3024 case naclbitc::VALUE_SYMTAB_BLOCK_ID: { |
| 3025 if (FoundValuesymtab) |
| 3026 Fatal("Duplicate valuesymtab in module"); |
| 3027 |
| 3028 FoundValuesymtab = true; |
| 3020 ModuleValuesymtabParser Parser(BlockID, this); | 3029 ModuleValuesymtabParser Parser(BlockID, this); |
| 3021 return Parser.ParseThisBlock(); | 3030 return Parser.ParseThisBlock(); |
| 3022 } | 3031 } |
| 3023 case naclbitc::FUNCTION_BLOCK_ID: { | 3032 case naclbitc::FUNCTION_BLOCK_ID: { |
| 3024 installGlobalNamesAndGlobalVarInitializers(); | 3033 installGlobalNamesAndGlobalVarInitializers(); |
| 3025 FunctionParser Parser(BlockID, this); | 3034 FunctionParser Parser(BlockID, this); |
| 3026 return Parser.convertFunction(); | 3035 return Parser.convertFunction(); |
| 3027 } | 3036 } |
| 3028 default: | 3037 default: |
| 3029 return BlockParserBaseClass::ParseBlock(BlockID); | 3038 return BlockParserBaseClass::ParseBlock(BlockID); |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3146 } | 3155 } |
| 3147 if (InputStreamFile.getBitcodeBytes().getExtent() % 4 != 0) { | 3156 if (InputStreamFile.getBitcodeBytes().getExtent() % 4 != 0) { |
| 3148 ErrStream | 3157 ErrStream |
| 3149 << IRFilename | 3158 << IRFilename |
| 3150 << ": Bitcode stream should be a multiple of 4 bytes in length.\n"; | 3159 << ": 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"); | 3160 llvm::report_fatal_error("Bitcode stream should be a multiple of 4 bytes"); |
| 3152 } | 3161 } |
| 3153 } | 3162 } |
| 3154 | 3163 |
| 3155 } // end of namespace Ice | 3164 } // end of namespace Ice |
| OLD | NEW |