| OLD | NEW | 
|    1 //===- subzero/src/llvm2ice.cpp - Driver for testing ----------------------===// |    1 //===- subzero/src/llvm2ice.cpp - Driver for testing ----------------------===// | 
|    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 defines a driver that uses LLVM capabilities to parse a |   10 // This file defines a driver that uses LLVM capabilities to parse a | 
| (...skipping 708 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  719   raw_os_ostream *Os = |  719   raw_os_ostream *Os = | 
|  720       new raw_os_ostream(OutputFilename == "-" ? std::cout : Ofs); |  720       new raw_os_ostream(OutputFilename == "-" ? std::cout : Ofs); | 
|  721   Os->SetUnbuffered(); |  721   Os->SetUnbuffered(); | 
|  722   std::ofstream Lfs; |  722   std::ofstream Lfs; | 
|  723   if (LogFilename != "-") { |  723   if (LogFilename != "-") { | 
|  724     Lfs.open(LogFilename.c_str(), std::ofstream::out); |  724     Lfs.open(LogFilename.c_str(), std::ofstream::out); | 
|  725   } |  725   } | 
|  726   raw_os_ostream *Ls = new raw_os_ostream(LogFilename == "-" ? std::cout : Lfs); |  726   raw_os_ostream *Ls = new raw_os_ostream(LogFilename == "-" ? std::cout : Lfs); | 
|  727   Ls->SetUnbuffered(); |  727   Ls->SetUnbuffered(); | 
|  728  |  728  | 
 |  729   Ice::GlobalContext Ctx(Ls, Os, VMask, TargetArch, OptLevel, TestPrefix); | 
 |  730  | 
 |  731   OwningPtr<Ice::TargetGlobalInitLowering> GlobalLowering( | 
 |  732       Ice::TargetGlobalInitLowering::createLowering(TargetArch, &Ctx)); | 
 |  733   for (Module::const_global_iterator I = Mod->global_begin(), | 
 |  734                                      E = Mod->global_end(); | 
 |  735        I != E; ++I) { | 
 |  736     if (!I->hasInitializer()) | 
 |  737       continue; | 
 |  738     const Constant *Initializer = I->getInitializer(); | 
 |  739     Ice::IceString Name = I->getName(); | 
 |  740     unsigned Align = I->getAlignment(); | 
 |  741     uint64_t NumElements = 0; | 
 |  742     const char *Data = NULL; | 
 |  743     bool IsInternal = I->hasInternalLinkage(); | 
 |  744     bool IsConst = I->isConstant(); | 
 |  745     bool IsZeroInitializer = false; | 
 |  746  | 
 |  747     if (const ConstantDataArray *CDA = | 
 |  748             dyn_cast<ConstantDataArray>(Initializer)) { | 
 |  749       NumElements = CDA->getNumElements(); | 
 |  750       assert(isa<IntegerType>(CDA->getElementType()) && | 
 |  751              cast<IntegerType>(CDA->getElementType())->getBitWidth() == 8); | 
 |  752       Data = CDA->getRawDataValues().data(); | 
 |  753     } else if (isa<ConstantAggregateZero>(Initializer)) { | 
 |  754       if (const ArrayType *AT = dyn_cast<ArrayType>(Initializer->getType())) { | 
 |  755         assert(isa<IntegerType>(AT->getElementType()) && | 
 |  756                cast<IntegerType>(AT->getElementType())->getBitWidth() == 8); | 
 |  757         NumElements = AT->getNumElements(); | 
 |  758         IsZeroInitializer = true; | 
 |  759       } else { | 
 |  760         llvm_unreachable("Unhandled constant aggregate zero type"); | 
 |  761       } | 
 |  762     } else { | 
 |  763       llvm_unreachable("Unhandled global initializer"); | 
 |  764     } | 
 |  765  | 
 |  766     GlobalLowering->lower(Name, Align, IsInternal, IsConst, IsZeroInitializer, | 
 |  767                           NumElements, Data, DisableTranslation); | 
 |  768   } | 
 |  769   GlobalLowering.reset(); | 
 |  770  | 
|  729   // Ideally, Func would be declared inside the loop and its object |  771   // Ideally, Func would be declared inside the loop and its object | 
|  730   // would be automatically deleted at the end of the loop iteration. |  772   // would be automatically deleted at the end of the loop iteration. | 
|  731   // However, emitting the constant pool requires a valid Cfg object, |  773   // However, emitting the constant pool requires a valid Cfg object, | 
|  732   // so we need to defer deleting the last non-empty Cfg object until |  774   // so we need to defer deleting the last non-empty Cfg object until | 
|  733   // outside the loop and after emitting the constant pool.  TODO: |  775   // outside the loop and after emitting the constant pool.  TODO: | 
|  734   // Since all constants are globally pooled in the Ice::GlobalContext |  776   // Since all constants are globally pooled in the Ice::GlobalContext | 
|  735   // object, change all Ice::Constant related functions to use |  777   // object, change all Ice::Constant related functions to use | 
|  736   // GlobalContext instead of Cfg, and then clean up this loop. |  778   // GlobalContext instead of Cfg, and then clean up this loop. | 
|  737   OwningPtr<Ice::Cfg> Func; |  779   OwningPtr<Ice::Cfg> Func; | 
|  738   Ice::GlobalContext Ctx(Ls, Os, VMask, TargetArch, OptLevel, TestPrefix); |  | 
|  739  |  780  | 
|  740   for (Module::const_iterator I = Mod->begin(), E = Mod->end(); I != E; ++I) { |  781   for (Module::const_iterator I = Mod->begin(), E = Mod->end(); I != E; ++I) { | 
|  741     if (I->empty()) |  782     if (I->empty()) | 
|  742       continue; |  783       continue; | 
|  743     LLVM2ICEConverter FunctionConverter(&Ctx); |  784     LLVM2ICEConverter FunctionConverter(&Ctx); | 
|  744  |  785  | 
|  745     Ice::Timer TConvert; |  786     Ice::Timer TConvert; | 
|  746     Func.reset(FunctionConverter.convertFunction(I)); |  787     Func.reset(FunctionConverter.convertFunction(I)); | 
|  747     if (DisableInternal) |  788     if (DisableInternal) | 
|  748       Func->setInternal(false); |  789       Func->setInternal(false); | 
| (...skipping 27 matching lines...) Expand all  Loading... | 
|  776                   << " sec\n"; |  817                   << " sec\n"; | 
|  777       } |  818       } | 
|  778     } |  819     } | 
|  779   } |  820   } | 
|  780  |  821  | 
|  781   if (!DisableTranslation && Func) |  822   if (!DisableTranslation && Func) | 
|  782     Func->getTarget()->emitConstants(); |  823     Func->getTarget()->emitConstants(); | 
|  783  |  824  | 
|  784   return ExitStatus; |  825   return ExitStatus; | 
|  785 } |  826 } | 
| OLD | NEW |