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

Side by Side Diff: src/IceOperand.h

Issue 798693003: Subzero: Don't store std::string objects inside Variable. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Code review 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/IceInstX8632.h ('k') | src/IceOperand.cpp » ('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/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 370 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 381
382 // Variable represents an operand that is register-allocated or 382 // Variable represents an operand that is register-allocated or
383 // stack-allocated. If it is register-allocated, it will ultimately 383 // stack-allocated. If it is register-allocated, it will ultimately
384 // have a non-negative RegNum field. 384 // have a non-negative RegNum field.
385 class Variable : public Operand { 385 class Variable : public Operand {
386 Variable(const Variable &) = delete; 386 Variable(const Variable &) = delete;
387 Variable &operator=(const Variable &) = delete; 387 Variable &operator=(const Variable &) = delete;
388 Variable(Variable &&V) = default; 388 Variable(Variable &&V) = default;
389 389
390 public: 390 public:
391 static Variable *create(Cfg *Func, Type Ty, SizeT Index, 391 static Variable *create(Cfg *Func, Type Ty, SizeT Index) {
392 const IceString &Name) { 392 return new (Func->allocate<Variable>()) Variable(kVariable, Ty, Index);
393 return new (Func->allocate<Variable>())
394 Variable(kVariable, Ty, Index, Name);
395 } 393 }
396 394
397 SizeT getIndex() const { return Number; } 395 SizeT getIndex() const { return Number; }
398 IceString getName() const; 396 IceString getName(const Cfg *Func) const;
399 void setName(IceString &NewName) { 397 void setName(Cfg *Func, const IceString &NewName) {
400 // Make sure that the name can only be set once. 398 // Make sure that the name can only be set once.
401 assert(Name.empty()); 399 assert(NameIndex == Cfg::IdentifierIndexInvalid);
402 Name = NewName; 400 if (!NewName.empty())
401 NameIndex = Func->addIdentifierName(NewName);
403 } 402 }
404 403
405 bool getIsArg() const { return IsArgument; } 404 bool getIsArg() const { return IsArgument; }
406 void setIsArg(bool Val = true) { IsArgument = Val; } 405 void setIsArg(bool Val = true) { IsArgument = Val; }
407 bool getIsImplicitArg() const { return IsImplicitArgument; } 406 bool getIsImplicitArg() const { return IsImplicitArgument; }
408 void setIsImplicitArg(bool Val = true) { IsImplicitArgument = Val; } 407 void setIsImplicitArg(bool Val = true) { IsImplicitArgument = Val; }
409 408
410 void setIgnoreLiveness() { IgnoreLiveness = true; } 409 void setIgnoreLiveness() { IgnoreLiveness = true; }
411 bool getIgnoreLiveness() const { return IgnoreLiveness; } 410 bool getIgnoreLiveness() const { return IgnoreLiveness; }
412 411
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
477 476
478 static bool classof(const Operand *Operand) { 477 static bool classof(const Operand *Operand) {
479 OperandKind Kind = Operand->getKind(); 478 OperandKind Kind = Operand->getKind();
480 return Kind >= kVariable && Kind <= kVariable_Num; 479 return Kind >= kVariable && Kind <= kVariable_Num;
481 } 480 }
482 481
483 // The destructor is public because of the asType() method. 482 // The destructor is public because of the asType() method.
484 ~Variable() override {} 483 ~Variable() override {}
485 484
486 protected: 485 protected:
487 Variable(OperandKind K, Type Ty, SizeT Index, const IceString &Name) 486 Variable(OperandKind K, Type Ty, SizeT Index)
488 : Operand(K, Ty), Number(Index), Name(Name), IsArgument(false), 487 : Operand(K, Ty), Number(Index), NameIndex(Cfg::IdentifierIndexInvalid),
489 IsImplicitArgument(false), IgnoreLiveness(false), StackOffset(0), 488 IsArgument(false), IsImplicitArgument(false), IgnoreLiveness(false),
490 RegNum(NoRegister), RegNumTmp(NoRegister), Weight(1), LoVar(NULL), 489 StackOffset(0), RegNum(NoRegister), RegNumTmp(NoRegister), Weight(1),
491 HiVar(NULL) { 490 LoVar(NULL), HiVar(NULL) {
492 Vars = VarsReal; 491 Vars = VarsReal;
493 Vars[0] = this; 492 Vars[0] = this;
494 NumVars = 1; 493 NumVars = 1;
495 } 494 }
496 // Number is unique across all variables, and is used as a 495 // Number is unique across all variables, and is used as a
497 // (bit)vector index for liveness analysis. 496 // (bit)vector index for liveness analysis.
498 const SizeT Number; 497 const SizeT Number;
499 // Name is optional. 498 Cfg::IdentifierIndexType NameIndex;
500 IceString Name;
JF 2014/12/11 23:45:19 That would allow you to remove the ugly default mo
Jim Stichnoth 2014/12/11 23:51:25 Unfortunately, Variable::Live is still there and i
501 bool IsArgument; 499 bool IsArgument;
502 bool IsImplicitArgument; 500 bool IsImplicitArgument;
503 // IgnoreLiveness means that the variable should be ignored when 501 // IgnoreLiveness means that the variable should be ignored when
504 // constructing and validating live ranges. This is usually 502 // constructing and validating live ranges. This is usually
505 // reserved for the stack pointer. 503 // reserved for the stack pointer.
506 bool IgnoreLiveness; 504 bool IgnoreLiveness;
507 // StackOffset is the canonical location on stack (only if 505 // StackOffset is the canonical location on stack (only if
508 // RegNum==NoRegister || IsArgument). 506 // RegNum==NoRegister || IsArgument).
509 int32_t StackOffset; 507 int32_t StackOffset;
510 // RegNum is the allocated register, or NoRegister if it isn't 508 // RegNum is the allocated register, or NoRegister if it isn't
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
633 private: 631 private:
634 const Cfg *Func; 632 const Cfg *Func;
635 MetadataKind Kind; 633 MetadataKind Kind;
636 std::vector<VariableTracking> Metadata; 634 std::vector<VariableTracking> Metadata;
637 const static InstDefList NoDefinitions; 635 const static InstDefList NoDefinitions;
638 }; 636 };
639 637
640 } // end of namespace Ice 638 } // end of namespace Ice
641 639
642 #endif // SUBZERO_SRC_ICEOPERAND_H 640 #endif // SUBZERO_SRC_ICEOPERAND_H
OLDNEW
« no previous file with comments | « src/IceInstX8632.h ('k') | src/IceOperand.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698