Skip to content
  1. Mar 19, 2010
    • Kevin Enderby's avatar
      Fixed the encoding problems of the crc32 instructions. All had the Operand size · cf0843ed
      Kevin Enderby authored
      override prefix and only the r/m16 forms should have had that.  Also for variant
      one, the AT&T syntax, added suffixes to all forms.  Also added the missing
      64-bit form for 'CRC32 r64, r/m8'.  Plus added test cases for all forms and
      tweaked one test case to add the needed suffixes.
      
      llvm-svn: 98980
      cf0843ed
    • Chris Lattner's avatar
      Now that tblgen can handle matching implicit defs of instructions · 83facb08
      Chris Lattner authored
      to input patterns, we can fix X86ISD::CMP and X86ISD::BT as taking
      two inputs (which have to be the same type) and *returning an i32*.
      This is how the SDNodes get made in the graph, but we weren't able
      to model it this way due to deficiencies in the pattern language.
      
      Now we can change things like this:
      
       def UCOM_FpIr80: FpI_<(outs), (ins RFP80:$lhs, RFP80:$rhs), CompareFP,
      -                  [(X86cmp RFP80:$lhs, RFP80:$rhs),
      -                   (implicit EFLAGS)]>; // CC = ST(0) cmp ST(i)
      +                  [(set EFLAGS, (X86cmp RFP80:$lhs, RFP80:$rhs))]>;
      
      and fix terrible crimes like this:
      
      -def : Pat<(parallel (X86cmp GR8:$src1, 0), (implicit EFLAGS)),
      +def : Pat<(X86cmp GR8:$src1, 0),
                 (TEST8rr GR8:$src1, GR8:$src1)>;
      
      This relies on matching the result of TEST8rr (which is EFLAGS, which is
      an implicit def) to the result of X86cmp, an i32.
      
      llvm-svn: 98903
      83facb08
  2. Mar 15, 2010
  3. Mar 08, 2010
  4. Feb 28, 2010
    • Dan Gohman's avatar
      Implement XMM subregs. · bdd6405f
      Dan Gohman authored
      Extracting the low element of a vector is now done with EXTRACT_SUBREG,
      and the zero-extension performed by load movss is now modeled with
      SUBREG_TO_REG, and so on.
      
      Register-to-register movss and movsd are no longer considered copies;
      they are two-address instructions which insert a scalar into a vector.
      
      llvm-svn: 97354
      bdd6405f
    • Dan Gohman's avatar
      The mayHaveSideEffects flag is no longer used. · 8c5d683a
      Dan Gohman authored
      llvm-svn: 97348
      8c5d683a
  5. Feb 26, 2010
  6. Feb 23, 2010
  7. Feb 18, 2010
  8. Feb 16, 2010
    • David Greene's avatar
      · 9641d068
      David Greene authored
      Add support for emitting non-temporal stores for DAGs marked
      non-temporal.  Fix from r96241 for botched encoding of MOVNTDQ.
      
      Add documentation for !nontemporal metadata.
      
      Add a simpler movnt testcase.
      
      llvm-svn: 96386
      9641d068
  9. Feb 15, 2010
  10. Feb 13, 2010
  11. Feb 12, 2010
  12. Feb 10, 2010
  13. Feb 05, 2010
  14. Jan 11, 2010
    • David Greene's avatar
      · 206351a1
      David Greene authored
      Implement a feature (-vector-unaligned-mem) to allow targets to
      ignore alignment requirements for SIMD memory operands.  This
      is useful on architectures like the AMD 10h that do not trap on
      unaligned references if a status bit is twiddled at startup time.
      
      llvm-svn: 93151
      206351a1
  15. Dec 22, 2009
  16. Dec 18, 2009
    • Evan Cheng's avatar
      On recent Intel u-arch's, folding loads into some unary SSE instructions can · 4cf30b72
      Evan Cheng authored
      be non-optimal. To be precise, we should avoid folding loads if the instructions
      only update part of the destination register, and the non-updated part is not
      needed. e.g. cvtss2sd, sqrtss. Unfolding the load from these instructions breaks
      the partial register dependency and it can improve performance. e.g.
      
      movss (%rdi), %xmm0
      cvtss2sd %xmm0, %xmm0
      
      instead of
      cvtss2sd (%rdi), %xmm0
      
      An alternative method to break dependency is to clear the register first. e.g.
      xorps %xmm0, %xmm0
      cvtss2sd (%rdi), %xmm0
      
      llvm-svn: 91672
      4cf30b72
    • Sean Callanan's avatar
      Instruction fixes, added instructions, and AsmString changes in the · 04d8cb74
      Sean Callanan authored
      X86 instruction tables.
      
      Also (while I was at it) cleaned up the X86 tables, removing tabs and
      80-line violations.
      
      This patch was reviewed by Chris Lattner, but please let me know if
      there are any problems.
      
      * X86*.td
      	Removed tabs and fixed 80-line violations
      
      * X86Instr64bit.td
      	(IRET, POPCNT, BT_, LSL, SWPGS, PUSH_S, POP_S, L_S, SMSW)
      		Added
      	(CALL, CMOV) Added qualifiers
      	(JMP) Added PC-relative jump instruction
      	(POPFQ/PUSHFQ) Added qualifiers; renamed PUSHFQ to indicate
      		that it is 64-bit only (ambiguous since it has no
      		REX prefix)
      	(MOV) Added rr form going the other way, which is encoded
      		differently
      	(MOV) Changed immediates to offsets, which is more correct;
      		also fixed MOV64o64a to have to a 64-bit offset
      	(MOV) Fixed qualifiers
      	(MOV) Added debug-register and condition-register moves
      	(MOVZX) Added more forms
      	(ADC, SUB, SBB, AND, OR, XOR) Added reverse forms, which
      		(as with MOV) are encoded differently
      	(ROL) Made REX.W required
      	(BT) Uncommented mr form for disassembly only
      	(CVT__2__) Added several missing non-intrinsic forms
      	(LXADD, XCHG) Reordered operands to make more sense for
      		MRMSrcMem
      	(XCHG) Added register-to-register forms
      	(XADD, CMPXCHG, XCHG) Added non-locked forms
      * X86InstrSSE.td
      	(CVTSS2SI, COMISS, CVTTPS2DQ, CVTPS2PD, CVTPD2PS, MOVQ)
      		Added
      * X86InstrFPStack.td
      	(COM_FST0, COMP_FST0, COM_FI, COM_FIP, FFREE, FNCLEX, FNOP,
      	 FXAM, FLDL2T, FLDL2E, FLDPI, FLDLG2, FLDLN2, F2XM1, FYL2X,
      	 FPTAN, FPATAN, FXTRACT, FPREM1, FDECSTP, FINCSTP, FPREM,
      	 FYL2XP1, FSINCOS, FRNDINT, FSCALE, FCOMPP, FXSAVE,
      	 FXRSTOR)
      		Added
      	(FCOM, FCOMP) Added qualifiers
      	(FSTENV, FSAVE, FSTSW) Fixed opcode names
      	(FNSTSW) Added implicit register operand
      * X86InstrInfo.td
      	(opaque512mem) Added for FXSAVE/FXRSTOR
      	(offset8, offset16, offset32, offset64) Added for MOV
      	(NOOPW, IRET, POPCNT, IN, BTC, BTR, BTS, LSL, INVLPG, STR,
      	 LTR, PUSHFS, PUSHGS, POPFS, POPGS, LDS, LSS, LES, LFS,
      	 LGS, VERR, VERW, SGDT, SIDT, SLDT, LGDT, LIDT, LLDT,
      	 LODSD, OUTSB, OUTSW, OUTSD, HLT, RSM, FNINIT, CLC, STC,
      	 CLI, STI, CLD, STD, CMC, CLTS, XLAT, WRMSR, RDMSR, RDPMC,
      	 SMSW, LMSW, CPUID, INVD, WBINVD, INVEPT, INVVPID, VMCALL,
      	 VMCLEAR, VMLAUNCH, VMRESUME, VMPTRLD, VMPTRST, VMREAD,
      	 VMWRITE, VMXOFF, VMXON) Added
      	(NOOPL, POPF, POPFD, PUSHF, PUSHFD) Added qualifier
      	(JO, JNO, JB, JAE, JE, JNE, JBE, JA, JS, JNS, JP, JNP, JL,
      	 JGE, JLE, JG, JCXZ) Added 32-bit forms
      	(MOV) Changed some immediate forms to offset forms
      	(MOV) Added reversed reg-reg forms, which are encoded
      		differently
      	(MOV) Added debug-register and condition-register moves
      	(CMOV) Added qualifiers
      	(AND, OR, XOR, ADC, SUB, SBB) Added reverse forms, like MOV
      	(BT) Uncommented memory-register forms for disassembler
      	(MOVSX, MOVZX) Added forms
      	(XCHG, LXADD) Made operand order make sense for MRMSrcMem
      	(XCHG) Added register-register forms
      	(XADD, CMPXCHG) Added unlocked forms
      * X86InstrMMX.td
      	(MMX_MOVD, MMV_MOVQ) Added forms
      * X86InstrInfo.cpp: Changed PUSHFQ to PUSHFQ64 to reflect table
      	change
      
      * X86RegisterInfo.td: Added debug and condition register sets
      * x86-64-pic-3.ll: Fixed testcase to reflect call qualifier
      * peep-test-3.ll: Fixed testcase to reflect test qualifier
      * cmov.ll: Fixed testcase to reflect cmov qualifier
      * loop-blocks.ll: Fixed testcase to reflect call qualifier
      * x86-64-pic-11.ll: Fixed testcase to reflect call qualifier
      * 2009-11-04-SubregCoalescingBug.ll: Fixed testcase to reflect call
        qualifier
      * x86-64-pic-2.ll: Fixed testcase to reflect call qualifier
      * live-out-reg-info.ll: Fixed testcase to reflect test qualifier
      * tail-opts.ll: Fixed testcase to reflect call qualifiers
      * x86-64-pic-10.ll: Fixed testcase to reflect call qualifier
      * bss-pagealigned.ll: Fixed testcase to reflect call qualifier
      * x86-64-pic-1.ll: Fixed testcase to reflect call qualifier
      * widen_load-1.ll: Fixed testcase to reflect call qualifier
      
      llvm-svn: 91638
      04d8cb74
  17. Dec 09, 2009
  18. Nov 20, 2009
  19. Nov 17, 2009
  20. Nov 16, 2009
  21. Nov 08, 2009
    • Nate Begeman's avatar
      x86 vector shuffle cleanup/fixes: · 3a313df6
      Nate Begeman authored
      1. rename the movhp patfrag to movlhps, since thats what it actually matches
      2. eliminate the bogus movhps load and store patterns, they were incorrect.  The load transforms are already handled (correctly) by shufps/unpack.
      3. revert a recent test change to its correct form.
      
      llvm-svn: 86415
      3a313df6
  22. Nov 07, 2009
  23. Oct 29, 2009
  24. Oct 28, 2009
  25. Oct 19, 2009
  26. Sep 21, 2009
  27. Sep 16, 2009
    • Sean Callanan's avatar
      Added a variety of floating-point and SSE instructions. · e739ac89
      Sean Callanan authored
      All of these do not have patterns (they're for the
      disassembler).
      
      Many of the floating-point instructions will probably
      be rolled into definitions that have patterns, and may
      eventually be superseded by mdefs.  So I put them
      together and left a comment.
      
      llvm-svn: 81979
      e739ac89
  28. Aug 20, 2009
  29. Aug 19, 2009
  30. Aug 12, 2009
    • Daniel Dunbar's avatar
      Add 'isCodeGenOnly' bit to Instruction .td records. · c4f8ea4c
      Daniel Dunbar authored
       - Used to mark fake instructions which don't correspond to an actual machine
         instruction (or are duplicates of a real instruction). This is to be used for
         "special cases" in the .td files, which should be ignored by things like the
         assembler and disassembler. We still need a good solution to handle pervasive
         duplication, like with the Int_ instructions.
      
       - Set the bit on fake "mov 0" style instructions, which allows turning an
         assembler matcher warning into a hard error.
      
       - -2 FIXMEs.
      
      llvm-svn: 78731
      c4f8ea4c
Loading