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