OLD | NEW |
1 //===- subzero/src/IceTargetLoweringX8632.cpp - x86-32 lowering -----------===// | 1 //===- subzero/src/IceTargetLoweringX8632.cpp - x86-32 lowering -----------===// |
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 TargetLoweringX8632 class, which | 10 // This file implements the TargetLoweringX8632 class, which |
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
306 TypeToRegisterSet[IceType_v4i1] = VectorRegisters; | 306 TypeToRegisterSet[IceType_v4i1] = VectorRegisters; |
307 TypeToRegisterSet[IceType_v8i1] = VectorRegisters; | 307 TypeToRegisterSet[IceType_v8i1] = VectorRegisters; |
308 TypeToRegisterSet[IceType_v16i1] = VectorRegisters; | 308 TypeToRegisterSet[IceType_v16i1] = VectorRegisters; |
309 TypeToRegisterSet[IceType_v16i8] = VectorRegisters; | 309 TypeToRegisterSet[IceType_v16i8] = VectorRegisters; |
310 TypeToRegisterSet[IceType_v8i16] = VectorRegisters; | 310 TypeToRegisterSet[IceType_v8i16] = VectorRegisters; |
311 TypeToRegisterSet[IceType_v4i32] = VectorRegisters; | 311 TypeToRegisterSet[IceType_v4i32] = VectorRegisters; |
312 TypeToRegisterSet[IceType_v4f32] = VectorRegisters; | 312 TypeToRegisterSet[IceType_v4f32] = VectorRegisters; |
313 } | 313 } |
314 | 314 |
315 void TargetX8632::translateO2() { | 315 void TargetX8632::translateO2() { |
316 GlobalContext *Context = Func->getContext(); | 316 TimerMarker T(TimerStack::TT_O2, Func); |
317 static TimerIdT IDO2 = GlobalContext::getTimerID("O2"); | |
318 TimerMarker T(IDO2, Context); | |
319 | 317 |
320 // Lower Phi instructions. | 318 // Lower Phi instructions. |
321 Func->placePhiLoads(); | 319 Func->placePhiLoads(); |
322 if (Func->hasError()) | 320 if (Func->hasError()) |
323 return; | 321 return; |
324 Func->placePhiStores(); | 322 Func->placePhiStores(); |
325 if (Func->hasError()) | 323 if (Func->hasError()) |
326 return; | 324 return; |
327 Func->deletePhis(); | 325 Func->deletePhis(); |
328 if (Func->hasError()) | 326 if (Func->hasError()) |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
393 Func->doBranchOpt(); | 391 Func->doBranchOpt(); |
394 Func->dump("After branch optimization"); | 392 Func->dump("After branch optimization"); |
395 | 393 |
396 // Nop insertion | 394 // Nop insertion |
397 if (shouldDoNopInsertion()) { | 395 if (shouldDoNopInsertion()) { |
398 Func->doNopInsertion(); | 396 Func->doNopInsertion(); |
399 } | 397 } |
400 } | 398 } |
401 | 399 |
402 void TargetX8632::translateOm1() { | 400 void TargetX8632::translateOm1() { |
403 GlobalContext *Context = Func->getContext(); | 401 TimerMarker T(TimerStack::TT_Om1, Func); |
404 static TimerIdT IDOm1 = GlobalContext::getTimerID("Om1"); | |
405 TimerMarker T(IDOm1, Context); | |
406 Func->placePhiLoads(); | 402 Func->placePhiLoads(); |
407 if (Func->hasError()) | 403 if (Func->hasError()) |
408 return; | 404 return; |
409 Func->placePhiStores(); | 405 Func->placePhiStores(); |
410 if (Func->hasError()) | 406 if (Func->hasError()) |
411 return; | 407 return; |
412 Func->deletePhis(); | 408 Func->deletePhis(); |
413 if (Func->hasError()) | 409 if (Func->hasError()) |
414 return; | 410 return; |
415 Func->dump("After Phi lowering"); | 411 Func->dump("After Phi lowering"); |
(...skipping 3882 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4298 if (RegNum == Variable::NoRegister) | 4294 if (RegNum == Variable::NoRegister) |
4299 Reg->setWeightInfinite(); | 4295 Reg->setWeightInfinite(); |
4300 else | 4296 else |
4301 Reg->setRegNum(RegNum); | 4297 Reg->setRegNum(RegNum); |
4302 return Reg; | 4298 return Reg; |
4303 } | 4299 } |
4304 | 4300 |
4305 void TargetX8632::postLower() { | 4301 void TargetX8632::postLower() { |
4306 if (Ctx->getOptLevel() != Opt_m1) | 4302 if (Ctx->getOptLevel() != Opt_m1) |
4307 return; | 4303 return; |
4308 static TimerIdT IDpostLower = GlobalContext::getTimerID("postLower"); | 4304 TimerMarker T(TimerStack::TT_postLower, Func); |
4309 TimerMarker T(IDpostLower, Ctx); | |
4310 // TODO: Avoid recomputing WhiteList every instruction. | 4305 // TODO: Avoid recomputing WhiteList every instruction. |
4311 RegSetMask RegInclude = RegSet_All; | 4306 RegSetMask RegInclude = RegSet_All; |
4312 RegSetMask RegExclude = RegSet_StackPointer; | 4307 RegSetMask RegExclude = RegSet_StackPointer; |
4313 if (hasFramePointer()) | 4308 if (hasFramePointer()) |
4314 RegExclude |= RegSet_FramePointer; | 4309 RegExclude |= RegSet_FramePointer; |
4315 llvm::SmallBitVector WhiteList = getRegisterSet(RegInclude, RegExclude); | 4310 llvm::SmallBitVector WhiteList = getRegisterSet(RegInclude, RegExclude); |
4316 // Make one pass to black-list pre-colored registers. TODO: If | 4311 // Make one pass to black-list pre-colored registers. TODO: If |
4317 // there was some prior register allocation pass that made register | 4312 // there was some prior register allocation pass that made register |
4318 // assignments, those registers need to be black-listed here as | 4313 // assignments, those registers need to be black-listed here as |
4319 // well. | 4314 // well. |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4520 Str << "\t.align\t" << Align << "\n"; | 4515 Str << "\t.align\t" << Align << "\n"; |
4521 Str << MangledName << ":\n"; | 4516 Str << MangledName << ":\n"; |
4522 for (SizeT i = 0; i < Size; ++i) { | 4517 for (SizeT i = 0; i < Size; ++i) { |
4523 Str << "\t.byte\t" << (((unsigned)Data[i]) & 0xff) << "\n"; | 4518 Str << "\t.byte\t" << (((unsigned)Data[i]) & 0xff) << "\n"; |
4524 } | 4519 } |
4525 Str << "\t.size\t" << MangledName << ", " << Size << "\n"; | 4520 Str << "\t.size\t" << MangledName << ", " << Size << "\n"; |
4526 } | 4521 } |
4527 } | 4522 } |
4528 | 4523 |
4529 } // end of namespace Ice | 4524 } // end of namespace Ice |
OLD | NEW |