Skip to content
  1. Jan 26, 2009
  2. Jan 25, 2009
  3. Jan 24, 2009
  4. Jan 23, 2009
  5. 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
Loading