Author: Thurston Dang Date: 2026-06-22T12:46:46-07:00 New Revision: 8b1cc13acfece7c1cb0a9fc7d97c3169f68a5ed4
URL: https://github.com/llvm/llvm-project/commit/8b1cc13acfece7c1cb0a9fc7d97c3169f68a5ed4 DIFF: https://github.com/llvm/llvm-project/commit/8b1cc13acfece7c1cb0a9fc7d97c3169f68a5ed4.diff LOG: Revert "[InstCombine] Merge consecutive assumes (#204983)" This reverts commit b9940aa6cf3c30ae8eb3c2059c0869ed95bb42aa. Added: Modified: llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp llvm/test/Transforms/InstCombine/assume-loop-align.ll llvm/test/Transforms/InstCombine/assume.ll llvm/test/Transforms/PhaseOrdering/AArch64/std-find.ll Removed: ################################################################################ diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp index 880d896e12d6e..ce9e4b836a56e 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp @@ -3844,26 +3844,10 @@ Instruction *InstCombinerImpl::visitCallInst(CallInst &CI) { } } - if (II->hasOperandBundles()) { - // Merge consecutive assumes to save some resources - if (auto *PrevAI = dyn_cast_or_null<AssumeInst>(II->getPrevNode()); - PrevAI && PrevAI->hasOperandBundles()) { - SmallVector<OperandBundleDef, 4> Bundles; - Bundles.reserve(II->getNumOperandBundles() + - PrevAI->getNumOperandBundles()); - for (auto Bundle : PrevAI->operand_bundles()) - Bundles.emplace_back(Bundle); - for (auto Bundle : II->operand_bundles()) - Bundles.emplace_back(Bundle); - Builder.CreateAssumption(Bundles); - eraseInstFromFunction(*PrevAI); - return eraseInstFromFunction(*II); - } - - // If the assume has operand bundles, the folds below will never work, so - // don't bother trying. + // If the assume has operand bundles, the folds below will never work, so + // don't bother trying. + if (II->hasOperandBundles()) break; - } Value *IIOperand = II->getArgOperand(0); diff --git a/llvm/test/Transforms/InstCombine/assume-loop-align.ll b/llvm/test/Transforms/InstCombine/assume-loop-align.ll index 2701775f011e8..0c5e403ca54a9 100644 --- a/llvm/test/Transforms/InstCombine/assume-loop-align.ll +++ b/llvm/test/Transforms/InstCombine/assume-loop-align.ll @@ -10,7 +10,8 @@ target triple = "x86_64-unknown-linux-gnu" define void @foo(ptr %a, ptr %b) #0 { ; CHECK-LABEL: @foo( ; CHECK-NEXT: entry: -; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[A:%.*]], i64 64), "align"(ptr [[B:%.*]], i64 64) ] +; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[A:%.*]], i64 64) ] +; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[B:%.*]], i64 64) ] ; CHECK-NEXT: br label [[FOR_BODY:%.*]] ; CHECK: for.body: ; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INDVARS_IV_NEXT:%.*]], [[FOR_BODY]] ] diff --git a/llvm/test/Transforms/InstCombine/assume.ll b/llvm/test/Transforms/InstCombine/assume.ll index 1902fcbb95afd..69220811ac206 100644 --- a/llvm/test/Transforms/InstCombine/assume.ll +++ b/llvm/test/Transforms/InstCombine/assume.ll @@ -134,7 +134,8 @@ define i1 @align_with_offset_on_gep(ptr %base) { define void @align_with_constant_offset_0(ptr %ptr) { ; CHECK-LABEL: @align_with_constant_offset_0( -; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[PTR:%.*]], i64 16), "align"(ptr [[PTR]], i64 8, i64 0) ] +; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[PTR:%.*]], i64 16) ] +; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[PTR]], i64 8, i64 0) ] ; CHECK-NEXT: ret void ; call void @llvm.assume(i1 true) [ "align"(ptr %ptr, i64 16) ] @@ -144,7 +145,8 @@ define void @align_with_constant_offset_0(ptr %ptr) { define void @align_with_constant_offset_1(ptr %ptr) { ; CHECK-LABEL: @align_with_constant_offset_1( -; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[PTR:%.*]], i64 16), "align"(ptr [[PTR]], i64 8, i64 -8) ] +; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[PTR:%.*]], i64 16) ] +; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[PTR]], i64 8, i64 -8) ] ; CHECK-NEXT: ret void ; call void @llvm.assume(i1 true) [ "align"(ptr %ptr, i64 16) ] @@ -155,7 +157,8 @@ define void @align_with_constant_offset_1(ptr %ptr) { define void @align_with_constant_offset_4(ptr %ptr) { ; CHECK-LABEL: @align_with_constant_offset_4( -; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[PTR:%.*]], i64 16), "align"(ptr [[PTR]], i64 8, i64 0) ] +; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[PTR:%.*]], i64 16) ] +; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[PTR]], i64 8, i64 0) ] ; CHECK-NEXT: ret void ; call void @llvm.assume(i1 true) [ "align"(ptr %ptr, i64 16) ] @@ -166,7 +169,8 @@ define void @align_with_constant_offset_4(ptr %ptr) { define void @align_with_constant_offset_8(ptr %ptr) { ; CHECK-LABEL: @align_with_constant_offset_8( -; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[PTR:%.*]], i64 16), "align"(ptr [[PTR]], i64 8, i64 8) ] +; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[PTR:%.*]], i64 16) ] +; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[PTR]], i64 8, i64 8) ] ; CHECK-NEXT: ret void ; call void @llvm.assume(i1 true) [ "align"(ptr %ptr, i64 16) ] @@ -176,7 +180,8 @@ define void @align_with_constant_offset_8(ptr %ptr) { define void @align_with_variable_offset(ptr %ptr, i64 %offset) { ; CHECK-LABEL: @align_with_variable_offset( -; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[PTR:%.*]], i64 16), "align"(ptr [[PTR]], i64 8, i64 [[OFFSET:%.*]]) ] +; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[PTR:%.*]], i64 16) ] +; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[PTR]], i64 8, i64 [[OFFSET:%.*]]) ] ; CHECK-NEXT: ret void ; call void @llvm.assume(i1 true) [ "align"(ptr %ptr, i64 16) ] @@ -622,7 +627,10 @@ define void @redundant_nonnull3(ptr %ptr) { define void @partially_redundant(ptr %ptr, ptr %ptr2, ptr %ptr3, ptr %ptr4, ptr %ptr5) { ; CHECK-LABEL: @partially_redundant( -; CHECK-NEXT: call void @llvm.assume(i1 true) [ "nonnull"(ptr [[PTR5:%.*]]), "nonnull"(ptr [[PTR4:%.*]]), "nonnull"(ptr [[PTR3:%.*]]), "nonnull"(ptr [[PTR:%.*]]), "nonnull"(ptr [[PTR2:%.*]]) ] +; CHECK-NEXT: call void @llvm.assume(i1 true) [ "nonnull"(ptr [[PTR2:%.*]]) ] +; CHECK-NEXT: call void @llvm.assume(i1 true) [ "nonnull"(ptr [[PTR:%.*]]) ] +; CHECK-NEXT: call void @llvm.assume(i1 true) [ "nonnull"(ptr [[PTR4:%.*]]), "nonnull"(ptr [[PTR3:%.*]]) ] +; CHECK-NEXT: call void @llvm.assume(i1 true) [ "nonnull"(ptr [[PTR5:%.*]]) ] ; CHECK-NEXT: ret void ; call void @llvm.assume(i1 true) [ "nonnull"(ptr %ptr), "nonnull"(ptr %ptr2) ] diff --git a/llvm/test/Transforms/PhaseOrdering/AArch64/std-find.ll b/llvm/test/Transforms/PhaseOrdering/AArch64/std-find.ll index 4ca7f780cdc5e..69b23200b239b 100644 --- a/llvm/test/Transforms/PhaseOrdering/AArch64/std-find.ll +++ b/llvm/test/Transforms/PhaseOrdering/AArch64/std-find.ll @@ -244,7 +244,8 @@ define ptr @std_find_caller(ptr noundef %first, ptr noundef %last) { ; CHECK-LABEL: define noundef ptr @std_find_caller( ; CHECK-SAME: ptr noundef [[FIRST:%.*]], ptr noundef [[LAST:%.*]]) local_unnamed_addr #[[ATTR0]] { ; CHECK-NEXT: [[ENTRY:.*]]: -; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[FIRST]], i64 2), "align"(ptr [[LAST]], i64 2) ] +; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[FIRST]], i64 2) ] +; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[LAST]], i64 2) ] ; CHECK-NEXT: [[PRE_I:%.*]] = icmp eq ptr [[FIRST]], [[LAST]] ; CHECK-NEXT: br i1 [[PRE_I]], label %[[STD_FIND_GENERIC_IMPL_EXIT:.*]], label %[[LOOP_HEADER_I_PREHEADER:.*]] ; CHECK: [[LOOP_HEADER_I_PREHEADER]]: _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
