Skip to content
  1. Dec 07, 2007
  2. Dec 06, 2007
  3. Nov 27, 2007
    • Duncan Sands's avatar
      Fix PR1146: parameter attributes are longer part of · ad0ea2d4
      Duncan Sands authored
      the function type, instead they belong to functions
      and function calls.  This is an updated and slightly
      corrected version of Reid Spencer's original patch.
      The only known problem is that auto-upgrading of
      bitcode files doesn't seem to work properly (see
      test/Bitcode/AutoUpgradeIntrinsics.ll).  Hopefully
      a bitcode guru (who might that be? :) ) will fix it.
      
      llvm-svn: 44359
      ad0ea2d4
  4. Nov 25, 2007
    • Chris Lattner's avatar
      Fix a long standing deficiency in the X86 backend: we would · 5728bdd4
      Chris Lattner authored
      sometimes emit "zero" and "all one" vectors multiple times,
      for example:
      
      _test2:
      	pcmpeqd	%mm0, %mm0
      	movq	%mm0, _M1
      	pcmpeqd	%mm0, %mm0
      	movq	%mm0, _M2
      	ret
      
      instead of:
      
      _test2:
      	pcmpeqd	%mm0, %mm0
      	movq	%mm0, _M1
      	movq	%mm0, _M2
      	ret
      
      This patch fixes this by always arranging for zero/one vectors
      to be defined as v4i32 or v2i32 (SSE/MMX) instead of letting them be
      any random type.  This ensures they get trivially CSE'd on the dag.
      This fix is also important for LegalizeDAGTypes, as it gets unhappy
      when the x86 backend wants BUILD_VECTOR(i64 0) to be legal even when
      'i64' isn't legal.
      
      This patch makes the following changes:
      
      1) X86TargetLowering::LowerBUILD_VECTOR now lowers 0/1 vectors into
         their canonical types.
      2) The now-dead patterns are removed from the SSE/MMX .td files.
      3) All the patterns in the .td file that referred to immAllOnesV or
         immAllZerosV in the wrong form now use *_bc to match them with a
         bitcast wrapped around them.
      4) X86DAGToDAGISel::SelectScalarSSELoad is generalized to handle 
         bitcast'd zero vectors, which simplifies the code actually.
      5) getShuffleVectorZeroOrUndef is updated to generate a shuffle that
         is legal, instead of generating one that is illegal and expecting
         a later legalize pass to clean it up.
      6) isZeroShuffle is generalized to handle bitcast of zeros.
      7) several other minor tweaks.
      
      This patch is definite goodness, but has the potential to cause random
      code quality regressions.  Please be on the lookout for these and let 
      me know if they happen.
      
      llvm-svn: 44310
      5728bdd4
  5. Nov 24, 2007
    • Chris Lattner's avatar
      remove bogus assertion that broke CodeGen/Generic/cast-fp.ll on x86 · f72ad162
      Chris Lattner authored
      among others.
      
      llvm-svn: 44302
      f72ad162
    • Chris Lattner's avatar
      Several changes: · f81d5886
      Chris Lattner authored
      1) Change the interface to TargetLowering::ExpandOperationResult to 
         take and return entire NODES that need a result expanded, not just
         the value.  This allows us to handle things like READCYCLECOUNTER,
         which returns two values.
      2) Implement (extremely limited) support in LegalizeDAG::ExpandOp for MERGE_VALUES.
      3) Reimplement custom lowering in LegalizeDAGTypes in terms of the new
         ExpandOperationResult.  This makes the result simpler and fully 
         general.
      4) Implement (fully general) expand support for MERGE_VALUES in LegalizeDAGTypes.
      5) Implement ExpandOperationResult support for ARM f64->i64 bitconvert and ARM
         i64 shifts, allowing them to work with LegalizeDAGTypes.
      6) Implement ExpandOperationResult support for X86 READCYCLECOUNTER and FP_TO_SINT,
         allowing them to work with LegalizeDAGTypes.
      
      LegalizeDAGTypes now passes several more X86 codegen tests when enabled and when
      type legalization in LegalizeDAG is ifdef'd out.
      
      llvm-svn: 44300
      f81d5886
  6. Nov 16, 2007
  7. Nov 13, 2007
    • Bill Wendling's avatar
      Unify CALLSEQ_{START,END}. They take 4 parameters: the chain, two stack · f359fed9
      Bill Wendling authored
      adjustment fields, and an optional flag. If there is a "dynamic_stackalloc" in
      the code, make sure that it's bracketed by CALLSEQ_START and CALLSEQ_END. If
      not, then there is the potential for the stack to be changed while the stack's
      being used by another instruction (like a call).
      
      This can only result in tears...
      
      llvm-svn: 44037
      f359fed9
  8. Nov 10, 2007
  9. Nov 09, 2007
    • Evan Cheng's avatar
      Much improved pic jumptable codegen: · 797d56ff
      Evan Cheng authored
      Then:
              call    "L1$pb"
      "L1$pb":
              popl    %eax
      		...
      LBB1_1: # entry
              imull   $4, %ecx, %ecx
              leal    LJTI1_0-"L1$pb"(%eax), %edx
              addl    LJTI1_0-"L1$pb"(%ecx,%eax), %edx
              jmpl    *%edx
      
              .align  2
              .set L1_0_set_3,LBB1_3-LJTI1_0
              .set L1_0_set_2,LBB1_2-LJTI1_0
              .set L1_0_set_5,LBB1_5-LJTI1_0
              .set L1_0_set_4,LBB1_4-LJTI1_0
      LJTI1_0:
              .long    L1_0_set_3
              .long    L1_0_set_2
      
      Now:
              call    "L1$pb"
      "L1$pb":
              popl    %eax
      		...
      LBB1_1: # entry
              addl    LJTI1_0-"L1$pb"(%eax,%ecx,4), %eax
              jmpl    *%eax
      
      		.align  2
      		.set L1_0_set_3,LBB1_3-"L1$pb"
      		.set L1_0_set_2,LBB1_2-"L1$pb"
      		.set L1_0_set_5,LBB1_5-"L1$pb"
      		.set L1_0_set_4,LBB1_4-"L1$pb"
      LJTI1_0:
              .long    L1_0_set_3
              .long    L1_0_set_2
      
      llvm-svn: 43924
      797d56ff
  10. Nov 06, 2007
  11. Nov 04, 2007
  12. Nov 02, 2007
  13. Oct 31, 2007
  14. Oct 30, 2007
  15. Oct 29, 2007
  16. Oct 26, 2007
    • Evan Cheng's avatar
      Loosen up iv reuse to allow reuse of the same stride but a larger type when... · 7f3d0247
      Evan Cheng authored
      Loosen up iv reuse to allow reuse of the same stride but a larger type when truncating from the larger type to smaller type is free.
      e.g.
      Turns this loop:
      LBB1_1: # entry.bb_crit_edge
              xorl    %ecx, %ecx
              xorw    %dx, %dx
              movw    %dx, %si
      LBB1_2: # bb
              movl    L_X$non_lazy_ptr, %edi
              movw    %si, (%edi)
              movl    L_Y$non_lazy_ptr, %edi
              movw    %dx, (%edi)
      		addw    $4, %dx
      		incw    %si
      		incl    %ecx
      		cmpl    %eax, %ecx
      		jne     LBB1_2  # bb
      	
      into
      
      LBB1_1: # entry.bb_crit_edge
              xorl    %ecx, %ecx
              xorw    %dx, %dx
      LBB1_2: # bb
              movl    L_X$non_lazy_ptr, %esi
              movw    %cx, (%esi)
              movl    L_Y$non_lazy_ptr, %esi
              movw    %dx, (%esi)
              addw    $4, %dx
      		incl    %ecx
              cmpl    %eax, %ecx
              jne     LBB1_2  # bb
      
      llvm-svn: 43375
      7f3d0247
  17. Oct 21, 2007
  18. Oct 19, 2007
    • Rafael Espindola's avatar
      Add support for byval function whose argument is not 32 bit aligned. · 846c19dd
      Rafael Espindola authored
      To do this it is necessary to add a "always inline" argument to the
      memcpy node. For completeness I have also added this node to memmove
      and memset.  I have also added getMem* functions, because the extra
      argument makes it cumbersome to use getNode and because I get confused
      by it :-)
      
      llvm-svn: 43172
      846c19dd
  19. Oct 17, 2007
  20. Oct 16, 2007
  21. Oct 15, 2007
  22. Oct 14, 2007
  23. Oct 12, 2007
  24. Oct 11, 2007
  25. Oct 09, 2007
  26. Oct 08, 2007
  27. Oct 05, 2007
  28. Sep 29, 2007
Loading