Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(357)

Side by Side Diff: src/IceInst.cpp

Issue 814353002: Subzero: Convert NULL->nullptr. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Revert crosstest whitespace changes Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/IceInst.h ('k') | src/IceInstX8632.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 //===- subzero/src/IceInst.cpp - High-level instruction implementation ----===// 1 //===- subzero/src/IceInst.cpp - High-level instruction implementation ----===//
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 Inst class, primarily the various 10 // This file implements the Inst class, primarily the various
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 InstAssign::InstAssign(Cfg *Func, Variable *Dest, Operand *Source) 228 InstAssign::InstAssign(Cfg *Func, Variable *Dest, Operand *Source)
229 : InstHighLevel(Func, Inst::Assign, 1, Dest) { 229 : InstHighLevel(Func, Inst::Assign, 1, Dest) {
230 addSource(Source); 230 addSource(Source);
231 } 231 }
232 232
233 // If TargetTrue==TargetFalse, we turn it into an unconditional 233 // If TargetTrue==TargetFalse, we turn it into an unconditional
234 // branch. This ensures that, along with the 'switch' instruction 234 // branch. This ensures that, along with the 'switch' instruction
235 // semantics, there is at most one edge from one node to another. 235 // semantics, there is at most one edge from one node to another.
236 InstBr::InstBr(Cfg *Func, Operand *Source, CfgNode *TargetTrue, 236 InstBr::InstBr(Cfg *Func, Operand *Source, CfgNode *TargetTrue,
237 CfgNode *TargetFalse) 237 CfgNode *TargetFalse)
238 : InstHighLevel(Func, Inst::Br, 1, NULL), TargetFalse(TargetFalse), 238 : InstHighLevel(Func, Inst::Br, 1, nullptr), TargetFalse(TargetFalse),
239 TargetTrue(TargetTrue) { 239 TargetTrue(TargetTrue) {
240 if (TargetTrue == TargetFalse) { 240 if (TargetTrue == TargetFalse) {
241 TargetTrue = NULL; // turn into unconditional version 241 TargetTrue = nullptr; // turn into unconditional version
242 } else { 242 } else {
243 addSource(Source); 243 addSource(Source);
244 } 244 }
245 } 245 }
246 246
247 InstBr::InstBr(Cfg *Func, CfgNode *Target) 247 InstBr::InstBr(Cfg *Func, CfgNode *Target)
248 : InstHighLevel(Func, Inst::Br, 0, NULL), TargetFalse(Target), 248 : InstHighLevel(Func, Inst::Br, 0, nullptr), TargetFalse(Target),
249 TargetTrue(NULL) {} 249 TargetTrue(nullptr) {}
250 250
251 NodeList InstBr::getTerminatorEdges() const { 251 NodeList InstBr::getTerminatorEdges() const {
252 NodeList OutEdges; 252 NodeList OutEdges;
253 OutEdges.reserve(TargetTrue ? 2 : 1); 253 OutEdges.reserve(TargetTrue ? 2 : 1);
254 OutEdges.push_back(TargetFalse); 254 OutEdges.push_back(TargetFalse);
255 if (TargetTrue) 255 if (TargetTrue)
256 OutEdges.push_back(TargetTrue); 256 OutEdges.push_back(TargetTrue);
257 return OutEdges; 257 return OutEdges;
258 } 258 }
259 259
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 324
325 // Find the source operand corresponding to the incoming edge for the 325 // Find the source operand corresponding to the incoming edge for the
326 // given node. TODO: This uses a linear-time search, which could be 326 // given node. TODO: This uses a linear-time search, which could be
327 // improved if it becomes a problem. 327 // improved if it becomes a problem.
328 Operand *InstPhi::getOperandForTarget(CfgNode *Target) const { 328 Operand *InstPhi::getOperandForTarget(CfgNode *Target) const {
329 for (SizeT I = 0; I < getSrcSize(); ++I) { 329 for (SizeT I = 0; I < getSrcSize(); ++I) {
330 if (Labels[I] == Target) 330 if (Labels[I] == Target)
331 return getSrc(I); 331 return getSrc(I);
332 } 332 }
333 llvm_unreachable("Phi target not found"); 333 llvm_unreachable("Phi target not found");
334 return NULL; 334 return nullptr;
335 } 335 }
336 336
337 // Updates liveness for a particular operand based on the given 337 // Updates liveness for a particular operand based on the given
338 // predecessor edge. Doesn't mark the operand as live if the Phi 338 // predecessor edge. Doesn't mark the operand as live if the Phi
339 // instruction is dead or deleted. 339 // instruction is dead or deleted.
340 void InstPhi::livenessPhiOperand(LivenessBV &Live, CfgNode *Target, 340 void InstPhi::livenessPhiOperand(LivenessBV &Live, CfgNode *Target,
341 Liveness *Liveness) { 341 Liveness *Liveness) {
342 if (isDeleted() || Dead) 342 if (isDeleted() || Dead)
343 return; 343 return;
344 for (SizeT I = 0; I < getSrcSize(); ++I) { 344 for (SizeT I = 0; I < getSrcSize(); ++I) {
(...skipping 17 matching lines...) Expand all
362 Variable *Dest = getDest(); 362 Variable *Dest = getDest();
363 assert(Dest); 363 assert(Dest);
364 Variable *NewSrc = Func->makeVariable(Dest->getType()); 364 Variable *NewSrc = Func->makeVariable(Dest->getType());
365 if (ALLOW_DUMP) 365 if (ALLOW_DUMP)
366 NewSrc->setName(Func, Dest->getName(Func) + "_phi"); 366 NewSrc->setName(Func, Dest->getName(Func) + "_phi");
367 this->Dest = NewSrc; 367 this->Dest = NewSrc;
368 return InstAssign::create(Func, Dest, NewSrc); 368 return InstAssign::create(Func, Dest, NewSrc);
369 } 369 }
370 370
371 InstRet::InstRet(Cfg *Func, Operand *RetValue) 371 InstRet::InstRet(Cfg *Func, Operand *RetValue)
372 : InstHighLevel(Func, Ret, RetValue ? 1 : 0, NULL) { 372 : InstHighLevel(Func, Ret, RetValue ? 1 : 0, nullptr) {
373 if (RetValue) 373 if (RetValue)
374 addSource(RetValue); 374 addSource(RetValue);
375 } 375 }
376 376
377 InstSelect::InstSelect(Cfg *Func, Variable *Dest, Operand *Condition, 377 InstSelect::InstSelect(Cfg *Func, Variable *Dest, Operand *Condition,
378 Operand *SourceTrue, Operand *SourceFalse) 378 Operand *SourceTrue, Operand *SourceFalse)
379 : InstHighLevel(Func, Inst::Select, 3, Dest) { 379 : InstHighLevel(Func, Inst::Select, 3, Dest) {
380 assert(typeElementType(Condition->getType()) == IceType_i1); 380 assert(typeElementType(Condition->getType()) == IceType_i1);
381 addSource(Condition); 381 addSource(Condition);
382 addSource(SourceTrue); 382 addSource(SourceTrue);
383 addSource(SourceFalse); 383 addSource(SourceFalse);
384 } 384 }
385 385
386 InstStore::InstStore(Cfg *Func, Operand *Data, Operand *Addr) 386 InstStore::InstStore(Cfg *Func, Operand *Data, Operand *Addr)
387 : InstHighLevel(Func, Inst::Store, 2, NULL) { 387 : InstHighLevel(Func, Inst::Store, 2, nullptr) {
388 addSource(Data); 388 addSource(Data);
389 addSource(Addr); 389 addSource(Addr);
390 } 390 }
391 391
392 InstSwitch::InstSwitch(Cfg *Func, SizeT NumCases, Operand *Source, 392 InstSwitch::InstSwitch(Cfg *Func, SizeT NumCases, Operand *Source,
393 CfgNode *LabelDefault) 393 CfgNode *LabelDefault)
394 : InstHighLevel(Func, Inst::Switch, 1, NULL), LabelDefault(LabelDefault), 394 : InstHighLevel(Func, Inst::Switch, 1, nullptr), LabelDefault(LabelDefault),
395 NumCases(NumCases) { 395 NumCases(NumCases) {
396 addSource(Source); 396 addSource(Source);
397 Values = Func->allocateArrayOf<uint64_t>(NumCases); 397 Values = Func->allocateArrayOf<uint64_t>(NumCases);
398 Labels = Func->allocateArrayOf<CfgNode *>(NumCases); 398 Labels = Func->allocateArrayOf<CfgNode *>(NumCases);
399 // Initialize in case buggy code doesn't set all entries 399 // Initialize in case buggy code doesn't set all entries
400 for (SizeT I = 0; I < NumCases; ++I) { 400 for (SizeT I = 0; I < NumCases; ++I) {
401 Values[I] = 0; 401 Values[I] = 0;
402 Labels[I] = NULL; 402 Labels[I] = nullptr;
403 } 403 }
404 } 404 }
405 405
406 void InstSwitch::addBranch(SizeT CaseIndex, uint64_t Value, CfgNode *Label) { 406 void InstSwitch::addBranch(SizeT CaseIndex, uint64_t Value, CfgNode *Label) {
407 assert(CaseIndex < NumCases); 407 assert(CaseIndex < NumCases);
408 Values[CaseIndex] = Value; 408 Values[CaseIndex] = Value;
409 Labels[CaseIndex] = Label; 409 Labels[CaseIndex] = Label;
410 } 410 }
411 411
412 NodeList InstSwitch::getTerminatorEdges() const { 412 NodeList InstSwitch::getTerminatorEdges() const {
(...skipping 14 matching lines...) Expand all
427 for (SizeT I = 0; I < NumCases; ++I) { 427 for (SizeT I = 0; I < NumCases; ++I) {
428 if (Labels[I] == OldNode) { 428 if (Labels[I] == OldNode) {
429 Labels[I] = NewNode; 429 Labels[I] = NewNode;
430 return true; 430 return true;
431 } 431 }
432 } 432 }
433 return false; 433 return false;
434 } 434 }
435 435
436 InstUnreachable::InstUnreachable(Cfg *Func) 436 InstUnreachable::InstUnreachable(Cfg *Func)
437 : InstHighLevel(Func, Inst::Unreachable, 0, NULL) {} 437 : InstHighLevel(Func, Inst::Unreachable, 0, nullptr) {}
438 438
439 InstFakeDef::InstFakeDef(Cfg *Func, Variable *Dest, Variable *Src) 439 InstFakeDef::InstFakeDef(Cfg *Func, Variable *Dest, Variable *Src)
440 : InstHighLevel(Func, Inst::FakeDef, Src ? 1 : 0, Dest) { 440 : InstHighLevel(Func, Inst::FakeDef, Src ? 1 : 0, Dest) {
441 assert(Dest); 441 assert(Dest);
442 if (Src) 442 if (Src)
443 addSource(Src); 443 addSource(Src);
444 } 444 }
445 445
446 InstFakeUse::InstFakeUse(Cfg *Func, Variable *Src) 446 InstFakeUse::InstFakeUse(Cfg *Func, Variable *Src)
447 : InstHighLevel(Func, Inst::FakeUse, 1, NULL) { 447 : InstHighLevel(Func, Inst::FakeUse, 1, nullptr) {
448 assert(Src); 448 assert(Src);
449 addSource(Src); 449 addSource(Src);
450 } 450 }
451 451
452 InstFakeKill::InstFakeKill(Cfg *Func, const Inst *Linked) 452 InstFakeKill::InstFakeKill(Cfg *Func, const Inst *Linked)
453 : InstHighLevel(Func, Inst::FakeKill, 0, NULL), Linked(Linked) {} 453 : InstHighLevel(Func, Inst::FakeKill, 0, nullptr), Linked(Linked) {}
454 454
455 Type InstCall::getReturnType() const { 455 Type InstCall::getReturnType() const {
456 if (Dest == NULL) 456 if (Dest == nullptr)
457 return IceType_void; 457 return IceType_void;
458 return Dest->getType(); 458 return Dest->getType();
459 } 459 }
460 460
461 // ======================== Dump routines ======================== // 461 // ======================== Dump routines ======================== //
462 462
463 void Inst::dumpDecorated(const Cfg *Func) const { 463 void Inst::dumpDecorated(const Cfg *Func) const {
464 if (!ALLOW_DUMP) 464 if (!ALLOW_DUMP)
465 return; 465 return;
466 Ostream &Str = Func->getContext()->getStrDump(); 466 Ostream &Str = Func->getContext()->getStrDump();
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after
819 819
820 void InstTarget::dump(const Cfg *Func) const { 820 void InstTarget::dump(const Cfg *Func) const {
821 if (!ALLOW_DUMP) 821 if (!ALLOW_DUMP)
822 return; 822 return;
823 Ostream &Str = Func->getContext()->getStrDump(); 823 Ostream &Str = Func->getContext()->getStrDump();
824 Str << "[TARGET] "; 824 Str << "[TARGET] ";
825 Inst::dump(Func); 825 Inst::dump(Func);
826 } 826 }
827 827
828 } // end of namespace Ice 828 } // end of namespace Ice
OLDNEW
« no previous file with comments | « src/IceInst.h ('k') | src/IceInstX8632.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698