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

Side by Side Diff: src/IceInstX8632.h

Issue 686913005: Turn off dump/emit routines when building minimal subzero. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Fix nits. Created 6 years, 1 month 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/IceInstX8632.h - Low-level x86 instructions --*- C++ -*-===// 1 //===- subzero/src/IceInstX8632.h - Low-level x86 instructions --*- 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 InstX8632 and OperandX8632 classes and 10 // This file declares the InstX8632 and OperandX8632 classes and
(...skipping 23 matching lines...) Expand all
34 OperandX8632 &operator=(const OperandX8632 &) = delete; 34 OperandX8632 &operator=(const OperandX8632 &) = delete;
35 35
36 public: 36 public:
37 enum OperandKindX8632 { 37 enum OperandKindX8632 {
38 k__Start = Operand::kTarget, 38 k__Start = Operand::kTarget,
39 kMem, 39 kMem,
40 kSplit 40 kSplit
41 }; 41 };
42 using Operand::dump; 42 using Operand::dump;
43 void dump(const Cfg *, Ostream &Str) const override { 43 void dump(const Cfg *, Ostream &Str) const override {
44 Str << "<OperandX8632>"; 44 if (ALLOW_DUMP)
45 Str << "<OperandX8632>";
45 } 46 }
46 47
47 protected: 48 protected:
48 OperandX8632(OperandKindX8632 Kind, Type Ty) 49 OperandX8632(OperandKindX8632 Kind, Type Ty)
49 : Operand(static_cast<OperandKind>(Kind), Ty) {} 50 : Operand(static_cast<OperandKind>(Kind), Ty) {}
50 ~OperandX8632() override {} 51 ~OperandX8632() override {}
51 }; 52 };
52 53
53 // OperandX8632Mem represents the m32 addressing mode, with optional 54 // OperandX8632Mem represents the m32 addressing mode, with optional
54 // base and index registers, a constant offset, and a fixed shift 55 // base and index registers, a constant offset, and a fixed shift
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after
458 class InstX8632InplaceopGPR : public InstX8632 { 459 class InstX8632InplaceopGPR : public InstX8632 {
459 InstX8632InplaceopGPR(const InstX8632InplaceopGPR &) = delete; 460 InstX8632InplaceopGPR(const InstX8632InplaceopGPR &) = delete;
460 InstX8632InplaceopGPR &operator=(const InstX8632InplaceopGPR &) = delete; 461 InstX8632InplaceopGPR &operator=(const InstX8632InplaceopGPR &) = delete;
461 462
462 public: 463 public:
463 static InstX8632InplaceopGPR *create(Cfg *Func, Operand *SrcDest) { 464 static InstX8632InplaceopGPR *create(Cfg *Func, Operand *SrcDest) {
464 return new (Func->allocate<InstX8632InplaceopGPR>()) 465 return new (Func->allocate<InstX8632InplaceopGPR>())
465 InstX8632InplaceopGPR(Func, SrcDest); 466 InstX8632InplaceopGPR(Func, SrcDest);
466 } 467 }
467 void emit(const Cfg *Func) const override { 468 void emit(const Cfg *Func) const override {
469 if (!ALLOW_DUMP)
470 return;
468 Ostream &Str = Func->getContext()->getStrEmit(); 471 Ostream &Str = Func->getContext()->getStrEmit();
469 assert(getSrcSize() == 1); 472 assert(getSrcSize() == 1);
470 Str << "\t" << Opcode << "\t"; 473 Str << "\t" << Opcode << "\t";
471 getSrc(0)->emit(Func); 474 getSrc(0)->emit(Func);
472 } 475 }
473 void emitIAS(const Cfg *Func) const override { 476 void emitIAS(const Cfg *Func) const override {
474 assert(getSrcSize() == 1); 477 assert(getSrcSize() == 1);
475 const Variable *Var = getDest(); 478 const Variable *Var = getDest();
476 Type Ty = Var->getType(); 479 Type Ty = Var->getType();
477 emitIASOpTyGPR(Func, Ty, Var, Emitter); 480 emitIASOpTyGPR(Func, Ty, Var, Emitter);
478 } 481 }
479 void dump(const Cfg *Func) const override { 482 void dump(const Cfg *Func) const override {
483 if (!ALLOW_DUMP)
484 return;
480 Ostream &Str = Func->getContext()->getStrDump(); 485 Ostream &Str = Func->getContext()->getStrDump();
481 dumpDest(Func); 486 dumpDest(Func);
482 Str << " = " << Opcode << "." << getDest()->getType() << " "; 487 Str << " = " << Opcode << "." << getDest()->getType() << " ";
483 dumpSources(Func); 488 dumpSources(Func);
484 } 489 }
485 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } 490 static bool classof(const Inst *Inst) { return isClassof(Inst, K); }
486 491
487 private: 492 private:
488 InstX8632InplaceopGPR(Cfg *Func, Operand *SrcDest) 493 InstX8632InplaceopGPR(Cfg *Func, Operand *SrcDest)
489 : InstX8632(Func, K, 1, llvm::dyn_cast<Variable>(SrcDest)) { 494 : InstX8632(Func, K, 1, llvm::dyn_cast<Variable>(SrcDest)) {
(...skipping 16 matching lines...) Expand all
506 class InstX8632UnaryopGPR : public InstX8632 { 511 class InstX8632UnaryopGPR : public InstX8632 {
507 InstX8632UnaryopGPR(const InstX8632UnaryopGPR &) = delete; 512 InstX8632UnaryopGPR(const InstX8632UnaryopGPR &) = delete;
508 InstX8632UnaryopGPR &operator=(const InstX8632UnaryopGPR &) = delete; 513 InstX8632UnaryopGPR &operator=(const InstX8632UnaryopGPR &) = delete;
509 514
510 public: 515 public:
511 static InstX8632UnaryopGPR *create(Cfg *Func, Variable *Dest, Operand *Src) { 516 static InstX8632UnaryopGPR *create(Cfg *Func, Variable *Dest, Operand *Src) {
512 return new (Func->allocate<InstX8632UnaryopGPR>()) 517 return new (Func->allocate<InstX8632UnaryopGPR>())
513 InstX8632UnaryopGPR(Func, Dest, Src); 518 InstX8632UnaryopGPR(Func, Dest, Src);
514 } 519 }
515 void emit(const Cfg *Func) const override { 520 void emit(const Cfg *Func) const override {
521 if (!ALLOW_DUMP)
522 return;
516 Ostream &Str = Func->getContext()->getStrEmit(); 523 Ostream &Str = Func->getContext()->getStrEmit();
517 assert(getSrcSize() == 1); 524 assert(getSrcSize() == 1);
518 Type SrcTy = getSrc(0)->getType(); 525 Type SrcTy = getSrc(0)->getType();
519 Type DestTy = getDest()->getType(); 526 Type DestTy = getDest()->getType();
520 Str << "\t" << Opcode << getWidthString(SrcTy); 527 Str << "\t" << Opcode << getWidthString(SrcTy);
521 // Movsx and movzx need both the source and dest type width letter 528 // Movsx and movzx need both the source and dest type width letter
522 // to define the operation. The other unary operations have the 529 // to define the operation. The other unary operations have the
523 // same source and dest type and as a result need only one letter. 530 // same source and dest type and as a result need only one letter.
524 if (SrcTy != DestTy) 531 if (SrcTy != DestTy)
525 Str << getWidthString(DestTy); 532 Str << getWidthString(DestTy);
526 Str << "\t"; 533 Str << "\t";
527 getSrc(0)->emit(Func); 534 getSrc(0)->emit(Func);
528 Str << ", "; 535 Str << ", ";
529 getDest()->emit(Func); 536 getDest()->emit(Func);
530 } 537 }
531 void emitIAS(const Cfg *Func) const override { 538 void emitIAS(const Cfg *Func) const override {
532 assert(getSrcSize() == 1); 539 assert(getSrcSize() == 1);
533 const Variable *Var = getDest(); 540 const Variable *Var = getDest();
534 Type Ty = Var->getType(); 541 Type Ty = Var->getType();
535 const Operand *Src = getSrc(0); 542 const Operand *Src = getSrc(0);
536 emitIASRegOpTyGPR(Func, Ty, Var, Src, Emitter); 543 emitIASRegOpTyGPR(Func, Ty, Var, Src, Emitter);
537 } 544 }
538 void dump(const Cfg *Func) const override { 545 void dump(const Cfg *Func) const override {
546 if (!ALLOW_DUMP)
547 return;
539 Ostream &Str = Func->getContext()->getStrDump(); 548 Ostream &Str = Func->getContext()->getStrDump();
540 dumpDest(Func); 549 dumpDest(Func);
541 Str << " = " << Opcode << "." << getSrc(0)->getType() << " "; 550 Str << " = " << Opcode << "." << getSrc(0)->getType() << " ";
542 dumpSources(Func); 551 dumpSources(Func);
543 } 552 }
544 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } 553 static bool classof(const Inst *Inst) { return isClassof(Inst, K); }
545 554
546 private: 555 private:
547 InstX8632UnaryopGPR(Cfg *Func, Variable *Dest, Operand *Src) 556 InstX8632UnaryopGPR(Cfg *Func, Variable *Dest, Operand *Src)
548 : InstX8632(Func, K, 1, Dest) { 557 : InstX8632(Func, K, 1, Dest) {
(...skipping 12 matching lines...) Expand all
561 class InstX8632UnaryopXmm : public InstX8632 { 570 class InstX8632UnaryopXmm : public InstX8632 {
562 InstX8632UnaryopXmm(const InstX8632UnaryopXmm &) = delete; 571 InstX8632UnaryopXmm(const InstX8632UnaryopXmm &) = delete;
563 InstX8632UnaryopXmm &operator=(const InstX8632UnaryopXmm &) = delete; 572 InstX8632UnaryopXmm &operator=(const InstX8632UnaryopXmm &) = delete;
564 573
565 public: 574 public:
566 static InstX8632UnaryopXmm *create(Cfg *Func, Variable *Dest, Operand *Src) { 575 static InstX8632UnaryopXmm *create(Cfg *Func, Variable *Dest, Operand *Src) {
567 return new (Func->allocate<InstX8632UnaryopXmm>()) 576 return new (Func->allocate<InstX8632UnaryopXmm>())
568 InstX8632UnaryopXmm(Func, Dest, Src); 577 InstX8632UnaryopXmm(Func, Dest, Src);
569 } 578 }
570 void emit(const Cfg *Func) const override { 579 void emit(const Cfg *Func) const override {
580 if (!ALLOW_DUMP)
581 return;
571 Ostream &Str = Func->getContext()->getStrEmit(); 582 Ostream &Str = Func->getContext()->getStrEmit();
572 assert(getSrcSize() == 1); 583 assert(getSrcSize() == 1);
573 Str << "\t" << Opcode << "\t"; 584 Str << "\t" << Opcode << "\t";
574 getSrc(0)->emit(Func); 585 getSrc(0)->emit(Func);
575 Str << ", "; 586 Str << ", ";
576 getDest()->emit(Func); 587 getDest()->emit(Func);
577 } 588 }
578 void emitIAS(const Cfg *Func) const override { 589 void emitIAS(const Cfg *Func) const override {
579 Type Ty = getDest()->getType(); 590 Type Ty = getDest()->getType();
580 assert(getSrcSize() == 1); 591 assert(getSrcSize() == 1);
581 emitIASRegOpTyXMM(Func, Ty, getDest(), getSrc(0), Emitter); 592 emitIASRegOpTyXMM(Func, Ty, getDest(), getSrc(0), Emitter);
582 } 593 }
583 void dump(const Cfg *Func) const override { 594 void dump(const Cfg *Func) const override {
595 if (!ALLOW_DUMP)
596 return;
584 Ostream &Str = Func->getContext()->getStrDump(); 597 Ostream &Str = Func->getContext()->getStrDump();
585 dumpDest(Func); 598 dumpDest(Func);
586 Str << " = " << Opcode << "." << getDest()->getType() << " "; 599 Str << " = " << Opcode << "." << getDest()->getType() << " ";
587 dumpSources(Func); 600 dumpSources(Func);
588 } 601 }
589 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } 602 static bool classof(const Inst *Inst) { return isClassof(Inst, K); }
590 603
591 private: 604 private:
592 InstX8632UnaryopXmm(Cfg *Func, Variable *Dest, Operand *Src) 605 InstX8632UnaryopXmm(Cfg *Func, Variable *Dest, Operand *Src)
593 : InstX8632(Func, K, 1, Dest) { 606 : InstX8632(Func, K, 1, Dest) {
(...skipping 19 matching lines...) Expand all
613 InstX8632BinopGPRShift &operator=(const InstX8632BinopGPRShift &) = delete; 626 InstX8632BinopGPRShift &operator=(const InstX8632BinopGPRShift &) = delete;
614 627
615 public: 628 public:
616 // Create a binary-op GPR shift instruction. 629 // Create a binary-op GPR shift instruction.
617 static InstX8632BinopGPRShift *create(Cfg *Func, Variable *Dest, 630 static InstX8632BinopGPRShift *create(Cfg *Func, Variable *Dest,
618 Operand *Source) { 631 Operand *Source) {
619 return new (Func->allocate<InstX8632BinopGPRShift>()) 632 return new (Func->allocate<InstX8632BinopGPRShift>())
620 InstX8632BinopGPRShift(Func, Dest, Source); 633 InstX8632BinopGPRShift(Func, Dest, Source);
621 } 634 }
622 void emit(const Cfg *Func) const override { 635 void emit(const Cfg *Func) const override {
636 if (!ALLOW_DUMP)
637 return;
623 const bool ShiftHack = true; 638 const bool ShiftHack = true;
624 emitTwoAddress(Opcode, this, Func, ShiftHack); 639 emitTwoAddress(Opcode, this, Func, ShiftHack);
625 } 640 }
626 void emitIAS(const Cfg *Func) const override { 641 void emitIAS(const Cfg *Func) const override {
627 Type Ty = getDest()->getType(); 642 Type Ty = getDest()->getType();
628 assert(getSrcSize() == 2); 643 assert(getSrcSize() == 2);
629 emitIASGPRShift(Func, Ty, getDest(), getSrc(1), Emitter); 644 emitIASGPRShift(Func, Ty, getDest(), getSrc(1), Emitter);
630 } 645 }
631 void dump(const Cfg *Func) const override { 646 void dump(const Cfg *Func) const override {
647 if (!ALLOW_DUMP)
648 return;
632 Ostream &Str = Func->getContext()->getStrDump(); 649 Ostream &Str = Func->getContext()->getStrDump();
633 dumpDest(Func); 650 dumpDest(Func);
634 Str << " = " << Opcode << "." << getDest()->getType() << " "; 651 Str << " = " << Opcode << "." << getDest()->getType() << " ";
635 dumpSources(Func); 652 dumpSources(Func);
636 } 653 }
637 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } 654 static bool classof(const Inst *Inst) { return isClassof(Inst, K); }
638 655
639 private: 656 private:
640 InstX8632BinopGPRShift(Cfg *Func, Variable *Dest, Operand *Source) 657 InstX8632BinopGPRShift(Cfg *Func, Variable *Dest, Operand *Source)
641 : InstX8632(Func, K, 2, Dest) { 658 : InstX8632(Func, K, 2, Dest) {
(...skipping 10 matching lines...) Expand all
652 InstX8632BinopGPR(const InstX8632BinopGPR &) = delete; 669 InstX8632BinopGPR(const InstX8632BinopGPR &) = delete;
653 InstX8632BinopGPR &operator=(const InstX8632BinopGPR &) = delete; 670 InstX8632BinopGPR &operator=(const InstX8632BinopGPR &) = delete;
654 671
655 public: 672 public:
656 // Create an ordinary binary-op instruction like add or sub. 673 // Create an ordinary binary-op instruction like add or sub.
657 static InstX8632BinopGPR *create(Cfg *Func, Variable *Dest, Operand *Source) { 674 static InstX8632BinopGPR *create(Cfg *Func, Variable *Dest, Operand *Source) {
658 return new (Func->allocate<InstX8632BinopGPR>()) 675 return new (Func->allocate<InstX8632BinopGPR>())
659 InstX8632BinopGPR(Func, Dest, Source); 676 InstX8632BinopGPR(Func, Dest, Source);
660 } 677 }
661 void emit(const Cfg *Func) const override { 678 void emit(const Cfg *Func) const override {
679 if (!ALLOW_DUMP)
680 return;
662 const bool ShiftHack = false; 681 const bool ShiftHack = false;
663 emitTwoAddress(Opcode, this, Func, ShiftHack); 682 emitTwoAddress(Opcode, this, Func, ShiftHack);
664 } 683 }
665 void emitIAS(const Cfg *Func) const override { 684 void emitIAS(const Cfg *Func) const override {
666 Type Ty = getDest()->getType(); 685 Type Ty = getDest()->getType();
667 assert(getSrcSize() == 2); 686 assert(getSrcSize() == 2);
668 emitIASRegOpTyGPR(Func, Ty, getDest(), getSrc(1), Emitter); 687 emitIASRegOpTyGPR(Func, Ty, getDest(), getSrc(1), Emitter);
669 } 688 }
670 void dump(const Cfg *Func) const override { 689 void dump(const Cfg *Func) const override {
690 if (!ALLOW_DUMP)
691 return;
671 Ostream &Str = Func->getContext()->getStrDump(); 692 Ostream &Str = Func->getContext()->getStrDump();
672 dumpDest(Func); 693 dumpDest(Func);
673 Str << " = " << Opcode << "." << getDest()->getType() << " "; 694 Str << " = " << Opcode << "." << getDest()->getType() << " ";
674 dumpSources(Func); 695 dumpSources(Func);
675 } 696 }
676 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } 697 static bool classof(const Inst *Inst) { return isClassof(Inst, K); }
677 698
678 private: 699 private:
679 InstX8632BinopGPR(Cfg *Func, Variable *Dest, Operand *Source) 700 InstX8632BinopGPR(Cfg *Func, Variable *Dest, Operand *Source)
680 : InstX8632(Func, K, 2, Dest) { 701 : InstX8632(Func, K, 2, Dest) {
(...skipping 10 matching lines...) Expand all
691 InstX8632BinopXmm(const InstX8632BinopXmm &) = delete; 712 InstX8632BinopXmm(const InstX8632BinopXmm &) = delete;
692 InstX8632BinopXmm &operator=(const InstX8632BinopXmm &) = delete; 713 InstX8632BinopXmm &operator=(const InstX8632BinopXmm &) = delete;
693 714
694 public: 715 public:
695 // Create an XMM binary-op instruction like addss or addps. 716 // Create an XMM binary-op instruction like addss or addps.
696 static InstX8632BinopXmm *create(Cfg *Func, Variable *Dest, Operand *Source) { 717 static InstX8632BinopXmm *create(Cfg *Func, Variable *Dest, Operand *Source) {
697 return new (Func->allocate<InstX8632BinopXmm>()) 718 return new (Func->allocate<InstX8632BinopXmm>())
698 InstX8632BinopXmm(Func, Dest, Source); 719 InstX8632BinopXmm(Func, Dest, Source);
699 } 720 }
700 void emit(const Cfg *Func) const override { 721 void emit(const Cfg *Func) const override {
722 if (!ALLOW_DUMP)
723 return;
701 const bool ShiftHack = false; 724 const bool ShiftHack = false;
702 emitTwoAddress(Opcode, this, Func, ShiftHack); 725 emitTwoAddress(Opcode, this, Func, ShiftHack);
703 } 726 }
704 void emitIAS(const Cfg *Func) const override { 727 void emitIAS(const Cfg *Func) const override {
705 Type Ty = getDest()->getType(); 728 Type Ty = getDest()->getType();
706 if (NeedsElementType) 729 if (NeedsElementType)
707 Ty = typeElementType(Ty); 730 Ty = typeElementType(Ty);
708 assert(getSrcSize() == 2); 731 assert(getSrcSize() == 2);
709 emitIASRegOpTyXMM(Func, Ty, getDest(), getSrc(1), Emitter); 732 emitIASRegOpTyXMM(Func, Ty, getDest(), getSrc(1), Emitter);
710 } 733 }
711 void dump(const Cfg *Func) const override { 734 void dump(const Cfg *Func) const override {
735 if (!ALLOW_DUMP)
736 return;
712 Ostream &Str = Func->getContext()->getStrDump(); 737 Ostream &Str = Func->getContext()->getStrDump();
713 dumpDest(Func); 738 dumpDest(Func);
714 Str << " = " << Opcode << "." << getDest()->getType() << " "; 739 Str << " = " << Opcode << "." << getDest()->getType() << " ";
715 dumpSources(Func); 740 dumpSources(Func);
716 } 741 }
717 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } 742 static bool classof(const Inst *Inst) { return isClassof(Inst, K); }
718 743
719 private: 744 private:
720 InstX8632BinopXmm(Cfg *Func, Variable *Dest, Operand *Source) 745 InstX8632BinopXmm(Cfg *Func, Variable *Dest, Operand *Source)
721 : InstX8632(Func, K, 2, Dest) { 746 : InstX8632(Func, K, 2, Dest) {
(...skipping 15 matching lines...) Expand all
737 InstX8632BinopXmmShift &operator=(const InstX8632BinopXmmShift &) = delete; 762 InstX8632BinopXmmShift &operator=(const InstX8632BinopXmmShift &) = delete;
738 763
739 public: 764 public:
740 // Create an XMM binary-op shift operation. 765 // Create an XMM binary-op shift operation.
741 static InstX8632BinopXmmShift *create(Cfg *Func, Variable *Dest, 766 static InstX8632BinopXmmShift *create(Cfg *Func, Variable *Dest,
742 Operand *Source) { 767 Operand *Source) {
743 return new (Func->allocate<InstX8632BinopXmmShift>()) 768 return new (Func->allocate<InstX8632BinopXmmShift>())
744 InstX8632BinopXmmShift(Func, Dest, Source); 769 InstX8632BinopXmmShift(Func, Dest, Source);
745 } 770 }
746 void emit(const Cfg *Func) const override { 771 void emit(const Cfg *Func) const override {
772 if (!ALLOW_DUMP)
773 return;
747 const bool ShiftHack = false; 774 const bool ShiftHack = false;
748 emitTwoAddress(Opcode, this, Func, ShiftHack); 775 emitTwoAddress(Opcode, this, Func, ShiftHack);
749 } 776 }
750 void emitIAS(const Cfg *Func) const override { 777 void emitIAS(const Cfg *Func) const override {
751 Type Ty = getDest()->getType(); 778 Type Ty = getDest()->getType();
752 assert(Ty == IceType_v8i16 || Ty == IceType_v8i1 || Ty == IceType_v4i32 || 779 assert(Ty == IceType_v8i16 || Ty == IceType_v8i1 || Ty == IceType_v4i32 ||
753 Ty == IceType_v4i1); 780 Ty == IceType_v4i1);
754 Type ElementTy = typeElementType(Ty); 781 Type ElementTy = typeElementType(Ty);
755 assert(getSrcSize() == 2); 782 assert(getSrcSize() == 2);
756 emitIASXmmShift(Func, ElementTy, getDest(), getSrc(1), Emitter); 783 emitIASXmmShift(Func, ElementTy, getDest(), getSrc(1), Emitter);
757 } 784 }
758 void dump(const Cfg *Func) const override { 785 void dump(const Cfg *Func) const override {
786 if (!ALLOW_DUMP)
787 return;
759 Ostream &Str = Func->getContext()->getStrDump(); 788 Ostream &Str = Func->getContext()->getStrDump();
760 dumpDest(Func); 789 dumpDest(Func);
761 Str << " = " << Opcode << "." << getDest()->getType() << " "; 790 Str << " = " << Opcode << "." << getDest()->getType() << " ";
762 dumpSources(Func); 791 dumpSources(Func);
763 } 792 }
764 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } 793 static bool classof(const Inst *Inst) { return isClassof(Inst, K); }
765 794
766 private: 795 private:
767 InstX8632BinopXmmShift(Cfg *Func, Variable *Dest, Operand *Source) 796 InstX8632BinopXmmShift(Cfg *Func, Variable *Dest, Operand *Source)
768 : InstX8632(Func, K, 2, Dest) { 797 : InstX8632(Func, K, 2, Dest) {
(...skipping 10 matching lines...) Expand all
779 InstX8632Ternop &operator=(const InstX8632Ternop &) = delete; 808 InstX8632Ternop &operator=(const InstX8632Ternop &) = delete;
780 809
781 public: 810 public:
782 // Create a ternary-op instruction like div or idiv. 811 // Create a ternary-op instruction like div or idiv.
783 static InstX8632Ternop *create(Cfg *Func, Variable *Dest, Operand *Source1, 812 static InstX8632Ternop *create(Cfg *Func, Variable *Dest, Operand *Source1,
784 Operand *Source2) { 813 Operand *Source2) {
785 return new (Func->allocate<InstX8632Ternop>()) 814 return new (Func->allocate<InstX8632Ternop>())
786 InstX8632Ternop(Func, Dest, Source1, Source2); 815 InstX8632Ternop(Func, Dest, Source1, Source2);
787 } 816 }
788 void emit(const Cfg *Func) const override { 817 void emit(const Cfg *Func) const override {
818 if (!ALLOW_DUMP)
819 return;
789 Ostream &Str = Func->getContext()->getStrEmit(); 820 Ostream &Str = Func->getContext()->getStrEmit();
790 assert(getSrcSize() == 3); 821 assert(getSrcSize() == 3);
791 Str << "\t" << Opcode << "\t"; 822 Str << "\t" << Opcode << "\t";
792 getSrc(2)->emit(Func); 823 getSrc(2)->emit(Func);
793 Str << ", "; 824 Str << ", ";
794 getSrc(1)->emit(Func); 825 getSrc(1)->emit(Func);
795 Str << ", "; 826 Str << ", ";
796 getDest()->emit(Func); 827 getDest()->emit(Func);
797 } 828 }
798 void emitIAS(const Cfg *Func) const override; 829 void emitIAS(const Cfg *Func) const override;
799 void dump(const Cfg *Func) const override { 830 void dump(const Cfg *Func) const override {
831 if (!ALLOW_DUMP)
832 return;
800 Ostream &Str = Func->getContext()->getStrDump(); 833 Ostream &Str = Func->getContext()->getStrDump();
801 dumpDest(Func); 834 dumpDest(Func);
802 Str << " = " << Opcode << "." << getDest()->getType() << " "; 835 Str << " = " << Opcode << "." << getDest()->getType() << " ";
803 dumpSources(Func); 836 dumpSources(Func);
804 } 837 }
805 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } 838 static bool classof(const Inst *Inst) { return isClassof(Inst, K); }
806 839
807 private: 840 private:
808 InstX8632Ternop(Cfg *Func, Variable *Dest, Operand *Source1, Operand *Source2) 841 InstX8632Ternop(Cfg *Func, Variable *Dest, Operand *Source1, Operand *Source2)
809 : InstX8632(Func, K, 3, Dest) { 842 : InstX8632(Func, K, 3, Dest) {
(...skipping 11 matching lines...) Expand all
821 InstX8632ThreeAddressop(const InstX8632ThreeAddressop &) = delete; 854 InstX8632ThreeAddressop(const InstX8632ThreeAddressop &) = delete;
822 InstX8632ThreeAddressop &operator=(const InstX8632ThreeAddressop &) = delete; 855 InstX8632ThreeAddressop &operator=(const InstX8632ThreeAddressop &) = delete;
823 856
824 public: 857 public:
825 static InstX8632ThreeAddressop *create(Cfg *Func, Variable *Dest, 858 static InstX8632ThreeAddressop *create(Cfg *Func, Variable *Dest,
826 Operand *Source0, Operand *Source1) { 859 Operand *Source0, Operand *Source1) {
827 return new (Func->allocate<InstX8632ThreeAddressop>()) 860 return new (Func->allocate<InstX8632ThreeAddressop>())
828 InstX8632ThreeAddressop(Func, Dest, Source0, Source1); 861 InstX8632ThreeAddressop(Func, Dest, Source0, Source1);
829 } 862 }
830 void emit(const Cfg *Func) const override { 863 void emit(const Cfg *Func) const override {
864 if (!ALLOW_DUMP)
865 return;
831 Ostream &Str = Func->getContext()->getStrEmit(); 866 Ostream &Str = Func->getContext()->getStrEmit();
832 assert(getSrcSize() == 2); 867 assert(getSrcSize() == 2);
833 Str << "\t" << Opcode << "\t"; 868 Str << "\t" << Opcode << "\t";
834 getSrc(1)->emit(Func); 869 getSrc(1)->emit(Func);
835 Str << ", "; 870 Str << ", ";
836 getSrc(0)->emit(Func); 871 getSrc(0)->emit(Func);
837 Str << ", "; 872 Str << ", ";
838 getDest()->emit(Func); 873 getDest()->emit(Func);
839 } 874 }
840 void emitIAS(const Cfg *Func) const override; 875 void emitIAS(const Cfg *Func) const override;
841 void dump(const Cfg *Func) const override { 876 void dump(const Cfg *Func) const override {
877 if (!ALLOW_DUMP)
878 return;
842 Ostream &Str = Func->getContext()->getStrDump(); 879 Ostream &Str = Func->getContext()->getStrDump();
843 dumpDest(Func); 880 dumpDest(Func);
844 Str << " = " << Opcode << "." << getDest()->getType() << " "; 881 Str << " = " << Opcode << "." << getDest()->getType() << " ";
845 dumpSources(Func); 882 dumpSources(Func);
846 } 883 }
847 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } 884 static bool classof(const Inst *Inst) { return isClassof(Inst, K); }
848 885
849 private: 886 private:
850 InstX8632ThreeAddressop(Cfg *Func, Variable *Dest, Operand *Source0, 887 InstX8632ThreeAddressop(Cfg *Func, Variable *Dest, Operand *Source0,
851 Operand *Source1) 888 Operand *Source1)
(...skipping 18 matching lines...) Expand all
870 return new (Func->allocate<InstX8632Movlike>()) 907 return new (Func->allocate<InstX8632Movlike>())
871 InstX8632Movlike(Func, Dest, Source); 908 InstX8632Movlike(Func, Dest, Source);
872 } 909 }
873 bool isRedundantAssign() const override { 910 bool isRedundantAssign() const override {
874 return checkForRedundantAssign(getDest(), getSrc(0)); 911 return checkForRedundantAssign(getDest(), getSrc(0));
875 } 912 }
876 bool isSimpleAssign() const override { return true; } 913 bool isSimpleAssign() const override { return true; }
877 void emit(const Cfg *Func) const override; 914 void emit(const Cfg *Func) const override;
878 void emitIAS(const Cfg *Func) const override; 915 void emitIAS(const Cfg *Func) const override;
879 void dump(const Cfg *Func) const override { 916 void dump(const Cfg *Func) const override {
917 if (!ALLOW_DUMP)
918 return;
880 Ostream &Str = Func->getContext()->getStrDump(); 919 Ostream &Str = Func->getContext()->getStrDump();
881 Str << Opcode << "." << getDest()->getType() << " "; 920 Str << Opcode << "." << getDest()->getType() << " ";
882 dumpDest(Func); 921 dumpDest(Func);
883 Str << ", "; 922 Str << ", ";
884 dumpSources(Func); 923 dumpSources(Func);
885 } 924 }
886 static bool classof(const Inst *Inst) { return isClassof(Inst, K); } 925 static bool classof(const Inst *Inst) { return isClassof(Inst, K); }
887 926
888 private: 927 private:
889 InstX8632Movlike(Cfg *Func, Variable *Dest, Operand *Source) 928 InstX8632Movlike(Cfg *Func, Variable *Dest, Operand *Source)
(...skipping 662 matching lines...) Expand 10 before | Expand all | Expand 10 after
1552 template <> void InstX8632Pinsr::emitIAS(const Cfg *Func) const; 1591 template <> void InstX8632Pinsr::emitIAS(const Cfg *Func) const;
1553 template <> void InstX8632Movsx::emitIAS(const Cfg *Func) const; 1592 template <> void InstX8632Movsx::emitIAS(const Cfg *Func) const;
1554 template <> void InstX8632Movzx::emitIAS(const Cfg *Func) const; 1593 template <> void InstX8632Movzx::emitIAS(const Cfg *Func) const;
1555 template <> void InstX8632Pmull::emitIAS(const Cfg *Func) const; 1594 template <> void InstX8632Pmull::emitIAS(const Cfg *Func) const;
1556 template <> void InstX8632Pshufd::emitIAS(const Cfg *Func) const; 1595 template <> void InstX8632Pshufd::emitIAS(const Cfg *Func) const;
1557 template <> void InstX8632Shufps::emitIAS(const Cfg *Func) const; 1596 template <> void InstX8632Shufps::emitIAS(const Cfg *Func) const;
1558 1597
1559 } // end of namespace Ice 1598 } // end of namespace Ice
1560 1599
1561 #endif // SUBZERO_SRC_ICEINSTX8632_H 1600 #endif // SUBZERO_SRC_ICEINSTX8632_H
OLDNEW
« no previous file with comments | « src/IceInst.cpp ('k') | src/IceInstX8632.cpp » ('j') | tests_lit/reader_tests/alloca.ll » ('J')

Powered by Google App Engine
This is Rietveld 408576698