Skip to content
  1. Jan 24, 2009
  2. Jan 23, 2009
  3. Jan 22, 2009
    • Bob Wilson's avatar
      Fix a minor bug in DAGCombiner's folding of SELECT. Folding "select C, 0, 1" · c2dc7ee5
      Bob Wilson authored
      to "C ^ 1" is only valid when C is known to be either 0 or 1.  Most of the
      similar foldings in this function only handle "i1" types, but this one appears
      intentionally written to handle larger integer types.  If C has an integer
      type larger than "i1", this needs to check if the high bits of a boolean
      are known to be zero.  I also changed the comment to describe this folding as
      "C ^ 1" instead of "~C", since that is what the code does and since the latter
      would only be valid for "i1" types.  The good news is that most LLVM targets
      use TargetLowering::ZeroOrOneBooleanContent so this change will not disable
      the optimization; the bad news is that I've been unable to come up with a
      testcase to demonstrate the problem.
      
      I have also removed a "FIXME" comment for folding "select C, X, 0" to "C & X",
      since the code looks correct to me.  It could be made more aggressive by not
      limiting the type to "i1", but that would then require checking for
      TargetLowering::ZeroOrNegativeOneBooleanContent.  Similar changes could be
      done for the other SELECT foldings, but it was decided to be not worth the
      trouble and complexity (see e.g., r44663).
      
      llvm-svn: 62790
      c2dc7ee5
    • Dan Gohman's avatar
      Don't create ISD::FNEG nodes after legalize if they aren't legal. · 1f3411de
      Dan Gohman authored
      Simplify x+0 to x in unsafe-fp-math mode. This avoids a bunch of
      redundant work in many cases, because in unsafe-fp-math mode,
      ISD::FADD with a constant is considered free to negate, so the
      DAGCombiner often negates x+0 to -0-x thinking it's free, when
      in reality the end result is -x, which is more expensive than x.
      
      Also, combine x*0 to 0.
      
      This fixes PR3374.
      
      llvm-svn: 62789
      1f3411de
    • Bob Wilson's avatar
      Add SelectionDAG::getNOT method to construct bitwise NOT operations, · c5890050
      Bob Wilson authored
      corresponding to the "not" and "vnot" PatFrags.  Use the new method
      in some places where it seems appropriate.
      
      llvm-svn: 62768
      c5890050
    • Sanjiv Gupta's avatar
      Few targets like the tiny little PIC16 have only 16-bit pointers. · 4186ddfc
      Sanjiv Gupta authored
      llvm-svn: 62763
      4186ddfc
    • Evan Cheng's avatar
      Eliminate a couple of fields from TargetRegisterClass: SubRegClasses and... · 4a0bf66e
      Evan Cheng authored
      Eliminate a couple of fields from TargetRegisterClass: SubRegClasses and SuperRegClasses. These are not necessary. Also eliminate getSubRegisterRegClass and getSuperRegisterRegClass. These are slow and their results can change if register file names change. Just use TargetLowering::getRegClassFor() to get the right TargetRegisterClass instead.
      
      llvm-svn: 62762
      4a0bf66e
    • Chris Lattner's avatar
      fix a typo · e09d631d
      Chris Lattner authored
      llvm-svn: 62761
      e09d631d
  4. Jan 21, 2009
  5. Jan 20, 2009
  6. Jan 19, 2009
    • Dan Gohman's avatar
      Remove SDNode's virtual destructor. This makes it impossible for · 534c8a2d
      Dan Gohman authored
      SDNode subclasses to keep state that requires non-trivial
      destructors, however it was already effectively impossible,
      since the destructor isn't actually ever called. There currently
      aren't any SDNode subclasses affected by this, and in general
      it's desireable to keep SDNode objects light-weight.
      
      This eliminates the last virtual member function in the SDNode
      class, so it eliminates the need for a vtable pointer, making
      SDNode smaller.
      
      llvm-svn: 62539
      534c8a2d
Loading