Skip to content
  1. Aug 21, 2008
  2. Aug 16, 2008
  3. Aug 15, 2008
  4. Aug 08, 2008
  5. Aug 07, 2008
  6. Aug 03, 2008
  7. Jul 27, 2008
  8. Jul 17, 2008
    • Dan Gohman's avatar
      Add a new function, ReplaceAllUsesOfValuesWith, which handles bulk · 17059681
      Dan Gohman authored
      replacement of multiple values. This is slightly more efficient
      than doing multiple ReplaceAllUsesOfValueWith calls, and theoretically
      could be optimized even further. However, an important property of this
      new function is that it handles the case where the source value set and
      destination value set overlap. This makes it feasible for isel to use
      SelectNodeTo in many very common cases, which is advantageous because
      SelectNodeTo avoids a temporary node and it doesn't require CSEMap
      updates for users of values that don't change position.
      
      Revamp MorphNodeTo, which is what does all the work of SelectNodeTo, to
      handle operand lists more efficiently, and to correctly handle a number
      of corner cases to which its new wider use exposes it.
      
      This commit also includes a change to the encoding of post-isel opcodes
      in SDNodes; now instead of being sandwiched between the target-independent
      pre-isel opcodes and the target-dependent pre-isel opcodes, post-isel
      opcodes are now represented as negative values. This makes it possible
      to test if an opcode is pre-isel or post-isel without having to know
      the size of the current target's post-isel instruction set.
      
      These changes speed up llc overall by 3% and reduce memory usage by 10%
      on the InstructionCombining.cpp testcase with -fast and -regalloc=local.
      
      llvm-svn: 53728
      17059681
  9. Jul 10, 2008
  10. Jul 08, 2008
    • Dan Gohman's avatar
      Pool-allocation for MachineInstrs, MachineBasicBlocks, and · 3b460303
      Dan Gohman authored
      MachineMemOperands. The pools are owned by MachineFunctions.
      
      This drastically reduces the number of calls to malloc/free made
      during the "Emit" phase of scheduling, as well as later phases
      in CodeGen. Combined with other changes, this speeds up the
      "instruction selection" phase of CodeGen by 10% in some cases.
      
      llvm-svn: 53212
      3b460303
  11. Jul 07, 2008
  12. Jul 03, 2008
    • Evan Cheng's avatar
      - Remove calls to copyKillDeadInfo which is an N^2 function. Instead,... · 7d98a48f
      Evan Cheng authored
      - Remove calls to copyKillDeadInfo which is an N^2 function. Instead, propagate kill / dead markers as new instructions are constructed in foldMemoryOperand, convertToThressAddress, etc.
      - Also remove LiveVariables::instructionChanged, etc. Replace all calls with cheaper calls which update VarInfo kill list.
      
      llvm-svn: 53097
      7d98a48f
  13. Jul 02, 2008
    • Duncan Sands's avatar
      Add a new getMergeValues method that does not need · 739a0548
      Duncan Sands authored
      to be passed the list of value types, and use this
      where appropriate.  Inappropriate places are where
      the value type list is already known and may be
      long, in which case the existing method is more
      efficient.
      
      llvm-svn: 53035
      739a0548
  14. Jul 01, 2008
    • Dan Gohman's avatar
      Split ISD::LABEL into ISD::DBG_LABEL and ISD::EH_LABEL, eliminating · fb19f940
      Dan Gohman authored
      the need for a flavor operand, and add a new SDNode subclass,
      LabelSDNode, for use with them to eliminate the need for a label id
      operand.
      
      Change instruction selection to let these label nodes through
      unmodified instead of creating copies of them. Teach the MachineInstr
      emitter how to emit a MachineInstr directly from an ISD label node.
      
      This avoids the need for allocating SDNodes for the label id and
      flavor value, as well as SDNodes for each of the post-isel label,
      label id, and label flavor.
      
      llvm-svn: 52943
      fb19f940
  15. Jun 30, 2008
    • Dan Gohman's avatar
      Rename ISD::LOCATION to ISD::DBG_STOPPOINT to better reflect its · 5c73a886
      Dan Gohman authored
      purpose, and give it a custom SDNode subclass so that it doesn't
      need to have line number, column number, filename string, and
      directory string, all existing as individual SDNodes to be the
      operands.
      
      This was the only user of ISD::STRING, StringSDNode, etc., so
      remove those and some associated code.
      
      This makes stop-points considerably easier to read in
      -view-legalize-dags output, and reduces overhead (creating new
      nodes and copying std::strings into them) on code containing
      debugging information.
      
      llvm-svn: 52924
      5c73a886
    • Evan Cheng's avatar
      Split scheduling from instruction selection. · 0711d68f
      Evan Cheng authored
      llvm-svn: 52923
      0711d68f
    • Dan Gohman's avatar
      Replace some std::vectors that showed up in heap profiling with · 31c8123d
      Dan Gohman authored
      SmallVectors. Change the signature of TargetLowering::LowerArguments
      to avoid returning a vector by value, and update the two targets
      which still use this directly, Sparc and IA64, accordingly.
      
      llvm-svn: 52917
      31c8123d
    • Duncan Sands's avatar
      Revert the SelectionDAG optimization that makes · 1ae6ef83
      Duncan Sands authored
      it impossible to create a MERGE_VALUES node with
      only one result: sometimes it is useful to be able
      to create a node with only one result out of one of
      the results of a node with more than one result, for
      example because the new node will eventually be used
      to replace a one-result node using ReplaceAllUsesWith,
      cf X86TargetLowering::ExpandFP_TO_SINT.  On the other
      hand, most users of MERGE_VALUES don't need this and
      for them the optimization was valuable.  So add a new
      utility method getMergeValues for creating MERGE_VALUES
      nodes which by default performs the optimization.
      Change almost everywhere to use getMergeValues (and
      tidy some stuff up at the same time).
      
      llvm-svn: 52893
      1ae6ef83
  16. Jun 21, 2008
  17. 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
  18. May 14, 2008
  19. May 13, 2008
  20. 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
  21. Mar 31, 2008
  22. Mar 25, 2008
  23. Mar 17, 2008
  24. Mar 15, 2008
  25. Mar 14, 2008
  26. Mar 11, 2008
Loading