OLD | NEW |
1 //===- subzero/src/IceTranslator.cpp - ICE to machine code ------*- C++ -*-===// | 1 //===- subzero/src/IceTranslator.cpp - ICE to machine code ------*- C++ -*-===// |
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 the general driver class for translating ICE to | 10 // This file defines the general driver class for translating ICE to |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 V->setName(StrBuf.str()); | 49 V->setName(StrBuf.str()); |
50 ++NameIndex; | 50 ++NameIndex; |
51 } | 51 } |
52 } // end of anonymous namespace | 52 } // end of anonymous namespace |
53 | 53 |
54 void Translator::nameUnnamedGlobalAddresses(llvm::Module *Mod) { | 54 void Translator::nameUnnamedGlobalAddresses(llvm::Module *Mod) { |
55 const IceString &GlobalPrefix = Flags.DefaultGlobalPrefix; | 55 const IceString &GlobalPrefix = Flags.DefaultGlobalPrefix; |
56 Ostream &errs = Ctx->getStrDump(); | 56 Ostream &errs = Ctx->getStrDump(); |
57 if (!GlobalPrefix.empty()) { | 57 if (!GlobalPrefix.empty()) { |
58 uint32_t NameIndex = 0; | 58 uint32_t NameIndex = 0; |
59 for (llvm::Module::global_iterator I = Mod->global_begin(), | 59 for (auto I = Mod->global_begin(), E = Mod->global_end(); I != E; ++I) |
60 E = Mod->global_end(); | |
61 I != E; ++I) { | |
62 setValueName(I, "global", GlobalPrefix, NameIndex, errs); | 60 setValueName(I, "global", GlobalPrefix, NameIndex, errs); |
63 } | |
64 } | 61 } |
65 const IceString &FunctionPrefix = Flags.DefaultFunctionPrefix; | 62 const IceString &FunctionPrefix = Flags.DefaultFunctionPrefix; |
66 if (FunctionPrefix.empty()) | 63 if (FunctionPrefix.empty()) |
67 return; | 64 return; |
68 uint32_t NameIndex = 0; | 65 uint32_t NameIndex = 0; |
69 for (llvm::Module::iterator I = Mod->begin(), E = Mod->end(); I != E; ++I) { | 66 for (auto &I : *Mod) |
70 setValueName(I, "function", FunctionPrefix, NameIndex, errs); | 67 setValueName(&I, "function", FunctionPrefix, NameIndex, errs); |
71 } | |
72 } | 68 } |
73 | 69 |
74 void Translator::translateFcn(Cfg *Fcn) { | 70 void Translator::translateFcn(Cfg *Fcn) { |
75 Ctx->resetStats(); | 71 Ctx->resetStats(); |
76 Func.reset(Fcn); | 72 Func.reset(Fcn); |
77 if (Ctx->getFlags().DisableInternal) | 73 if (Ctx->getFlags().DisableInternal) |
78 Func->setInternal(false); | 74 Func->setInternal(false); |
79 if (Ctx->getFlags().DisableTranslation) { | 75 if (Ctx->getFlags().DisableTranslation) { |
80 Func->dump(); | 76 Func->dump(); |
81 } else { | 77 } else { |
82 Func->translate(); | 78 Func->translate(); |
83 if (Func->hasError()) { | 79 if (Func->hasError()) { |
84 std::cerr << "ICE translation error: " << Func->getError() << "\n"; | 80 std::cerr << "ICE translation error: " << Func->getError() << "\n"; |
85 ErrorStatus = true; | 81 ErrorStatus = true; |
86 } | 82 } |
87 | 83 |
88 Func->emit(); | 84 Func->emit(); |
89 Ctx->dumpStats(Func->getFunctionName()); | 85 Ctx->dumpStats(Func->getFunctionName()); |
90 } | 86 } |
91 } | 87 } |
92 | 88 |
93 void Translator::emitConstants() { | 89 void Translator::emitConstants() { |
94 if (!Ctx->getFlags().DisableTranslation && Func) | 90 if (!Ctx->getFlags().DisableTranslation && Func) |
95 Func->getTarget()->emitConstants(); | 91 Func->getTarget()->emitConstants(); |
96 } | 92 } |
97 | 93 |
98 void Translator::convertGlobals(llvm::Module *Mod) { | 94 void Translator::convertGlobals(llvm::Module *Mod) { |
99 llvm::OwningPtr<TargetGlobalInitLowering> GlobalLowering( | 95 llvm::OwningPtr<TargetGlobalInitLowering> GlobalLowering( |
100 TargetGlobalInitLowering::createLowering(Ctx->getTargetArch(), Ctx)); | 96 TargetGlobalInitLowering::createLowering(Ctx->getTargetArch(), Ctx)); |
101 for (llvm::Module::const_global_iterator I = Mod->global_begin(), | 97 for (auto I = Mod->global_begin(), E = Mod->global_end(); I != E; ++I) { |
102 E = Mod->global_end(); | |
103 I != E; ++I) { | |
104 if (!I->hasInitializer()) | 98 if (!I->hasInitializer()) |
105 continue; | 99 continue; |
106 const llvm::Constant *Initializer = I->getInitializer(); | 100 const llvm::Constant *Initializer = I->getInitializer(); |
107 IceString Name = I->getName(); | 101 IceString Name = I->getName(); |
108 unsigned Align = I->getAlignment(); | 102 unsigned Align = I->getAlignment(); |
109 uint64_t NumElements = 0; | 103 uint64_t NumElements = 0; |
110 const char *Data = NULL; | 104 const char *Data = NULL; |
111 bool IsInternal = I->hasInternalLinkage(); | 105 bool IsInternal = I->hasInternalLinkage(); |
112 bool IsConst = I->isConstant(); | 106 bool IsConst = I->isConstant(); |
113 bool IsZeroInitializer = false; | 107 bool IsZeroInitializer = false; |
(...skipping 19 matching lines...) Expand all Loading... |
133 } else { | 127 } else { |
134 llvm_unreachable("Unhandled global initializer"); | 128 llvm_unreachable("Unhandled global initializer"); |
135 } | 129 } |
136 | 130 |
137 GlobalLowering->lower(Name, Align, IsInternal, IsConst, IsZeroInitializer, | 131 GlobalLowering->lower(Name, Align, IsInternal, IsConst, IsZeroInitializer, |
138 NumElements, Data, | 132 NumElements, Data, |
139 Ctx->getFlags().DisableTranslation); | 133 Ctx->getFlags().DisableTranslation); |
140 } | 134 } |
141 GlobalLowering.reset(); | 135 GlobalLowering.reset(); |
142 } | 136 } |
OLD | NEW |