Skip to content
  1. Jul 01, 2008
  2. Jun 30, 2008
    • Dan Gohman's avatar
      Update comments to new-style syntax. · 4246cf8e
      Dan Gohman authored
      llvm-svn: 52925
      4246cf8e
    • 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
    • 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
  3. Jun 28, 2008
  4. Jun 27, 2008
  5. Jun 26, 2008
    • Dale Johannesen's avatar
      Fixes the last x86-64 test failure in compat.exp: · a2de8eab
      Dale Johannesen authored
      <16 x float> is 64-byte aligned (for some reason),
      which gets us into the stack realignment code.  The
      computation changing FP-relative offsets to SP-relative
      was broken, assiging a spill temp to a location
      also used for parameter passing.  This
      fixes it by rounding up the stack frame to a multiple
      of the largest alignment (I concluded it wasn't fixable
      without doing this, but I'm not very sure.)
      
      llvm-svn: 52750
      a2de8eab
  6. Jun 25, 2008
  7. Jun 24, 2008
  8. Jun 22, 2008
  9. Jun 19, 2008
    • Eli Friedman's avatar
      Fix a bug with <8 x i16> shuffle lowering on X86 where parts of the · 8d66e98c
      Eli Friedman authored
      shuffle could be skipped.  The check is invalid because the loop index i 
      doesn't correspond to the element actually inserted. The correct check is
      already done a few lines earlier, for whether the element is already in 
      the right spot, so this shouldn't have any effect on the codegen for 
      code that was already correct.
      
      llvm-svn: 52486
      8d66e98c
  10. Jun 18, 2008
  11. Jun 17, 2008
  12. Jun 16, 2008
  13. Jun 14, 2008
  14. Jun 13, 2008
    • Duncan Sands's avatar
      Disable some DAG combiner optimizations that may be · 8651e9c5
      Duncan Sands authored
      wrong for volatile loads and stores.  In fact this
      is almost all of them!  There are three types of
      problems: (1) it is wrong to change the width of
      a volatile memory access.  These may be used to
      do memory mapped i/o, in which case a load can have
      an effect even if the result is not used.  Consider
      loading an i32 but only using the lower 8 bits.  It
      is wrong to change this into a load of an i8, because
      you are no longer tickling the other three bytes.  It
      is also unwise to make a load/store wider.  For
      example, changing an i16 load into an i32 load is
      wrong no matter how aligned things are, since the
      fact of loading an additional 2 bytes can have
      i/o side-effects.  (2) it is wrong to change the
      number of volatile load/stores: they may be counted
      by the hardware.  (3) it is wrong to change a volatile
      load/store that requires one memory access into one
      that requires several.  For example on x86-32, you
      can store a double in one processor operation, but to
      store an i64 requires two (two i32 stores).  In a
      multi-threaded program you may want to bitcast an i64
      to a double and store as a double because that will
      occur atomically, and be indivisible to other threads.
      So it would be wrong to convert the store-of-double
      into a store of an i64, because this will become two
      i32 stores - no longer atomic.  My policy here is
      to say that the number of processor operations for
      an illegal operation is undefined.  So it is alright
      to change a store of an i64 (requires at least two
      stores; but could be validly lowered to memcpy for
      example) into a store of double (one processor op).
      In short, if the new store is legal and has the same
      size then I say that the transform is ok.  It would
      also be possible to say that transforms are always
      ok if before they were illegal, whether after they
      are illegal or not, but that's more awkward to do
      and I doubt it buys us anything much.
      However this exposed an interesting thing - on x86-32
      a store of i64 is considered legal!  That is because
      operations are marked legal by default, regardless of
      whether the type is legal or not.  In some ways this
      is clever: before type legalization this means that
      operations on illegal types are considered legal;
      after type legalization there are no illegal types
      so now operations are only legal if they really are.
      But I consider this to be too cunning for mere mortals.
      Better to do things explicitly by testing AfterLegalize.
      So I have changed things so that operations with illegal
      types are considered illegal - indeed they can never
      map to a machine operation.  However this means that
      the DAG combiner is more conservative because before
      it was "accidentally" performing transforms where the
      type was illegal because the operation was nonetheless
      marked legal.  So in a few such places I added a check
      on AfterLegalize, which I suppose was actually just
      forgotten before.  This causes the DAG combiner to do
      slightly more than it used to, which resulted in the X86
      backend blowing up because it got a slightly surprising
      node it wasn't expecting, so I tweaked it.
      
      llvm-svn: 52254
      8651e9c5
  15. Jun 11, 2008
  16. Jun 09, 2008
  17. Jun 08, 2008
    • Duncan Sands's avatar
      Remove comparison methods for MVT. The main cause · 11dd4245
      Duncan Sands authored
      of apint codegen failure is the DAG combiner doing
      the wrong thing because it was comparing MVT's using
      < rather than comparing the number of bits.  Removing
      the < method makes this mistake impossible to commit.
      Instead, add helper methods for comparing bits and use
      them.
      
      llvm-svn: 52098
      11dd4245
  18. 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
Loading