diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2017-05-08 17:12:57 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2017-05-08 17:12:57 +0000 | 
| commit | c46e6a5940c50058e00c0c5f9123fd82e338d29a (patch) | |
| tree | 89a719d723035c54a190b1f81d329834f1f93336 /lib/Transforms/InstCombine/InstCombineAndOrXor.cpp | |
| parent | 148779df305667b6942fee7e758fdf81a6498f38 (diff) | |
Notes
Diffstat (limited to 'lib/Transforms/InstCombine/InstCombineAndOrXor.cpp')
| -rw-r--r-- | lib/Transforms/InstCombine/InstCombineAndOrXor.cpp | 57 | 
1 files changed, 2 insertions, 55 deletions
diff --git a/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp b/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp index c7092bf3a398..b114801cc1c0 100644 --- a/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp +++ b/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp @@ -1834,25 +1834,8 @@ Value *InstCombiner::FoldOrOfICmps(ICmpInst *LHS, ICmpInst *RHS,      case ICmpInst::ICMP_UGT: // (X == 13 | X u> 14) -> no change      case ICmpInst::ICMP_SGT: // (X == 13 | X s> 14) -> no change        break; -    case ICmpInst::ICMP_NE:  // (X == 13 | X != 15) -> X != 15 -    case ICmpInst::ICMP_ULT: // (X == 13 | X u< 15) -> X u< 15 -    case ICmpInst::ICMP_SLT: // (X == 13 | X s< 15) -> X s< 15 -      return RHS;      }      break; -  case ICmpInst::ICMP_NE: -    switch (PredR) { -    default: -      llvm_unreachable("Unknown integer condition code!"); -    case ICmpInst::ICMP_EQ:  // (X != 13 | X == 15) -> X != 13 -    case ICmpInst::ICMP_UGT: // (X != 13 | X u> 15) -> X != 13 -    case ICmpInst::ICMP_SGT: // (X != 13 | X s> 15) -> X != 13 -      return LHS; -    case ICmpInst::ICMP_NE:  // (X != 13 | X != 15) -> true -    case ICmpInst::ICMP_ULT: // (X != 13 | X u< 15) -> true -    case ICmpInst::ICMP_SLT: // (X != 13 | X s< 15) -> true -      return Builder->getTrue(); -    }    case ICmpInst::ICMP_ULT:      switch (PredR) {      default: @@ -1860,15 +1843,9 @@ Value *InstCombiner::FoldOrOfICmps(ICmpInst *LHS, ICmpInst *RHS,      case ICmpInst::ICMP_EQ: // (X u< 13 | X == 14) -> no change        break;      case ICmpInst::ICMP_UGT: // (X u< 13 | X u> 15) -> (X-13) u> 2 -      // If RHSC is [us]MAXINT, it is always false.  Not handling -      // this can cause overflow. -      if (RHSC->isMaxValue(false)) -        return LHS; +      assert(!RHSC->isMaxValue(false) && "Missed icmp simplification");        return insertRangeTest(LHS0, LHSC->getValue(), RHSC->getValue() + 1,                               false, false); -    case ICmpInst::ICMP_NE:  // (X u< 13 | X != 15) -> X != 15 -    case ICmpInst::ICMP_ULT: // (X u< 13 | X u< 15) -> X u< 15 -      return RHS;      }      break;    case ICmpInst::ICMP_SLT: @@ -1878,39 +1855,9 @@ Value *InstCombiner::FoldOrOfICmps(ICmpInst *LHS, ICmpInst *RHS,      case ICmpInst::ICMP_EQ: // (X s< 13 | X == 14) -> no change        break;      case ICmpInst::ICMP_SGT: // (X s< 13 | X s> 15) -> (X-13) s> 2 -      // If RHSC is [us]MAXINT, it is always false.  Not handling -      // this can cause overflow. -      if (RHSC->isMaxValue(true)) -        return LHS; +      assert(!RHSC->isMaxValue(true) && "Missed icmp simplification");        return insertRangeTest(LHS0, LHSC->getValue(), RHSC->getValue() + 1, true,                               false); -    case ICmpInst::ICMP_NE:  // (X s< 13 | X != 15) -> X != 15 -    case ICmpInst::ICMP_SLT: // (X s< 13 | X s< 15) -> X s< 15 -      return RHS; -    } -    break; -  case ICmpInst::ICMP_UGT: -    switch (PredR) { -    default: -      llvm_unreachable("Unknown integer condition code!"); -    case ICmpInst::ICMP_EQ:  // (X u> 13 | X == 15) -> X u> 13 -    case ICmpInst::ICMP_UGT: // (X u> 13 | X u> 15) -> X u> 13 -      return LHS; -    case ICmpInst::ICMP_NE:  // (X u> 13 | X != 15) -> true -    case ICmpInst::ICMP_ULT: // (X u> 13 | X u< 15) -> true -      return Builder->getTrue(); -    } -    break; -  case ICmpInst::ICMP_SGT: -    switch (PredR) { -    default: -      llvm_unreachable("Unknown integer condition code!"); -    case ICmpInst::ICMP_EQ:  // (X s> 13 | X == 15) -> X > 13 -    case ICmpInst::ICMP_SGT: // (X s> 13 | X s> 15) -> X > 13 -      return LHS; -    case ICmpInst::ICMP_NE:  // (X s> 13 | X != 15) -> true -    case ICmpInst::ICMP_SLT: // (X s> 13 | X s< 15) -> true -      return Builder->getTrue();      }      break;    }  | 
