Skip to content
  1. Jul 27, 2005
  2. Jul 16, 2005
  3. Jul 15, 2005
  4. Jun 06, 2005
  5. May 26, 2005
  6. May 20, 2005
  7. May 16, 2005
  8. May 13, 2005
  9. May 12, 2005
  10. May 06, 2005
  11. Apr 27, 2005
  12. Apr 24, 2005
  13. Apr 22, 2005
  14. Apr 19, 2005
  15. Mar 17, 2005
  16. Mar 16, 2005
  17. Mar 11, 2005
  18. Mar 10, 2005
  19. Feb 13, 2005
  20. Jan 23, 2005
  21. Jan 22, 2005
    • Chris Lattner's avatar
      Minor fix. · 97cf8fd4
      Chris Lattner authored
      llvm-svn: 19761
      97cf8fd4
    • Chris Lattner's avatar
      This is the final big of factoring. This shares cases in suboperand · 59a7f5c2
      Chris Lattner authored
      differences, which means that identical instructions (after stripping off
      the first literal string) do not run any different code at all.  On the X86,
      this turns this code:
      
          switch (MI->getOpcode()) {
          case X86::ADC32mi: printOperand(MI, 4, MVT::i32); break;
          case X86::ADC32mi8: printOperand(MI, 4, MVT::i8); break;
          case X86::ADC32mr: printOperand(MI, 4, MVT::i32); break;
          case X86::ADD32mi: printOperand(MI, 4, MVT::i32); break;
          case X86::ADD32mi8: printOperand(MI, 4, MVT::i8); break;
          case X86::ADD32mr: printOperand(MI, 4, MVT::i32); break;
          case X86::AND32mi: printOperand(MI, 4, MVT::i32); break;
          case X86::AND32mi8: printOperand(MI, 4, MVT::i8); break;
          case X86::AND32mr: printOperand(MI, 4, MVT::i32); break;
          case X86::CMP32mi: printOperand(MI, 4, MVT::i32); break;
          case X86::CMP32mr: printOperand(MI, 4, MVT::i32); break;
          case X86::MOV32mi: printOperand(MI, 4, MVT::i32); break;
          case X86::MOV32mr: printOperand(MI, 4, MVT::i32); break;
          case X86::OR32mi: printOperand(MI, 4, MVT::i32); break;
          case X86::OR32mi8: printOperand(MI, 4, MVT::i8); break;
          case X86::OR32mr: printOperand(MI, 4, MVT::i32); break;
          case X86::ROL32mi: printOperand(MI, 4, MVT::i8); break;
          case X86::ROR32mi: printOperand(MI, 4, MVT::i8); break;
          case X86::SAR32mi: printOperand(MI, 4, MVT::i8); break;
          case X86::SBB32mi: printOperand(MI, 4, MVT::i32); break;
          case X86::SBB32mi8: printOperand(MI, 4, MVT::i8); break;
          case X86::SBB32mr: printOperand(MI, 4, MVT::i32); break;
          case X86::SHL32mi: printOperand(MI, 4, MVT::i8); break;
          case X86::SHLD32mrCL: printOperand(MI, 4, MVT::i32); break;
          case X86::SHR32mi: printOperand(MI, 4, MVT::i8); break;
          case X86::SHRD32mrCL: printOperand(MI, 4, MVT::i32); break;
          case X86::SUB32mi: printOperand(MI, 4, MVT::i32); break;
          case X86::SUB32mi8: printOperand(MI, 4, MVT::i8); break;
          case X86::SUB32mr: printOperand(MI, 4, MVT::i32); break;
          case X86::TEST32mi: printOperand(MI, 4, MVT::i32); break;
          case X86::TEST32mr: printOperand(MI, 4, MVT::i32); break;
          case X86::TEST8mi: printOperand(MI, 4, MVT::i8); break;
          case X86::XCHG32mr: printOperand(MI, 4, MVT::i32); break;
          case X86::XOR32mi: printOperand(MI, 4, MVT::i32); break;
          case X86::XOR32mi8: printOperand(MI, 4, MVT::i8); break;
          case X86::XOR32mr: printOperand(MI, 4, MVT::i32); break;
          }
      
      into this:
      
          switch (MI->getOpcode()) {
          case X86::ADC32mi:
          case X86::ADC32mr:
          case X86::ADD32mi:
          case X86::ADD32mr:
          case X86::AND32mi:
          case X86::AND32mr:
          case X86::CMP32mi:
          case X86::CMP32mr:
          case X86::MOV32mi:
          case X86::MOV32mr:
          case X86::OR32mi:
          case X86::OR32mr:
          case X86::SBB32mi:
          case X86::SBB32mr:
          case X86::SHLD32mrCL:
          case X86::SHRD32mrCL:
          case X86::SUB32mi:
          case X86::SUB32mr:
          case X86::TEST32mi:
          case X86::TEST32mr:
          case X86::XCHG32mr:
          case X86::XOR32mi:
          case X86::XOR32mr: printOperand(MI, 4, MVT::i32); break;
          case X86::ADC32mi8:
          case X86::ADD32mi8:
          case X86::AND32mi8:
          case X86::OR32mi8:
          case X86::ROL32mi:
          case X86::ROR32mi:
          case X86::SAR32mi:
          case X86::SBB32mi8:
          case X86::SHL32mi:
          case X86::SHR32mi:
          case X86::SUB32mi8:
          case X86::TEST8mi:
          case X86::XOR32mi8: printOperand(MI, 4, MVT::i8); break;
          }
      
      After this, the generated asmwriters look pretty much as though they were
      generated by hand.  This shrinks the X86 asmwriter.inc files from 55101->39669
      and 55429->39551 bytes each, and PPC from 16766->12859 bytes.
      
      llvm-svn: 19760
      59a7f5c2
    • Chris Lattner's avatar
      Implement *even more* factoring. In particular, if all of the instruction · 92275bb6
      Chris Lattner authored
      strings starts out with a constant string, we emit the string first, using
      a table lookup (instead of a switch statement).
      
      Because this is usually the opcode portion of the asm string, the differences
      between the instructions have now been greatly reduced.  This allows many
      more case statements to be grouped together.
      
      This patch also allows instruction cases to be grouped together when the
      instruction patterns are exactly identical (common after the opcode string
      has been ripped off), and when the differing operand is a MachineInstr
      operand that needs to be formatted.
      
      The end result of this is a mean and lean generated AsmPrinter!
      
      llvm-svn: 19759
      92275bb6
Loading