Skip to content
  1. Jan 31, 2008
  2. Jan 30, 2008
  3. Jan 29, 2008
  4. Jan 27, 2008
  5. Jan 26, 2008
  6. Jan 25, 2008
  7. Jan 24, 2008
    • Chris Lattner's avatar
      Significantly simplify and improve handling of FP function results on x86-32. · a91f77ea
      Chris Lattner authored
      This case returns the value in ST(0) and then has to convert it to an SSE
      register.  This causes significant codegen ugliness in some cases.  For 
      example in the trivial fp-stack-direct-ret.ll testcase we used to generate:
      
      _bar:
      	subl	$28, %esp
      	call	L_foo$stub
      	fstpl	16(%esp)
      	movsd	16(%esp), %xmm0
      	movsd	%xmm0, 8(%esp)
      	fldl	8(%esp)
      	addl	$28, %esp
      	ret
      
      because we move the result of foo() into an XMM register, then have to
      move it back for the return of bar.
      
      Instead of hacking ever-more special cases into the call result lowering code
      we take a much simpler approach: on x86-32, fp return is modeled as always 
      returning into an f80 register which is then truncated to f32 or f64 as needed.
      Similarly for a result, we model it as an extension to f80 + return.
      
      This exposes the truncate and extensions to the dag combiner, allowing target
      independent code to hack on them, eliminating them in this case.  This gives 
      us this code for the example above:
      
      _bar:
      	subl	$12, %esp
      	call	L_foo$stub
      	addl	$12, %esp
      	ret
      
      The nasty aspect of this is that these conversions are not legal, but we want
      the second pass of dag combiner (post-legalize) to be able to hack on them.
      To handle this, we lie to legalize and say they are legal, then custom expand
      them on entry to the isel pass (PreprocessForFPConvert).  This is gross, but
      less gross than the code it is replacing :)
      
      This also allows us to generate better code in several other cases.  For 
      example on fp-stack-ret-conv.ll, we now generate:
      
      _test:
      	subl	$12, %esp
      	call	L_foo$stub
      	fstps	8(%esp)
      	movl	16(%esp), %eax
      	cvtss2sd	8(%esp), %xmm0
      	movsd	%xmm0, (%eax)
      	addl	$12, %esp
      	ret
      
      where before we produced (incidentally, the old bad code is identical to what
      gcc produces):
      
      _test:
      	subl	$12, %esp
      	call	L_foo$stub
      	fstpl	(%esp)
      	cvtsd2ss	(%esp), %xmm0
      	cvtss2sd	%xmm0, %xmm0
      	movl	16(%esp), %eax
      	movsd	%xmm0, (%eax)
      	addl	$12, %esp
      	ret
      
      Note that we generate slightly worse code on pr1505b.ll due to a scheduling 
      deficiency that is unrelated to this patch.
      
      llvm-svn: 46307
      a91f77ea
    • Evan Cheng's avatar
      Let each target decide byval alignment. For X86, it's 4-byte unless the... · 35abd840
      Evan Cheng authored
      Let each target decide byval alignment. For X86, it's 4-byte unless the aggregare contains SSE vector(s). For x86-64, it's max of 8 or alignment of the type.
      
      llvm-svn: 46286
      35abd840
  8. Jan 23, 2008
    • Duncan Sands's avatar
      The last pieces needed for loading arbitrary · 95d46ef8
      Duncan Sands authored
      precision integers.  This won't actually work
      (and most of the code is dead) unless the new
      legalization machinery is turned on.  While
      there, I rationalized the handling of i1, and
      removed some bogus (and unused) sextload patterns.
      For i1, this could result in microscopically
      better code for some architectures (not X86).
      It might also result in worse code if annotating
      with AssertZExt nodes turns out to be more harmful
      than helpful.
      
      llvm-svn: 46280
      95d46ef8
  9. Jan 17, 2008
    • Chris Lattner's avatar
      This commit changes: · 1ea55cf8
      Chris Lattner authored
      1. Legalize now always promotes truncstore of i1 to i8. 
      2. Remove patterns and gunk related to truncstore i1 from targets.
      3. Rename the StoreXAction stuff to TruncStoreAction in TLI.
      4. Make the TLI TruncStoreAction table a 2d table to handle from/to conversions.
      5. Mark a wide variety of invalid truncstores as such in various targets, e.g.
         X86 currently doesn't support truncstore of any of its integer types.
      6. Add legalize support for truncstores with invalid value input types.
      7. Add a dag combine transform to turn store(truncate) into truncstore when
         safe.
      
      The later allows us to compile CodeGen/X86/storetrunc-fp.ll to:
      
      _foo:
      	fldt	20(%esp)
      	fldt	4(%esp)
      	faddp	%st(1)
      	movl	36(%esp), %eax
      	fstps	(%eax)
      	ret
      
      instead of:
      
      _foo:
      	subl	$4, %esp
      	fldt	24(%esp)
      	fldt	8(%esp)
      	faddp	%st(1)
      	fstps	(%esp)
      	movl	40(%esp), %eax
      	movss	(%esp), %xmm0
      	movss	%xmm0, (%eax)
      	addl	$4, %esp
      	ret
      
      llvm-svn: 46140
      1ea55cf8
    • Chris Lattner's avatar
      * Introduce a new SelectionDAG::getIntPtrConstant method · 72733e57
      Chris Lattner authored
        and switch various codegen pieces and the X86 backend over
        to using it.
      
      * Add some comments to SelectionDAGNodes.h
      
      * Introduce a second argument to FP_ROUND, which indicates
        whether the FP_ROUND changes the value of its input. If
        not it is safe to xform things like fp_extend(fp_round(x)) -> x.
      
      llvm-svn: 46125
      72733e57
  10. Jan 16, 2008
  11. Jan 15, 2008
  12. Jan 13, 2008
  13. Jan 12, 2008
  14. Jan 11, 2008
    • Arnold Schwaighofer's avatar
      hrm - correct spelling. · 06da9e2d
      Arnold Schwaighofer authored
      Actually were not riding any arguments. Sadly there is no semantic spell checker that is going to safe you from such a mistake.
      
      llvm-svn: 45868
      06da9e2d
    • Arnold Schwaighofer's avatar
      Improve tail call optimized call's argument lowering. Before this · 6cf72fbb
      Arnold Schwaighofer authored
      commit all arguments where moved to the stack slot where they would
      reside on a normal function call before the lowering to the tail call
      stack slot. This was done to prevent arguments overwriting each other.
      Now only arguments sourcing from a FORMAL_ARGUMENTS node or a
      CopyFromReg node with virtual register (could also be a caller's
      argument) are lowered indirectly.
      
       --This line, and those below, will be ignored--
      
      M    X86/X86ISelLowering.cpp
      M    X86/README.txt
      
      llvm-svn: 45867
      6cf72fbb
    • Arnold Schwaighofer's avatar
      Correct a copy and paste error. · bf1816ea
      Arnold Schwaighofer authored
      llvm-svn: 45865
      bf1816ea
  15. Jan 10, 2008
  16. Jan 08, 2008
  17. Jan 05, 2008
  18. Jan 03, 2008
  19. Dec 31, 2007
    • Chris Lattner's avatar
      Rename SSARegMap -> MachineRegisterInfo in keeping with the idea · a10fff51
      Chris Lattner authored
      that "machine" classes are used to represent the current state of
      the code being compiled.  Given this expanded name, we can start 
      moving other stuff into it.  For now, move the UsedPhysRegs and
      LiveIn/LoveOuts vectors from MachineFunction into it.
      
      Update all the clients to match.
      
      This also reduces some needless #includes, such as MachineModuleInfo
      from MachineFunction.
      
      llvm-svn: 45467
      a10fff51
    • Chris Lattner's avatar
      Add new shorter predicates for testing machine operands for various types: · a5bb370a
      Chris Lattner authored
      e.g. MO.isMBB() instead of MO.isMachineBasicBlock().  I don't plan on 
      switching everything over, so new clients should just start using the 
      shorter names.
      
      Remove old long accessors, switching everything over to use the short
      accessor: getMachineBasicBlock() -> getMBB(), 
      getConstantPoolIndex() -> getIndex(), setMachineBasicBlock -> setMBB(), etc.
      
      llvm-svn: 45464
      a5bb370a
  20. Dec 29, 2007
    • Chris Lattner's avatar
      Remove attribution from file headers, per discussion on llvmdev. · f3ebc3f3
      Chris Lattner authored
      llvm-svn: 45418
      f3ebc3f3
    • Chris Lattner's avatar
      Codegen: · 07ccbfa6
      Chris Lattner authored
      as:
      
      _bar:
      	pushl	%esi
      	subl	$8, %esp
      	movl	16(%esp), %esi
      	call	L_foo$stub
      	fstps	(%esi)
      	addl	$8, %esp
      	popl	%esi
      	#FP_REG_KILL
      	ret
      
      instead of:
      
      _bar:
      	pushl	%esi
      	subl	$8, %esp
      	movl	16(%esp), %esi
      	call	L_foo$stub
      	fstpl	(%esi)
      	cvtsd2ss	(%esi), %xmm0
      	movss	%xmm0, (%esi)
      	addl	$8, %esp
      	popl	%esi
      	#FP_REG_KILL
      	ret
      
      llvm-svn: 45401
      07ccbfa6
Loading