Skip to content
  1. Sep 23, 2008
  2. Jul 27, 2008
  3. Jul 04, 2008
    • Duncan Sands's avatar
      Rather than having a different custom legalization · 93e18034
      Duncan Sands authored
      hook for each way in which a result type can be
      legalized (promotion, expansion, softening etc),
      just use one: ReplaceNodeResults, which returns
      a node with exactly the same result types as the
      node passed to it, but presumably with a bunch of
      custom code behind the scenes.  No change if the
      new LegalizeTypes infrastructure is not turned on.
      
      llvm-svn: 53137
      93e18034
  4. Jun 06, 2008
    • Duncan Sands's avatar
      Wrap MVT::ValueType in a struct to get type safety · 13237ac3
      Duncan Sands authored
      and better control the abstraction.  Rename the type
      to MVT.  To update out-of-tree patches, the main
      thing to do is to rename MVT::ValueType to MVT, and
      rewrite expressions like MVT::getSizeInBits(VT) in
      the form VT.getSizeInBits().  Use VT.getSimpleVT()
      to extract a MVT::SimpleValueType for use in switch
      statements (you will get an assert failure if VT is
      an extended value type - these shouldn't exist after
      type legalization).
      This results in a small speedup of codegen and no
      new testsuite failures (x86-64 linux).
      
      llvm-svn: 52044
      13237ac3
  5. Apr 28, 2008
  6. Apr 14, 2008
  7. Apr 12, 2008
    • Dan Gohman's avatar
      Drop ISD::MEMSET, ISD::MEMMOVE, and ISD::MEMCPY, which are not Legal · 544ab2c5
      Dan Gohman authored
      on any current target and aren't optimized in DAGCombiner. Instead
      of using intermediate nodes, expand the operations, choosing between
      simple loads/stores, target-specific code, and library calls,
      immediately.
      
      Previously, the code to emit optimized code for these operations
      was only used at initial SelectionDAG construction time; now it is
      used at all times. This fixes some cases where rep;movs was being
      used for small copies where simple loads/stores would be better.
      
      This also cleans up code that checks for alignments less than 4;
      let the targets make that decision instead of doing it in
      target-independent code. This allows x86 to use rep;movs in
      low-alignment cases.
      
      Also, this fixes a bug that resulted in the use of rep;stos for
      memsets of 0 with non-constant memory size when the alignment was
      at least 4. It's better to use the library in this case, which
      can be significantly faster when the size is large.
      
      This also preserves more SourceValue information when memory
      intrinsics are lowered into simple loads/stores.
      
      llvm-svn: 49572
      544ab2c5
  8. Feb 13, 2008
  9. Feb 05, 2008
  10. Jan 30, 2008
  11. Dec 29, 2007
  12. Nov 27, 2007
  13. Nov 24, 2007
    • 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
  14. Nov 06, 2007
  15. Oct 31, 2007
  16. Oct 23, 2007
  17. Oct 19, 2007
  18. Oct 08, 2007
  19. Sep 11, 2007
  20. Aug 02, 2007
  21. Jul 27, 2007
  22. Jun 22, 2007
  23. Jun 19, 2007
  24. May 17, 2007
  25. Apr 27, 2007
  26. Apr 22, 2007
  27. Apr 10, 2007
  28. Apr 02, 2007
  29. Mar 31, 2007
  30. Mar 28, 2007
  31. Mar 25, 2007
  32. Mar 21, 2007
  33. Mar 20, 2007
  34. Mar 16, 2007
  35. Mar 13, 2007
  36. Jan 30, 2007
    • Evan Cheng's avatar
      - Fix codegen for pc relative constant (e.g. JT) in thumb mode: · 83f35170
      Evan Cheng authored
              .set PCRELV0, (LJTI1_0_0-(LPCRELL0+4))
      LPCRELL0:
              add r1, pc, #PCRELV0
      This is not legal since add r1, pc, #c requires the constant be a multiple of 4.
      Do the following instead:
              .set PCRELV0, (LJTI1_0_0-(LPCRELL0+4))
      LPCRELL0:
              mov r1, #PCRELV0
              add r1, pc
      
      - In thumb mode, it's not possible to use .set generate a pc relative stub
        address. The stub is ARM code which is in a different section from the thumb
        code. Load the value from a constpool instead.
      - Some asm printing clean up.
      
      llvm-svn: 33664
      83f35170
  37. Jan 19, 2007
Loading