Skip to content
  1. Feb 26, 2008
    • Arnold Schwaighofer's avatar
      Change the lowering of arguments for tail call optimized · b01b99ec
      Arnold Schwaighofer authored
      calls. Before arguments that could overwrite each other were
      explicitly lowered to a stack slot, not giving the register allocator
      a chance to optimize. Now a sequence of copyto/copyfrom virtual
      registers ensures that arguments are loaded in (virtual) registers
      before they are lowered to the stack slot (and might overwrite each
      other). Also parameter stack slots are marked mutable for
      (potentially) tail calling functions.
      
      llvm-svn: 47593
      b01b99ec
  2. Feb 25, 2008
  3. Feb 22, 2008
  4. Feb 20, 2008
  5. Feb 19, 2008
    • Evan Cheng's avatar
      - When DAG combiner is folding a bit convert into a BUILD_VECTOR, it should... · 6200c225
      Evan Cheng authored
      - When DAG combiner is folding a bit convert into a BUILD_VECTOR, it should check if it's essentially a SCALAR_TO_VECTOR. Avoid turning (v8i16) <10, u, u, u> to <10, 0, u, u, u, u, u, u>. Instead, simply convert it to a SCALAR_TO_VECTOR of the proper type.
      - X86 now normalize SCALAR_TO_VECTOR to (BIT_CONVERT (v4i32 SCALAR_TO_VECTOR)). Get rid of X86ISD::S2VEC.
      
      llvm-svn: 47290
      6200c225
  6. Feb 18, 2008
  7. Feb 16, 2008
  8. Feb 14, 2008
    • Duncan Sands's avatar
      In TargetLowering::LowerCallTo, don't assert that · 4c95dbd6
      Duncan Sands authored
      the return value is zero-extended if it isn't
      sign-extended.  It may also be any-extended.
      Also, if a floating point value was returned
      in a larger floating point type, pass 1 as the
      second operand to FP_ROUND, which tells it
      that all the precision is in the original type.
      I think this is right but I could be wrong.
      Finally, when doing libcalls, set isZExt on
      a parameter if it is "unsigned".  Currently
      isSExt is set when signed, and nothing is
      set otherwise.  This should be right for all
      calls to standard library routines.
      
      llvm-svn: 47122
      4c95dbd6
    • Nate Begeman's avatar
      Change how FP immediates are handled. · 53e1b3f9
      Nate Begeman authored
      1) ConstantFP is now expand by default
      2) ConstantFP is not turned into TargetConstantFP during Legalize
         if it is legal.
      
      This allows ConstantFP to be handled like Constant, allowing for 
      targets that can encode FP immediates as MachineOperands.
      
      As a bonus, fix up Itanium FP constants, which now correctly match,
      and match more constants!  Hooray.
      
      llvm-svn: 47121
      53e1b3f9
    • Dan Gohman's avatar
      Assigning an APInt to 0 with plain assignment gives it a one-bit · 9ca025f1
      Dan Gohman authored
      size. Initialize these APInts to properly-sized zero values.
      
      llvm-svn: 47099
      9ca025f1
  9. Feb 13, 2008
  10. Feb 12, 2008
  11. Feb 11, 2008
  12. Feb 10, 2008
  13. Feb 08, 2008
  14. Feb 07, 2008
  15. Feb 06, 2008
  16. Feb 05, 2008
  17. Feb 02, 2008
    • Nick Lewycky's avatar
      Don't use uninitialized values. Fixes vec_align.ll on X86 Linux. · f5b9938e
      Nick Lewycky authored
      llvm-svn: 46666
      f5b9938e
    • Evan Cheng's avatar
      SDIsel processes llvm.dbg.declare by recording the variable debug information... · efd142a9
      Evan Cheng authored
      SDIsel processes llvm.dbg.declare by recording the variable debug information descriptor and its corresponding stack frame index in MachineModuleInfo. This only works if the local variable is "homed" in the stack frame. It does not work for byval parameter, etc.
      Added ISD::DECLARE node type to represent llvm.dbg.declare intrinsic. Now the intrinsic calls are lowered into a SDNode and lives on through out the codegen passes.
      For now, since all the debugging information recording is done at isel time, when a ISD::DECLARE node is selected, it has the side effect of also recording the variable. This is a short term solution that should be fixed in time.
      
      llvm-svn: 46659
      efd142a9
  18. Jan 31, 2008
  19. Jan 30, 2008
  20. Jan 29, 2008
  21. Jan 27, 2008
  22. Jan 26, 2008
  23. Jan 25, 2008
  24. 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
Loading