Skip to content
  1. 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
    • Dan Gohman's avatar
      Revert this use of NSW; this one isn't actually safe. NSW addition · 7a2dab88
      Dan Gohman authored
      is not reassociative.
      
      llvm-svn: 91667
      7a2dab88
    • Dan Gohman's avatar
      Eliminte unnecessary uses of <cstdio>. · 57e80862
      Dan Gohman authored
      llvm-svn: 91666
      57e80862
    • Dan Gohman's avatar
      Add utility routines for NSW multiply. · 4e3b29e3
      Dan Gohman authored
      llvm-svn: 91664
      4e3b29e3
    • Dan Gohman's avatar
      Add utility routines for creating integer negation operators with NSW set. · 4ab4420d
      Dan Gohman authored
      Integer negation only overflows with INT_MIN, but that's an important case.
      
      llvm-svn: 91662
      4ab4420d
    • Dan Gohman's avatar
      Delete an unused variable. · 916fec41
      Dan Gohman authored
      llvm-svn: 91659
      916fec41
    • Eric Christopher's avatar
      Fix typo. · 4c155350
      Eric Christopher authored
      llvm-svn: 91657
      4c155350
    • Dan Gohman's avatar
      Preserve NSW information in more places. · b256ccfb
      Dan Gohman authored
      llvm-svn: 91656
      b256ccfb
    • Evan Cheng's avatar
      Re-apply 91623 now that I actually know what I was trying to do. · 3dfd04e2
      Evan Cheng authored
      llvm-svn: 91655
      3dfd04e2
    • Dan Gohman's avatar
      Add Loop contains utility methods for testing whether a loop · 18fa5686
      Dan Gohman authored
      contains another loop, or an instruction. The loop form is
      substantially more efficient on large loops than the typical
      code it replaces.
      
      llvm-svn: 91654
      18fa5686
    • Dan Gohman's avatar
      Minor code simplification. · fd7231f1
      Dan Gohman authored
      llvm-svn: 91653
      fd7231f1
    • Dan Gohman's avatar
      Whitespace cleanups. · cb0efecd
      Dan Gohman authored
      llvm-svn: 91651
      cb0efecd
    • Bob Wilson's avatar
      Handle ARM inline asm "w" constraints with 64-bit ("d") registers. · 3152b047
      Bob Wilson authored
      The change in SelectionDAGBuilder is needed to allow using bitcasts to convert
      between f64 (the default type for ARM "d" registers) and 64-bit Neon vector
      types.  Radar 7457110.
      
      llvm-svn: 91649
      3152b047
    • Dan Gohman's avatar
      Don't pass const pointers by reference. · b1924e8a
      Dan Gohman authored
      llvm-svn: 91647
      b1924e8a
    • Dan Gohman's avatar
      Update a comment. · 1af19548
      Dan Gohman authored
      llvm-svn: 91645
      1af19548
    • John McCall's avatar
      Pass the error string directly to llvm_unreachable instead of the residual · eabfd8b1
      John McCall authored
      (0 && "error").  Rough consensus seems to be that g++ *should* be diagnosing
      this because the pointer makes it not an ICE in c++03.  Everyone agrees that
      the current standard is silly and null-pointer-ness should not be based on
      ICE-ness.  Excellent fight scene in Act II, denouement weak, two stars.
      
      llvm-svn: 91644
      eabfd8b1
    • Dan Gohman's avatar
      Reapply LoopStrengthReduce and IVUsers cleanups, excluding the part · 92c36965
      Dan Gohman authored
      of 91296 that caused trouble -- the Processed list needs to be
      preserved for the livetime of the pass, as AddUsersIfInteresting
      is called from other passes.
      
      llvm-svn: 91641
      92c36965
    • 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
    • John McCall's avatar
      Sundry dependent-name fixes flagged by clang++. · 753100ce
      John McCall authored
      llvm-svn: 91636
      753100ce
    • Bill Wendling's avatar
      Revert accidental commit. · 3c13667d
      Bill Wendling authored
      llvm-svn: 91635
      3c13667d
    • Bill Wendling's avatar
      Turn off critical edge splitting for landing pads. The introduction of a · 819c356a
      Bill Wendling authored
      non-landing pad basic block as the successor to a block that ends in an
      unconditional jump will cause block folding to remove the added block as a
      successor. Thus eventually removing it AND the landing pad entirely. Critical
      edge splitting is an optimization, so we can safely turn it off when dealing
      with landing pads.
      
      llvm-svn: 91634
      819c356a
  2. Dec 17, 2009
Loading