Skip to content
  • 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
Loading