diff --git a/llvm/lib/CodeGen/CodeGenPrepare.cpp b/llvm/lib/CodeGen/CodeGenPrepare.cpp index 8eaf78157550e..9e9c0a09190f3 100644 --- a/llvm/lib/CodeGen/CodeGenPrepare.cpp +++ b/llvm/lib/CodeGen/CodeGenPrepare.cpp @@ -8268,8 +8268,10 @@ static bool optimizeBranch(BranchInst *Branch, const TargetLowering &TLI, if (CmpC.isPowerOf2() && Cmp->getPredicate() == ICmpInst::ICMP_ULT && match(UI, m_Shr(m_Specific(X), m_SpecificInt(CmpC.logBase2())))) { IRBuilder<> Builder(Branch); - if (UI->getParent() != Branch->getParent()) + if (UI->getParent() != Branch->getParent()) { UI->moveBefore(Branch); + UI->dropPoisonGeneratingFlags(); + } Value *NewCmp = Builder.CreateCmp(ICmpInst::ICMP_EQ, UI, ConstantInt::get(UI->getType(), 0)); LLVM_DEBUG(dbgs() << "Converting " << *Cmp << "\n"); @@ -8281,8 +8283,10 @@ static bool optimizeBranch(BranchInst *Branch, const TargetLowering &TLI, (match(UI, m_Add(m_Specific(X), m_SpecificInt(-CmpC))) || match(UI, m_Sub(m_Specific(X), m_SpecificInt(CmpC))))) { IRBuilder<> Builder(Branch); - if (UI->getParent() != Branch->getParent()) + if (UI->getParent() != Branch->getParent()) { UI->moveBefore(Branch); + UI->dropPoisonGeneratingFlags(); + } Value *NewCmp = Builder.CreateCmp(Cmp->getPredicate(), UI, ConstantInt::get(UI->getType(), 0)); LLVM_DEBUG(dbgs() << "Converting " << *Cmp << "\n"); diff --git a/llvm/test/Transforms/CodeGenPrepare/RISCV/convert-to-eqz.ll b/llvm/test/Transforms/CodeGenPrepare/RISCV/convert-to-eqz.ll index 9c934e55791e8..a08ca34f01a9f 100644 --- a/llvm/test/Transforms/CodeGenPrepare/RISCV/convert-to-eqz.ll +++ b/llvm/test/Transforms/CodeGenPrepare/RISCV/convert-to-eqz.ll @@ -5,7 +5,7 @@ define i8 @hoist_add(i8 %x) { ; CHECK-LABEL: define i8 @hoist_add( ; CHECK-SAME: i8 [[X:%.*]]) { ; CHECK-NEXT: entry: -; CHECK-NEXT: [[INC:%.*]] = add nuw nsw i8 [[X]], 1 +; CHECK-NEXT: [[INC:%.*]] = add i8 [[X]], 1 ; CHECK-NEXT: [[TMP0:%.*]] = icmp eq i8 [[INC]], 0 ; CHECK-NEXT: br i1 [[TMP0]], label [[EXIT:%.*]], label [[IF_THEN:%.*]] ; CHECK: if.then: @@ -31,7 +31,7 @@ define i8 @hoist_lshr(i8 %x) { ; CHECK-LABEL: define i8 @hoist_lshr( ; CHECK-SAME: i8 [[X:%.*]]) { ; CHECK-NEXT: entry: -; CHECK-NEXT: [[INC:%.*]] = lshr exact i8 [[X]], 3 +; CHECK-NEXT: [[INC:%.*]] = lshr i8 [[X]], 3 ; CHECK-NEXT: [[TMP0:%.*]] = icmp eq i8 [[INC]], 0 ; CHECK-NEXT: br i1 [[TMP0]], label [[EXIT:%.*]], label [[IF_THEN:%.*]] ; CHECK: if.then: