| OLD | NEW |
| 1 //===- subzero/src/IceConverter.cpp - Converts LLVM to Ice ---------------===// | 1 //===- subzero/src/IceConverter.cpp - Converts LLVM to Ice ---------------===// |
| 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 LLVM to ICE converter. | 10 // This file implements the LLVM to ICE converter. |
| (...skipping 609 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 620 Ice::TypeConverter TypeConverter; | 620 Ice::TypeConverter TypeConverter; |
| 621 }; | 621 }; |
| 622 | 622 |
| 623 } // end of anonymous namespace | 623 } // end of anonymous namespace |
| 624 | 624 |
| 625 namespace Ice { | 625 namespace Ice { |
| 626 | 626 |
| 627 void Converter::convertToIce() { | 627 void Converter::convertToIce() { |
| 628 nameUnnamedGlobalAddresses(Mod); | 628 nameUnnamedGlobalAddresses(Mod); |
| 629 if (!Ctx->getFlags().DisableGlobals) | 629 if (!Ctx->getFlags().DisableGlobals) |
| 630 convertGlobals(); | 630 convertGlobals(Mod); |
| 631 convertFunctions(); | 631 convertFunctions(); |
| 632 } | 632 } |
| 633 | 633 |
| 634 void Converter::convertGlobals() { | |
| 635 OwningPtr<TargetGlobalInitLowering> GlobalLowering( | |
| 636 TargetGlobalInitLowering::createLowering(Ctx->getTargetArch(), Ctx)); | |
| 637 for (Module::const_global_iterator I = Mod->global_begin(), | |
| 638 E = Mod->global_end(); | |
| 639 I != E; ++I) { | |
| 640 if (!I->hasInitializer()) | |
| 641 continue; | |
| 642 const llvm::Constant *Initializer = I->getInitializer(); | |
| 643 IceString Name = I->getName(); | |
| 644 unsigned Align = I->getAlignment(); | |
| 645 uint64_t NumElements = 0; | |
| 646 const char *Data = NULL; | |
| 647 bool IsInternal = I->hasInternalLinkage(); | |
| 648 bool IsConst = I->isConstant(); | |
| 649 bool IsZeroInitializer = false; | |
| 650 | |
| 651 if (const ConstantDataArray *CDA = | |
| 652 dyn_cast<ConstantDataArray>(Initializer)) { | |
| 653 NumElements = CDA->getNumElements(); | |
| 654 assert(isa<IntegerType>(CDA->getElementType()) && | |
| 655 cast<IntegerType>(CDA->getElementType())->getBitWidth() == 8); | |
| 656 Data = CDA->getRawDataValues().data(); | |
| 657 } else if (isa<ConstantAggregateZero>(Initializer)) { | |
| 658 if (const ArrayType *AT = dyn_cast<ArrayType>(Initializer->getType())) { | |
| 659 assert(isa<IntegerType>(AT->getElementType()) && | |
| 660 cast<IntegerType>(AT->getElementType())->getBitWidth() == 8); | |
| 661 NumElements = AT->getNumElements(); | |
| 662 IsZeroInitializer = true; | |
| 663 } else { | |
| 664 llvm_unreachable("Unhandled constant aggregate zero type"); | |
| 665 } | |
| 666 } else { | |
| 667 llvm_unreachable("Unhandled global initializer"); | |
| 668 } | |
| 669 | |
| 670 GlobalLowering->lower(Name, Align, IsInternal, IsConst, IsZeroInitializer, | |
| 671 NumElements, Data, | |
| 672 Ctx->getFlags().DisableTranslation); | |
| 673 } | |
| 674 GlobalLowering.reset(); | |
| 675 } | |
| 676 | |
| 677 void Converter::convertFunctions() { | 634 void Converter::convertFunctions() { |
| 678 for (Module::const_iterator I = Mod->begin(), E = Mod->end(); I != E; ++I) { | 635 for (Module::const_iterator I = Mod->begin(), E = Mod->end(); I != E; ++I) { |
| 679 if (I->empty()) | 636 if (I->empty()) |
| 680 continue; | 637 continue; |
| 681 LLVM2ICEConverter FunctionConverter(Ctx, Mod->getContext()); | 638 LLVM2ICEConverter FunctionConverter(Ctx, Mod->getContext()); |
| 682 | 639 |
| 683 Timer TConvert; | 640 Timer TConvert; |
| 684 Cfg *Fcn = FunctionConverter.convertFunction(I); | 641 Cfg *Fcn = FunctionConverter.convertFunction(I); |
| 685 if (Ctx->getFlags().SubzeroTimingEnabled) { | 642 if (Ctx->getFlags().SubzeroTimingEnabled) { |
| 686 std::cerr << "[Subzero timing] Convert function " | 643 std::cerr << "[Subzero timing] Convert function " |
| 687 << Fcn->getFunctionName() << ": " << TConvert.getElapsedSec() | 644 << Fcn->getFunctionName() << ": " << TConvert.getElapsedSec() |
| 688 << " sec\n"; | 645 << " sec\n"; |
| 689 } | 646 } |
| 690 translateFcn(Fcn); | 647 translateFcn(Fcn); |
| 691 } | 648 } |
| 692 | 649 |
| 693 emitConstants(); | 650 emitConstants(); |
| 694 } | 651 } |
| 695 | 652 |
| 696 } // end of namespace Ice | 653 } // end of namespace Ice |
| OLD | NEW |