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 /// \file | 10 /// \file |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 NodeMap.clear(); | 104 NodeMap.clear(); |
105 Func->setFunctionName( | 105 Func->setFunctionName( |
106 Ctx->getGlobalString(Ice::mangleName(F->getName()))); | 106 Ctx->getGlobalString(Ice::mangleName(F->getName()))); |
107 Func->setReturnType(convertToIceType(F->getReturnType())); | 107 Func->setReturnType(convertToIceType(F->getReturnType())); |
108 Func->setInternal(F->hasInternalLinkage()); | 108 Func->setInternal(F->hasInternalLinkage()); |
109 Ice::TimerMarker T(Ice::TimerStack::TT_llvmConvert, Func.get()); | 109 Ice::TimerMarker T(Ice::TimerStack::TT_llvmConvert, Func.get()); |
110 | 110 |
111 // The initial definition/use of each arg is the entry node. | 111 // The initial definition/use of each arg is the entry node. |
112 for (auto ArgI = F->arg_begin(), ArgE = F->arg_end(); ArgI != ArgE; | 112 for (auto ArgI = F->arg_begin(), ArgE = F->arg_end(); ArgI != ArgE; |
113 ++ArgI) { | 113 ++ArgI) { |
114 Func->addArg(mapValueToIceVar(ArgI)); | 114 Func->addArg(mapValueToIceVar(&*ArgI)); |
115 } | 115 } |
116 | 116 |
117 // Make an initial pass through the block list just to resolve the blocks | 117 // Make an initial pass through the block list just to resolve the blocks |
118 // in the original linearized order. Otherwise the ICE linearized order | 118 // in the original linearized order. Otherwise the ICE linearized order |
119 // will be affected by branch targets in terminator instructions. | 119 // will be affected by branch targets in terminator instructions. |
120 for (const BasicBlock &BBI : *F) | 120 for (const BasicBlock &BBI : *F) |
121 mapBasicBlockToNode(&BBI); | 121 mapBasicBlockToNode(&BBI); |
122 for (const BasicBlock &BBI : *F) | 122 for (const BasicBlock &BBI : *F) |
123 convertBasicBlock(&BBI); | 123 convertBasicBlock(&BBI); |
124 Func->setEntryNode(mapBasicBlockToNode(&F->getEntryBlock())); | 124 Func->setEntryNode(mapBasicBlockToNode(&F->getEntryBlock())); |
(...skipping 576 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
701 } | 701 } |
702 | 702 |
703 Ice::VariableDeclarationList *GlobalPool; | 703 Ice::VariableDeclarationList *GlobalPool; |
704 }; | 704 }; |
705 | 705 |
706 void LLVM2ICEGlobalsConverter::convertGlobalsToIce(Module *Mod) { | 706 void LLVM2ICEGlobalsConverter::convertGlobalsToIce(Module *Mod) { |
707 for (Module::const_global_iterator I = Mod->global_begin(), | 707 for (Module::const_global_iterator I = Mod->global_begin(), |
708 E = Mod->global_end(); | 708 E = Mod->global_end(); |
709 I != E; ++I) { | 709 I != E; ++I) { |
710 | 710 |
711 const GlobalVariable *GV = I; | 711 const GlobalVariable *GV = &*I; |
712 | 712 |
713 Ice::GlobalDeclaration *Var = getConverter().getGlobalDeclaration(GV); | 713 Ice::GlobalDeclaration *Var = getConverter().getGlobalDeclaration(GV); |
714 auto *VarDecl = cast<Ice::VariableDeclaration>(Var); | 714 auto *VarDecl = cast<Ice::VariableDeclaration>(Var); |
715 GlobalPool->push_back(VarDecl); | 715 GlobalPool->push_back(VarDecl); |
716 | 716 |
717 if (!GV->hasInternalLinkage() && GV->hasInitializer()) { | 717 if (!GV->hasInternalLinkage() && GV->hasInitializer()) { |
718 std::string Buffer; | 718 std::string Buffer; |
719 raw_string_ostream StrBuf(Buffer); | 719 raw_string_ostream StrBuf(Buffer); |
720 StrBuf << "Can't define external global declaration: " << GV->getName(); | 720 StrBuf << "Can't define external global declaration: " << GV->getName(); |
721 report_fatal_error(StrBuf.str()); | 721 report_fatal_error(StrBuf.str()); |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
881 report_fatal_error(StrBuf.str()); | 881 report_fatal_error(StrBuf.str()); |
882 } | 882 } |
883 if (!IceFunc->validateTypeSignature(Ctx)) | 883 if (!IceFunc->validateTypeSignature(Ctx)) |
884 report_fatal_error(IceFunc->getTypeSignatureError(Ctx)); | 884 report_fatal_error(IceFunc->getTypeSignatureError(Ctx)); |
885 GlobalDeclarationMap[&Func] = IceFunc; | 885 GlobalDeclarationMap[&Func] = IceFunc; |
886 } | 886 } |
887 // Install global variable declarations. | 887 // Install global variable declarations. |
888 for (Module::const_global_iterator I = Mod->global_begin(), | 888 for (Module::const_global_iterator I = Mod->global_begin(), |
889 E = Mod->global_end(); | 889 E = Mod->global_end(); |
890 I != E; ++I) { | 890 I != E; ++I) { |
891 const GlobalVariable *GV = I; | 891 const GlobalVariable *GV = &*I; |
892 constexpr bool NoSuppressMangling = false; | 892 constexpr bool NoSuppressMangling = false; |
893 auto *Var = VariableDeclaration::create( | 893 auto *Var = VariableDeclaration::create( |
894 GlobalDeclarationsPool.get(), NoSuppressMangling, GV->getLinkage()); | 894 GlobalDeclarationsPool.get(), NoSuppressMangling, GV->getLinkage()); |
895 Var->setAlignment(GV->getAlignment()); | 895 Var->setAlignment(GV->getAlignment()); |
896 Var->setIsConstant(GV->isConstant()); | 896 Var->setIsConstant(GV->isConstant()); |
897 Var->setName(Ctx, GV->getName()); | 897 Var->setName(Ctx, GV->getName()); |
898 if (!Var->verifyLinkageCorrect()) { | 898 if (!Var->verifyLinkageCorrect()) { |
899 std::string Buffer; | 899 std::string Buffer; |
900 raw_string_ostream StrBuf(Buffer); | 900 raw_string_ostream StrBuf(Buffer); |
901 StrBuf << "Global " << Var->getName() | 901 StrBuf << "Global " << Var->getName() |
(...skipping 16 matching lines...) Expand all Loading... |
918 for (const Function &I : *Mod) { | 918 for (const Function &I : *Mod) { |
919 if (I.empty()) | 919 if (I.empty()) |
920 continue; | 920 continue; |
921 TimerMarker _(Ctx, I.getName()); | 921 TimerMarker _(Ctx, I.getName()); |
922 LLVM2ICEFunctionConverter FunctionConverter(*this); | 922 LLVM2ICEFunctionConverter FunctionConverter(*this); |
923 FunctionConverter.convertFunction(&I); | 923 FunctionConverter.convertFunction(&I); |
924 } | 924 } |
925 } | 925 } |
926 | 926 |
927 } // end of namespace Ice | 927 } // end of namespace Ice |
OLD | NEW |