| 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 145 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 156   TopLevelParser(const TopLevelParser &) = delete; | 156   TopLevelParser(const TopLevelParser &) = delete; | 
| 157   TopLevelParser &operator=(const TopLevelParser &) = delete; | 157   TopLevelParser &operator=(const TopLevelParser &) = delete; | 
| 158 | 158 | 
| 159 public: | 159 public: | 
| 160   typedef std::vector<Ice::FunctionDeclaration *> FunctionDeclarationListType; | 160   typedef std::vector<Ice::FunctionDeclaration *> FunctionDeclarationListType; | 
| 161 | 161 | 
| 162   TopLevelParser(Ice::Translator &Translator, NaClBitcodeHeader &Header, | 162   TopLevelParser(Ice::Translator &Translator, NaClBitcodeHeader &Header, | 
| 163                  NaClBitstreamCursor &Cursor, Ice::ErrorCode &ErrorStatus) | 163                  NaClBitstreamCursor &Cursor, Ice::ErrorCode &ErrorStatus) | 
| 164       : NaClBitcodeParser(Cursor), Translator(Translator), Header(Header), | 164       : NaClBitcodeParser(Cursor), Translator(Translator), Header(Header), | 
| 165         ErrorStatus(ErrorStatus), NumErrors(0), NextDefiningFunctionID(0), | 165         ErrorStatus(ErrorStatus), NumErrors(0), NextDefiningFunctionID(0), | 
|  | 166         VariableDeclarations(new Ice::VariableDeclarationList), | 
| 166         BlockParser(nullptr), StubbedConstCallValue(nullptr) {} | 167         BlockParser(nullptr), StubbedConstCallValue(nullptr) {} | 
| 167 | 168 | 
| 168   ~TopLevelParser() override {} | 169   ~TopLevelParser() override {} | 
| 169 | 170 | 
| 170   Ice::Translator &getTranslator() { return Translator; } | 171   Ice::Translator &getTranslator() { return Translator; } | 
| 171 | 172 | 
| 172   void setBlockParser(BlockParserBaseClass *NewBlockParser) { | 173   void setBlockParser(BlockParserBaseClass *NewBlockParser) { | 
| 173     BlockParser = NewBlockParser; | 174     BlockParser = NewBlockParser; | 
| 174   } | 175   } | 
| 175 | 176 | 
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 258   } | 259   } | 
| 259 | 260 | 
| 260   /// Returns the corresponding constant associated with a global declaration. | 261   /// Returns the corresponding constant associated with a global declaration. | 
| 261   /// (i.e. relocatable). | 262   /// (i.e. relocatable). | 
| 262   Ice::Constant *getOrCreateGlobalConstantByID(unsigned ID) { | 263   Ice::Constant *getOrCreateGlobalConstantByID(unsigned ID) { | 
| 263     // TODO(kschimpf): Can this be built when creating global initializers? | 264     // TODO(kschimpf): Can this be built when creating global initializers? | 
| 264     Ice::Constant *C; | 265     Ice::Constant *C; | 
| 265     if (ID >= ValueIDConstants.size()) { | 266     if (ID >= ValueIDConstants.size()) { | 
| 266       C = nullptr; | 267       C = nullptr; | 
| 267       unsigned ExpectedSize = | 268       unsigned ExpectedSize = | 
| 268           FunctionDeclarationList.size() + VariableDeclarations.size(); | 269           FunctionDeclarationList.size() + VariableDeclarations->size(); | 
| 269       if (ID >= ExpectedSize) | 270       if (ID >= ExpectedSize) | 
| 270         ExpectedSize = ID; | 271         ExpectedSize = ID; | 
| 271       ValueIDConstants.resize(ExpectedSize); | 272       ValueIDConstants.resize(ExpectedSize); | 
| 272     } else { | 273     } else { | 
| 273       C = ValueIDConstants[ID]; | 274       C = ValueIDConstants[ID]; | 
| 274     } | 275     } | 
| 275     if (C != nullptr) | 276     if (C != nullptr) | 
| 276       return C; | 277       return C; | 
| 277 | 278 | 
| 278     if (isIRGenerationDisabled()) { | 279     if (isIRGenerationDisabled()) { | 
| 279       ValueIDConstants[ID] = nullptr; | 280       ValueIDConstants[ID] = nullptr; | 
| 280       return nullptr; | 281       return nullptr; | 
| 281     } | 282     } | 
| 282 | 283 | 
| 283     // If reached, no such constant exists, create one. | 284     // If reached, no such constant exists, create one. | 
| 284     // TODO(kschimpf) Don't get addresses of intrinsic function declarations. | 285     // TODO(kschimpf) Don't get addresses of intrinsic function declarations. | 
| 285     Ice::GlobalDeclaration *Decl = nullptr; | 286     Ice::GlobalDeclaration *Decl = nullptr; | 
| 286     unsigned FcnIDSize = FunctionDeclarationList.size(); | 287     unsigned FcnIDSize = FunctionDeclarationList.size(); | 
| 287     bool IsUndefined = false; | 288     bool IsUndefined = false; | 
| 288     if (ID < FcnIDSize) { | 289     if (ID < FcnIDSize) { | 
| 289       Decl = FunctionDeclarationList[ID]; | 290       Decl = FunctionDeclarationList[ID]; | 
| 290       const auto Func = llvm::cast<Ice::FunctionDeclaration>(Decl); | 291       const auto Func = llvm::cast<Ice::FunctionDeclaration>(Decl); | 
| 291       IsUndefined = Func->isProto(); | 292       IsUndefined = Func->isProto(); | 
| 292     } else if ((ID - FcnIDSize) < VariableDeclarations.size()) { | 293     } else if ((ID - FcnIDSize) < VariableDeclarations->size()) { | 
| 293       Decl = VariableDeclarations[ID - FcnIDSize]; | 294       Decl = VariableDeclarations->at(ID - FcnIDSize); | 
| 294       const auto Var = llvm::cast<Ice::VariableDeclaration>(Decl); | 295       const auto Var = llvm::cast<Ice::VariableDeclaration>(Decl); | 
| 295       IsUndefined = !Var->hasInitializer(); | 296       IsUndefined = !Var->hasInitializer(); | 
| 296     } | 297     } | 
| 297     Ice::IceString Name; | 298     Ice::IceString Name; | 
| 298     bool SuppressMangling; | 299     bool SuppressMangling; | 
| 299     if (Decl) { | 300     if (Decl) { | 
| 300       Name = Decl->getName(); | 301       Name = Decl->getName(); | 
| 301       SuppressMangling = Decl->getSuppressMangling(); | 302       SuppressMangling = Decl->getSuppressMangling(); | 
| 302     } else { | 303     } else { | 
| 303       std::string Buffer; | 304       std::string Buffer; | 
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 336     Error("Unable to find function definition to stub constant calls with"); | 337     Error("Unable to find function definition to stub constant calls with"); | 
| 337     return CallValue; | 338     return CallValue; | 
| 338   } | 339   } | 
| 339 | 340 | 
| 340   /// Returns the number of function declarations in the bitcode file. | 341   /// Returns the number of function declarations in the bitcode file. | 
| 341   unsigned getNumFunctionIDs() const { return FunctionDeclarationList.size(); } | 342   unsigned getNumFunctionIDs() const { return FunctionDeclarationList.size(); } | 
| 342 | 343 | 
| 343   /// Returns the number of global declarations (i.e. IDs) defined in | 344   /// Returns the number of global declarations (i.e. IDs) defined in | 
| 344   /// the bitcode file. | 345   /// the bitcode file. | 
| 345   unsigned getNumGlobalIDs() const { | 346   unsigned getNumGlobalIDs() const { | 
| 346     return FunctionDeclarationList.size() + VariableDeclarations.size(); | 347     return FunctionDeclarationList.size() + VariableDeclarations->size(); | 
| 347   } | 348   } | 
| 348 | 349 | 
| 349   /// Creates Count global variable declarations. | 350   /// Creates Count global variable declarations. | 
| 350   void CreateGlobalVariables(size_t Count) { | 351   void CreateGlobalVariables(size_t Count) { | 
| 351     assert(VariableDeclarations.empty()); | 352     assert(VariableDeclarations->empty()); | 
| 352     for (size_t i = 0; i < Count; ++i) { | 353     for (size_t i = 0; i < Count; ++i) { | 
| 353       VariableDeclarations.push_back(Ice::VariableDeclaration::create()); | 354       VariableDeclarations->push_back(Ice::VariableDeclaration::create()); | 
| 354     } | 355     } | 
| 355   } | 356   } | 
| 356 | 357 | 
| 357   /// Returns the number of global variable declarations in the | 358   /// Returns the number of global variable declarations in the | 
| 358   /// bitcode file. | 359   /// bitcode file. | 
| 359   Ice::SizeT getNumGlobalVariables() const { | 360   Ice::SizeT getNumGlobalVariables() const { | 
| 360     return VariableDeclarations.size(); | 361     return VariableDeclarations->size(); | 
| 361   } | 362   } | 
| 362 | 363 | 
| 363   /// Returns the global variable declaration with the given index. | 364   /// Returns the global variable declaration with the given index. | 
| 364   Ice::VariableDeclaration *getGlobalVariableByID(unsigned Index) { | 365   Ice::VariableDeclaration *getGlobalVariableByID(unsigned Index) { | 
| 365     if (Index < VariableDeclarations.size()) | 366     if (Index < VariableDeclarations->size()) | 
| 366       return VariableDeclarations[Index]; | 367       return VariableDeclarations->at(Index); | 
| 367     return reportGetGlobalVariableByIDError(Index); | 368     return reportGetGlobalVariableByIDError(Index); | 
| 368   } | 369   } | 
| 369 | 370 | 
| 370   /// Returns the global declaration (variable or function) with the | 371   /// Returns the global declaration (variable or function) with the | 
| 371   /// given Index. | 372   /// given Index. | 
| 372   Ice::GlobalDeclaration *getGlobalDeclarationByID(size_t Index) { | 373   Ice::GlobalDeclaration *getGlobalDeclarationByID(size_t Index) { | 
| 373     size_t NumFunctionIds = FunctionDeclarationList.size(); | 374     size_t NumFunctionIds = FunctionDeclarationList.size(); | 
| 374     if (Index < NumFunctionIds) | 375     if (Index < NumFunctionIds) | 
| 375       return getFunctionByID(Index); | 376       return getFunctionByID(Index); | 
| 376     else | 377     else | 
| 377       return getGlobalVariableByID(Index - NumFunctionIds); | 378       return getGlobalVariableByID(Index - NumFunctionIds); | 
| 378   } | 379   } | 
| 379 | 380 | 
| 380   /// Returns the list of parsed global variable declarations. | 381   /// Returns the list of parsed global variable declarations. | 
| 381   const Ice::VariableDeclarationList &getGlobalVariables() { | 382   Ice::VariableDeclarationList *getGlobalVariables() { | 
| 382     return VariableDeclarations; | 383     return VariableDeclarations; | 
| 383   } | 384   } | 
| 384 | 385 | 
| 385 private: | 386 private: | 
| 386   // The translator associated with the parser. | 387   // The translator associated with the parser. | 
| 387   Ice::Translator &Translator; | 388   Ice::Translator &Translator; | 
| 388   // The bitcode header. | 389   // The bitcode header. | 
| 389   NaClBitcodeHeader &Header; | 390   NaClBitcodeHeader &Header; | 
| 390   // The exit status that should be set to true if an error occurs. | 391   // The exit status that should be set to true if an error occurs. | 
| 391   Ice::ErrorCode &ErrorStatus; | 392   Ice::ErrorCode &ErrorStatus; | 
| 392   // The number of errors reported. | 393   // The number of errors reported. | 
| 393   unsigned NumErrors; | 394   unsigned NumErrors; | 
| 394   // The types associated with each type ID. | 395   // The types associated with each type ID. | 
| 395   std::vector<ExtendedType> TypeIDValues; | 396   std::vector<ExtendedType> TypeIDValues; | 
| 396   // The set of functions (prototype and defined). | 397   // The set of functions (prototype and defined). | 
| 397   FunctionDeclarationListType FunctionDeclarationList; | 398   FunctionDeclarationListType FunctionDeclarationList; | 
| 398   // The ID of the next possible defined function ID in | 399   // The ID of the next possible defined function ID in | 
| 399   // FunctionDeclarationList.  FunctionDeclarationList is filled | 400   // FunctionDeclarationList.  FunctionDeclarationList is filled | 
| 400   // first. It's the set of functions (either defined or isproto). Then | 401   // first. It's the set of functions (either defined or isproto). Then | 
| 401   // function definitions are encountered/parsed and | 402   // function definitions are encountered/parsed and | 
| 402   // NextDefiningFunctionID is incremented to track the next | 403   // NextDefiningFunctionID is incremented to track the next | 
| 403   // actually-defined function. | 404   // actually-defined function. | 
| 404   size_t NextDefiningFunctionID; | 405   size_t NextDefiningFunctionID; | 
| 405   // The set of global variables. | 406   // The set of global variables. | 
| 406   Ice::VariableDeclarationList VariableDeclarations; | 407   Ice::VariableDeclarationList *VariableDeclarations; | 
| 407   // Relocatable constants associated with global declarations. | 408   // Relocatable constants associated with global declarations. | 
| 408   std::vector<Ice::Constant *> ValueIDConstants; | 409   std::vector<Ice::Constant *> ValueIDConstants; | 
| 409   // Error recovery value to use when getFuncSigTypeByID fails. | 410   // Error recovery value to use when getFuncSigTypeByID fails. | 
| 410   Ice::FuncSigType UndefinedFuncSigType; | 411   Ice::FuncSigType UndefinedFuncSigType; | 
| 411   // The block parser currently being applied. Used for error | 412   // The block parser currently being applied. Used for error | 
| 412   // reporting. | 413   // reporting. | 
| 413   BlockParserBaseClass *BlockParser; | 414   BlockParserBaseClass *BlockParser; | 
| 414   // Value to use to stub constant calls. | 415   // Value to use to stub constant calls. | 
| 415   Ice::Operand *StubbedConstCallValue; | 416   Ice::Operand *StubbedConstCallValue; | 
| 416 | 417 | 
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 488     return FunctionDeclarationList[0]; | 489     return FunctionDeclarationList[0]; | 
| 489   report_fatal_error("Unable to continue"); | 490   report_fatal_error("Unable to continue"); | 
| 490 } | 491 } | 
| 491 | 492 | 
| 492 Ice::VariableDeclaration * | 493 Ice::VariableDeclaration * | 
| 493 TopLevelParser::reportGetGlobalVariableByIDError(unsigned Index) { | 494 TopLevelParser::reportGetGlobalVariableByIDError(unsigned Index) { | 
| 494   std::string Buffer; | 495   std::string Buffer; | 
| 495   raw_string_ostream StrBuf(Buffer); | 496   raw_string_ostream StrBuf(Buffer); | 
| 496   StrBuf << "Global index " << Index | 497   StrBuf << "Global index " << Index | 
| 497          << " not allowed. Out of range. Must be less than " | 498          << " not allowed. Out of range. Must be less than " | 
| 498          << VariableDeclarations.size(); | 499          << VariableDeclarations->size(); | 
| 499   BlockError(StrBuf.str()); | 500   BlockError(StrBuf.str()); | 
| 500   // TODO(kschimpf) Remove error recovery once implementation complete. | 501   // TODO(kschimpf) Remove error recovery once implementation complete. | 
| 501   if (!VariableDeclarations.empty()) | 502   if (!VariableDeclarations->empty()) | 
| 502     return VariableDeclarations[0]; | 503     return VariableDeclarations->at(0); | 
| 503   report_fatal_error("Unable to continue"); | 504   report_fatal_error("Unable to continue"); | 
| 504 } | 505 } | 
| 505 | 506 | 
| 506 Ice::Type TopLevelParser::convertToIceTypeError(Type *LLVMTy) { | 507 Ice::Type TopLevelParser::convertToIceTypeError(Type *LLVMTy) { | 
| 507   std::string Buffer; | 508   std::string Buffer; | 
| 508   raw_string_ostream StrBuf(Buffer); | 509   raw_string_ostream StrBuf(Buffer); | 
| 509   StrBuf << "Invalid LLVM type: " << *LLVMTy; | 510   StrBuf << "Invalid LLVM type: " << *LLVMTy; | 
| 510   Error(StrBuf.str()); | 511   Error(StrBuf.str()); | 
| 511   return Ice::IceType_void; | 512   return Ice::IceType_void; | 
| 512 } | 513 } | 
| (...skipping 579 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1092     const Ice::TimerStackIdT StackID = Ice::GlobalContext::TSK_Funcs; | 1093     const Ice::TimerStackIdT StackID = Ice::GlobalContext::TSK_Funcs; | 
| 1093     Ice::TimerIdT TimerID = 0; | 1094     Ice::TimerIdT TimerID = 0; | 
| 1094     const bool TimeThisFunction = ALLOW_DUMP && getFlags().TimeEachFunction; | 1095     const bool TimeThisFunction = ALLOW_DUMP && getFlags().TimeEachFunction; | 
| 1095     if (TimeThisFunction) { | 1096     if (TimeThisFunction) { | 
| 1096       TimerID = getTranslator().getContext()->getTimerID(StackID, | 1097       TimerID = getTranslator().getContext()->getTimerID(StackID, | 
| 1097                                                          FuncDecl->getName()); | 1098                                                          FuncDecl->getName()); | 
| 1098       getTranslator().getContext()->pushTimer(TimerID, StackID); | 1099       getTranslator().getContext()->pushTimer(TimerID, StackID); | 
| 1099     } | 1100     } | 
| 1100 | 1101 | 
| 1101     if (!isIRGenerationDisabled()) | 1102     if (!isIRGenerationDisabled()) | 
| 1102       Func = Ice::Cfg::create(getTranslator().getContext()); | 1103       Func = Ice::Cfg::create(getTranslator().getContext(), | 
|  | 1104                               getTranslator().getNextSequenceNumber()); | 
| 1103     Ice::Cfg::setCurrentCfg(Func.get()); | 1105     Ice::Cfg::setCurrentCfg(Func.get()); | 
| 1104 | 1106 | 
| 1105     // TODO(kschimpf) Clean up API to add a function signature to | 1107     // TODO(kschimpf) Clean up API to add a function signature to | 
| 1106     // a CFG. | 1108     // a CFG. | 
| 1107     const Ice::FuncSigType &Signature = FuncDecl->getSignature(); | 1109     const Ice::FuncSigType &Signature = FuncDecl->getSignature(); | 
| 1108     if (isIRGenerationDisabled()) { | 1110     if (isIRGenerationDisabled()) { | 
| 1109       CurrentNode = nullptr; | 1111       CurrentNode = nullptr; | 
| 1110       for (Ice::Type ArgType : Signature.getArgList()) { | 1112       for (Ice::Type ArgType : Signature.getArgList()) { | 
| 1111         (void)ArgType; | 1113         (void)ArgType; | 
| 1112         setNextLocalInstIndex(nullptr); | 1114         setNextLocalInstIndex(nullptr); | 
| (...skipping 14 matching lines...) Expand all  Loading... | 
| 1127     // the translator function.  This is because translation may be | 1129     // the translator function.  This is because translation may be | 
| 1128     // done asynchronously in a separate thread. | 1130     // done asynchronously in a separate thread. | 
| 1129     if (TimeThisFunction) | 1131     if (TimeThisFunction) | 
| 1130       getTranslator().getContext()->popTimer(TimerID, StackID); | 1132       getTranslator().getContext()->popTimer(TimerID, StackID); | 
| 1131 | 1133 | 
| 1132     Ice::Cfg::setCurrentCfg(nullptr); | 1134     Ice::Cfg::setCurrentCfg(nullptr); | 
| 1133     // Note: Once any errors have been found, we turn off all | 1135     // Note: Once any errors have been found, we turn off all | 
| 1134     // translation of all remaining functions. This allows successive | 1136     // translation of all remaining functions. This allows successive | 
| 1135     // parsing errors to be reported, without adding extra checks to | 1137     // parsing errors to be reported, without adding extra checks to | 
| 1136     // the translator for such parsing errors. | 1138     // the translator for such parsing errors. | 
| 1137     if (Context->getNumErrors() == 0) { | 1139     if (Context->getNumErrors() == 0 && Func) { | 
| 1138       getTranslator().translateFcn(std::move(Func)); | 1140       getTranslator().translateFcn(std::move(Func)); | 
| 1139       // The translator now has ownership of Func. | 1141       // The translator now has ownership of Func. | 
| 1140     } else { | 1142     } else { | 
| 1141       Func.reset(); | 1143       Func.reset(); | 
| 1142     } | 1144     } | 
| 1143 | 1145 | 
| 1144     return ParserResult; | 1146     return ParserResult; | 
| 1145   } | 1147   } | 
| 1146 | 1148 | 
| 1147   ~FunctionParser() final {} | 1149   ~FunctionParser() final {} | 
| (...skipping 1655 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2803   // True if we have already installed names for unnamed global declarations, | 2805   // True if we have already installed names for unnamed global declarations, | 
| 2804   // and have generated global constant initializers. | 2806   // and have generated global constant initializers. | 
| 2805   bool GlobalDeclarationNamesAndInitializersInstalled; | 2807   bool GlobalDeclarationNamesAndInitializersInstalled; | 
| 2806 | 2808 | 
| 2807   // Generates names for unnamed global addresses (i.e. functions and | 2809   // Generates names for unnamed global addresses (i.e. functions and | 
| 2808   // global variables). Then lowers global variable declaration | 2810   // global variables). Then lowers global variable declaration | 
| 2809   // initializers to the target. May be called multiple times. Only | 2811   // initializers to the target. May be called multiple times. Only | 
| 2810   // the first call will do the installation. | 2812   // the first call will do the installation. | 
| 2811   void InstallGlobalNamesAndGlobalVarInitializers() { | 2813   void InstallGlobalNamesAndGlobalVarInitializers() { | 
| 2812     if (!GlobalDeclarationNamesAndInitializersInstalled) { | 2814     if (!GlobalDeclarationNamesAndInitializersInstalled) { | 
|  | 2815       Ice::VariableDeclarationList *VariableDeclarations = | 
|  | 2816           Context->getGlobalVariables(); | 
| 2813       Ice::Translator &Trans = getTranslator(); | 2817       Ice::Translator &Trans = getTranslator(); | 
| 2814       const Ice::IceString &GlobalPrefix = getFlags().DefaultGlobalPrefix; | 2818       const Ice::IceString &GlobalPrefix = getFlags().DefaultGlobalPrefix; | 
| 2815       if (!GlobalPrefix.empty()) { | 2819       if (!GlobalPrefix.empty()) { | 
| 2816         uint32_t NameIndex = 0; | 2820         uint32_t NameIndex = 0; | 
| 2817         for (Ice::VariableDeclaration *Var : Context->getGlobalVariables()) { | 2821         for (Ice::VariableDeclaration *Var : *VariableDeclarations) { | 
| 2818           installDeclarationName(Trans, Var, GlobalPrefix, "global", NameIndex); | 2822           installDeclarationName(Trans, Var, GlobalPrefix, "global", NameIndex); | 
| 2819         } | 2823         } | 
| 2820       } | 2824       } | 
| 2821       const Ice::IceString &FunctionPrefix = getFlags().DefaultFunctionPrefix; | 2825       const Ice::IceString &FunctionPrefix = getFlags().DefaultFunctionPrefix; | 
| 2822       if (!FunctionPrefix.empty()) { | 2826       if (!FunctionPrefix.empty()) { | 
| 2823         uint32_t NameIndex = 0; | 2827         uint32_t NameIndex = 0; | 
| 2824         for (Ice::FunctionDeclaration *Func : | 2828         for (Ice::FunctionDeclaration *Func : | 
| 2825              Context->getFunctionDeclarationList()) { | 2829              Context->getFunctionDeclarationList()) { | 
| 2826           installDeclarationName(Trans, Func, FunctionPrefix, "function", | 2830           installDeclarationName(Trans, Func, FunctionPrefix, "function", | 
| 2827                                  NameIndex); | 2831                                  NameIndex); | 
| 2828         } | 2832         } | 
| 2829       } | 2833       } | 
| 2830       getTranslator().lowerGlobals(Context->getGlobalVariables()); | 2834       getTranslator().lowerGlobals(VariableDeclarations); | 
| 2831       GlobalDeclarationNamesAndInitializersInstalled = true; | 2835       GlobalDeclarationNamesAndInitializersInstalled = true; | 
| 2832     } | 2836     } | 
| 2833   } | 2837   } | 
| 2834 | 2838 | 
| 2835   void installDeclarationName(Ice::Translator &Trans, | 2839   void installDeclarationName(Ice::Translator &Trans, | 
| 2836                               Ice::GlobalDeclaration *Decl, | 2840                               Ice::GlobalDeclaration *Decl, | 
| 2837                               const Ice::IceString &Prefix, const char *Context, | 2841                               const Ice::IceString &Prefix, const char *Context, | 
| 2838                               uint32_t &NameIndex) { | 2842                               uint32_t &NameIndex) { | 
| 2839     if (!Decl->hasName()) { | 2843     if (!Decl->hasName()) { | 
| 2840       Decl->setName(Trans.createUnnamedName(Prefix, NameIndex)); | 2844       Decl->setName(Trans.createUnnamedName(Prefix, NameIndex)); | 
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3021 | 3025 | 
| 3022   if (TopLevelBlocks != 1) { | 3026   if (TopLevelBlocks != 1) { | 
| 3023     errs() << IRFilename | 3027     errs() << IRFilename | 
| 3024            << ": Contains more than one module. Found: " << TopLevelBlocks | 3028            << ": Contains more than one module. Found: " << TopLevelBlocks | 
| 3025            << "\n"; | 3029            << "\n"; | 
| 3026     ErrorStatus.assign(EC_Bitcode); | 3030     ErrorStatus.assign(EC_Bitcode); | 
| 3027   } | 3031   } | 
| 3028 } | 3032 } | 
| 3029 | 3033 | 
| 3030 } // end of namespace Ice | 3034 } // end of namespace Ice | 
| OLD | NEW | 
|---|