diff options
| -rw-r--r-- | llvm/lib/CodeGen/CodeGenPrepare.cpp | 6 | ||||
| -rw-r--r-- | llvm/test/Transforms/CodeGenPrepare/X86/overflow-intrinsics.ll | 21 |
2 files changed, 26 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/CodeGenPrepare.cpp b/llvm/lib/CodeGen/CodeGenPrepare.cpp index e70e4ee0308..e8498eb375e 100644 --- a/llvm/lib/CodeGen/CodeGenPrepare.cpp +++ b/llvm/lib/CodeGen/CodeGenPrepare.cpp @@ -1267,8 +1267,12 @@ static bool combineToUAddWithOverflow(CmpInst *Cmp, const TargetLowering &TLI, static bool combineToUSubWithOverflow(CmpInst *Cmp, const TargetLowering &TLI, const DataLayout &DL, DominatorTree &DT, bool &ModifiedDT) { - // Convert (A u> B) to (A u< B) to simplify pattern matching. + // We are not expecting non-canonical/degenerate code. Just bail out. Value *A = Cmp->getOperand(0), *B = Cmp->getOperand(1); + if (isa<Constant>(A) && isa<Constant>(B)) + return false; + + // Convert (A u> B) to (A u< B) to simplify pattern matching. ICmpInst::Predicate Pred = Cmp->getPredicate(); if (Pred == ICmpInst::ICMP_UGT) { std::swap(A, B); diff --git a/llvm/test/Transforms/CodeGenPrepare/X86/overflow-intrinsics.ll b/llvm/test/Transforms/CodeGenPrepare/X86/overflow-intrinsics.ll index 9a0bf28cb9f..a9ec204f088 100644 --- a/llvm/test/Transforms/CodeGenPrepare/X86/overflow-intrinsics.ll +++ b/llvm/test/Transforms/CodeGenPrepare/X86/overflow-intrinsics.ll @@ -1,3 +1,4 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; RUN: opt -codegenprepare -S < %s | FileCheck %s ; RUN: opt -enable-debugify -codegenprepare -S < %s 2>&1 | FileCheck %s -check-prefix=DEBUG @@ -454,6 +455,26 @@ define void @foo() { unreachable } +; Similarly for usubo. + +define i1 @bar2() { +; CHECK-LABEL: @bar2( +; CHECK-NEXT: [[CMP:%.*]] = icmp eq i64 1, 0 +; CHECK-NEXT: ret i1 [[CMP]] +; + %cmp = icmp eq i64 1, 0 + ret i1 %cmp +} + +define i64 @foo2(i8 *%p) { +; CHECK-LABEL: @foo2( +; CHECK-NEXT: [[SUB:%.*]] = add nsw i64 1, -1 +; CHECK-NEXT: ret i64 [[SUB]] +; + %sub = add nsw i64 1, -1 + ret i64 %sub +} + ; Check that every instruction inserted by -codegenprepare has a debug location. ; DEBUG: CheckModuleDebugify: PASS |

