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

Side by Side Diff: src/IceOperand.h

Issue 652633002: Subzero: Improve performance of liveness analysis and live range construction. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Fix non-debug build Created 6 years, 2 months 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
OLDNEW
1 //===- subzero/src/IceOperand.h - High-level operands -----------*- C++ -*-===// 1 //===- subzero/src/IceOperand.h - High-level operands -----------*- 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 declares the Operand class and its target-independent 10 // This file declares the Operand class and its target-independent
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after
380 // Make sure that the name can only be set once. 380 // Make sure that the name can only be set once.
381 assert(Name.empty()); 381 assert(Name.empty());
382 Name = NewName; 382 Name = NewName;
383 } 383 }
384 384
385 bool getIsArg() const { return IsArgument; } 385 bool getIsArg() const { return IsArgument; }
386 void setIsArg(bool Val = true) { IsArgument = Val; } 386 void setIsArg(bool Val = true) { IsArgument = Val; }
387 bool getIsImplicitArg() const { return IsImplicitArgument; } 387 bool getIsImplicitArg() const { return IsImplicitArgument; }
388 void setIsImplicitArg(bool Val = true) { IsImplicitArgument = Val; } 388 void setIsImplicitArg(bool Val = true) { IsImplicitArgument = Val; }
389 389
390 void setIgnoreLiveness() { IgnoreLiveness = true; }
391 bool getIgnoreLiveness() const { return IgnoreLiveness; }
392
390 int32_t getStackOffset() const { return StackOffset; } 393 int32_t getStackOffset() const { return StackOffset; }
391 void setStackOffset(int32_t Offset) { StackOffset = Offset; } 394 void setStackOffset(int32_t Offset) { StackOffset = Offset; }
392 395
393 static const int32_t NoRegister = -1; 396 static const int32_t NoRegister = -1;
394 bool hasReg() const { return getRegNum() != NoRegister; } 397 bool hasReg() const { return getRegNum() != NoRegister; }
395 int32_t getRegNum() const { return RegNum; } 398 int32_t getRegNum() const { return RegNum; }
396 void setRegNum(int32_t NewRegNum) { 399 void setRegNum(int32_t NewRegNum) {
397 // Regnum shouldn't be set more than once. 400 // Regnum shouldn't be set more than once.
398 assert(!hasReg() || RegNum == NewRegNum); 401 assert(!hasReg() || RegNum == NewRegNum);
399 RegNum = NewRegNum; 402 RegNum = NewRegNum;
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
444 OperandKind Kind = Operand->getKind(); 447 OperandKind Kind = Operand->getKind();
445 return Kind >= kVariable && Kind <= kVariable_Num; 448 return Kind >= kVariable && Kind <= kVariable_Num;
446 } 449 }
447 450
448 // The destructor is public because of the asType() method. 451 // The destructor is public because of the asType() method.
449 ~Variable() override {} 452 ~Variable() override {}
450 453
451 protected: 454 protected:
452 Variable(OperandKind K, Type Ty, SizeT Index, const IceString &Name) 455 Variable(OperandKind K, Type Ty, SizeT Index, const IceString &Name)
453 : Operand(K, Ty), Number(Index), Name(Name), IsArgument(false), 456 : Operand(K, Ty), Number(Index), Name(Name), IsArgument(false),
454 IsImplicitArgument(false), StackOffset(0), RegNum(NoRegister), 457 IsImplicitArgument(false), IgnoreLiveness(false), StackOffset(0),
455 RegNumTmp(NoRegister), Weight(1), LoVar(NULL), HiVar(NULL) { 458 RegNum(NoRegister), RegNumTmp(NoRegister), Weight(1), LoVar(NULL),
459 HiVar(NULL) {
456 Vars = VarsReal; 460 Vars = VarsReal;
457 Vars[0] = this; 461 Vars[0] = this;
458 NumVars = 1; 462 NumVars = 1;
459 } 463 }
460 // Number is unique across all variables, and is used as a 464 // Number is unique across all variables, and is used as a
461 // (bit)vector index for liveness analysis. 465 // (bit)vector index for liveness analysis.
462 const SizeT Number; 466 const SizeT Number;
463 // Name is optional. 467 // Name is optional.
464 IceString Name; 468 IceString Name;
465 bool IsArgument; 469 bool IsArgument;
466 bool IsImplicitArgument; 470 bool IsImplicitArgument;
471 // IgnoreLiveness means that the variable should be ignored when
472 // constructing and validating live ranges. This is usually
473 // reserved for the stack pointer.
474 bool IgnoreLiveness;
467 // StackOffset is the canonical location on stack (only if 475 // StackOffset is the canonical location on stack (only if
468 // RegNum==NoRegister || IsArgument). 476 // RegNum==NoRegister || IsArgument).
469 int32_t StackOffset; 477 int32_t StackOffset;
470 // RegNum is the allocated register, or NoRegister if it isn't 478 // RegNum is the allocated register, or NoRegister if it isn't
471 // register-allocated. 479 // register-allocated.
472 int32_t RegNum; 480 int32_t RegNum;
473 // RegNumTmp is the tentative assignment during register allocation. 481 // RegNumTmp is the tentative assignment during register allocation.
474 int32_t RegNumTmp; 482 int32_t RegNumTmp;
475 RegWeight Weight; // Register allocation priority 483 RegWeight Weight; // Register allocation priority
476 LiveRange Live; 484 LiveRange Live;
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
579 const Cfg *Func; 587 const Cfg *Func;
580 std::vector<VariableTracking> Metadata; 588 std::vector<VariableTracking> Metadata;
581 const static InstDefList NoDefinitions; 589 const static InstDefList NoDefinitions;
582 VariablesMetadata(const VariablesMetadata &) = delete; 590 VariablesMetadata(const VariablesMetadata &) = delete;
583 VariablesMetadata &operator=(const VariablesMetadata &) = delete; 591 VariablesMetadata &operator=(const VariablesMetadata &) = delete;
584 }; 592 };
585 593
586 } // end of namespace Ice 594 } // end of namespace Ice
587 595
588 #endif // SUBZERO_SRC_ICEOPERAND_H 596 #endif // SUBZERO_SRC_ICEOPERAND_H
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698