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 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
77 class LLVM2ICEFunctionConverter : LLVM2ICEConverter { | 77 class LLVM2ICEFunctionConverter : LLVM2ICEConverter { |
78 LLVM2ICEFunctionConverter(const LLVM2ICEFunctionConverter &) = delete; | 78 LLVM2ICEFunctionConverter(const LLVM2ICEFunctionConverter &) = delete; |
79 LLVM2ICEFunctionConverter & | 79 LLVM2ICEFunctionConverter & |
80 operator=(const LLVM2ICEFunctionConverter &) = delete; | 80 operator=(const LLVM2ICEFunctionConverter &) = delete; |
81 | 81 |
82 public: | 82 public: |
83 LLVM2ICEFunctionConverter(Ice::Converter &Converter) | 83 LLVM2ICEFunctionConverter(Ice::Converter &Converter) |
84 : LLVM2ICEConverter(Converter), Func(nullptr) {} | 84 : LLVM2ICEConverter(Converter), Func(nullptr) {} |
85 | 85 |
86 void convertFunction(const Function *F) { | 86 void convertFunction(const Function *F) { |
87 Func = Ice::Cfg::create(Ctx); | 87 if (Ctx->isIRGenerationDisabled()) |
| 88 return; |
| 89 Func = Ice::Cfg::create(Ctx, Converter.getNextSequenceNumber()); |
88 Ice::Cfg::setCurrentCfg(Func.get()); | 90 Ice::Cfg::setCurrentCfg(Func.get()); |
89 | 91 |
90 VarMap.clear(); | 92 VarMap.clear(); |
91 NodeMap.clear(); | 93 NodeMap.clear(); |
92 Func->setFunctionName(F->getName()); | 94 Func->setFunctionName(F->getName()); |
93 Func->setReturnType(convertToIceType(F->getReturnType())); | 95 Func->setReturnType(convertToIceType(F->getReturnType())); |
94 Func->setInternal(F->hasInternalLinkage()); | 96 Func->setInternal(F->hasInternalLinkage()); |
95 Ice::TimerMarker T(Ice::TimerStack::TT_llvmConvert, Func.get()); | 97 Ice::TimerMarker T(Ice::TimerStack::TT_llvmConvert, Func.get()); |
96 | 98 |
97 // The initial definition/use of each arg is the entry node. | 99 // The initial definition/use of each arg is the entry node. |
(...skipping 696 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
794 raw_string_ostream StrBuf(Buffer); | 796 raw_string_ostream StrBuf(Buffer); |
795 StrBuf << "Unhandled global initializer: " << Initializer; | 797 StrBuf << "Unhandled global initializer: " << Initializer; |
796 report_fatal_error(StrBuf.str()); | 798 report_fatal_error(StrBuf.str()); |
797 } | 799 } |
798 | 800 |
799 } // end of anonymous namespace | 801 } // end of anonymous namespace |
800 | 802 |
801 namespace Ice { | 803 namespace Ice { |
802 | 804 |
803 void Converter::nameUnnamedGlobalVariables(Module *Mod) { | 805 void Converter::nameUnnamedGlobalVariables(Module *Mod) { |
804 const IceString &GlobalPrefix = Flags.DefaultGlobalPrefix; | 806 const IceString &GlobalPrefix = Ctx->getFlags().DefaultGlobalPrefix; |
805 if (GlobalPrefix.empty()) | 807 if (GlobalPrefix.empty()) |
806 return; | 808 return; |
807 uint32_t NameIndex = 0; | 809 uint32_t NameIndex = 0; |
808 for (auto V = Mod->global_begin(), E = Mod->global_end(); V != E; ++V) { | 810 for (auto V = Mod->global_begin(), E = Mod->global_end(); V != E; ++V) { |
809 if (!V->hasName()) { | 811 if (!V->hasName()) { |
810 V->setName(createUnnamedName(GlobalPrefix, NameIndex)); | 812 V->setName(createUnnamedName(GlobalPrefix, NameIndex)); |
811 ++NameIndex; | 813 ++NameIndex; |
812 } else { | 814 } else { |
813 checkIfUnnamedNameSafe(V->getName(), "global", GlobalPrefix); | 815 checkIfUnnamedNameSafe(V->getName(), "global", GlobalPrefix); |
814 } | 816 } |
815 } | 817 } |
816 } | 818 } |
817 | 819 |
818 void Converter::nameUnnamedFunctions(Module *Mod) { | 820 void Converter::nameUnnamedFunctions(Module *Mod) { |
819 const IceString &FunctionPrefix = Flags.DefaultFunctionPrefix; | 821 const IceString &FunctionPrefix = Ctx->getFlags().DefaultFunctionPrefix; |
820 if (FunctionPrefix.empty()) | 822 if (FunctionPrefix.empty()) |
821 return; | 823 return; |
822 uint32_t NameIndex = 0; | 824 uint32_t NameIndex = 0; |
823 for (Function &F : *Mod) { | 825 for (Function &F : *Mod) { |
824 if (!F.hasName()) { | 826 if (!F.hasName()) { |
825 F.setName(createUnnamedName(FunctionPrefix, NameIndex)); | 827 F.setName(createUnnamedName(FunctionPrefix, NameIndex)); |
826 ++NameIndex; | 828 ++NameIndex; |
827 } else { | 829 } else { |
828 checkIfUnnamedNameSafe(F.getName(), "function", FunctionPrefix); | 830 checkIfUnnamedNameSafe(F.getName(), "function", FunctionPrefix); |
829 } | 831 } |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
876 Var->setName(GV->getName()); | 878 Var->setName(GV->getName()); |
877 Var->setAlignment(GV->getAlignment()); | 879 Var->setAlignment(GV->getAlignment()); |
878 Var->setIsConstant(GV->isConstant()); | 880 Var->setIsConstant(GV->isConstant()); |
879 Var->setLinkage(GV->getLinkage()); | 881 Var->setLinkage(GV->getLinkage()); |
880 GlobalDeclarationMap[GV] = Var; | 882 GlobalDeclarationMap[GV] = Var; |
881 } | 883 } |
882 } | 884 } |
883 | 885 |
884 void Converter::convertGlobals(Module *Mod) { | 886 void Converter::convertGlobals(Module *Mod) { |
885 LLVM2ICEGlobalsConverter GlobalsConverter(*this); | 887 LLVM2ICEGlobalsConverter GlobalsConverter(*this); |
886 VariableDeclarationList VariableDeclarations; | 888 VariableDeclarationList *VariableDeclarations = new VariableDeclarationList; |
887 GlobalsConverter.convertGlobalsToIce(Mod, VariableDeclarations); | 889 GlobalsConverter.convertGlobalsToIce(Mod, *VariableDeclarations); |
888 lowerGlobals(VariableDeclarations); | 890 lowerGlobals(VariableDeclarations); |
889 } | 891 } |
890 | 892 |
891 void Converter::convertFunctions() { | 893 void Converter::convertFunctions() { |
892 const TimerStackIdT StackID = GlobalContext::TSK_Funcs; | 894 const TimerStackIdT StackID = GlobalContext::TSK_Funcs; |
893 for (const Function &I : *Mod) { | 895 for (const Function &I : *Mod) { |
894 if (I.empty()) | 896 if (I.empty()) |
895 continue; | 897 continue; |
896 | 898 |
897 TimerIdT TimerID = 0; | 899 TimerIdT TimerID = 0; |
898 const bool TimeThisFunction = | 900 const bool TimeThisFunction = |
899 ALLOW_DUMP && Ctx->getFlags().TimeEachFunction; | 901 ALLOW_DUMP && Ctx->getFlags().TimeEachFunction; |
900 if (TimeThisFunction) { | 902 if (TimeThisFunction) { |
901 TimerID = Ctx->getTimerID(StackID, I.getName()); | 903 TimerID = Ctx->getTimerID(StackID, I.getName()); |
902 Ctx->pushTimer(TimerID, StackID); | 904 Ctx->pushTimer(TimerID, StackID); |
903 } | 905 } |
904 LLVM2ICEFunctionConverter FunctionConverter(*this); | 906 LLVM2ICEFunctionConverter FunctionConverter(*this); |
905 FunctionConverter.convertFunction(&I); | 907 FunctionConverter.convertFunction(&I); |
906 if (TimeThisFunction) | 908 if (TimeThisFunction) |
907 Ctx->popTimer(TimerID, StackID); | 909 Ctx->popTimer(TimerID, StackID); |
908 } | 910 } |
909 } | 911 } |
910 | 912 |
911 } // end of namespace Ice | 913 } // end of namespace Ice |
OLD | NEW |