[llvm-branch-commits] [llvm] 999c87f - Revert "Reapply "[InstCombine] Merge consecutive assumes" (#205177) (#205324)"
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Tue Jun 23 09:54:07 PDT 2026
Author: Nikolas Klauser
Date: 2026-06-23T18:54:03+02:00
New Revision: 999c87f65ea81bcdb58b8df6fddfb1ccdef978b1
URL: https://github.com/llvm/llvm-project/commit/999c87f65ea81bcdb58b8df6fddfb1ccdef978b1
DIFF: https://github.com/llvm/llvm-project/commit/999c87f65ea81bcdb58b8df6fddfb1ccdef978b1.diff
LOG: Revert "Reapply "[InstCombine] Merge consecutive assumes" (#205177) (#205324)"
This reverts commit e9aec194f1e034f7b548240bd76b623d80bac034.
Added:
Modified:
llvm/include/llvm/IR/InstrTypes.h
llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
llvm/lib/Transforms/InstCombine/InstructionCombining.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/include/llvm/IR/InstrTypes.h b/llvm/include/llvm/IR/InstrTypes.h
index 681c4b18375f4..5f7df6a4eb6f8 100644
--- a/llvm/include/llvm/IR/InstrTypes.h
+++ b/llvm/include/llvm/IR/InstrTypes.h
@@ -2359,12 +2359,6 @@ class CallBase : public Instruction {
});
}
- /// Return whether there exists an operand bundle of type ID
- bool hasOperandBundle(uint32_t ID) const {
- return any_of(operand_bundles(),
- [&](OperandBundleUse OBU) { return OBU.getTagID() == ID; });
- }
-
/// Populate the BundleOpInfo instances and the Use& vector from \p
/// Bundles. Return the op_iterator pointing to the Use& one past the last
/// last bundle operand use.
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/lib/Transforms/InstCombine/InstructionCombining.cpp b/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
index ece0b36a15b72..1e24ff8d51057 100644
--- a/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
@@ -5849,7 +5849,7 @@ bool InstCombinerImpl::run() {
// removed.
auto II = dyn_cast<IntrinsicInst>(User);
if (II->getIntrinsicID() != Intrinsic::assume ||
- !II->hasOperandBundle(LLVMContext::OB_Dereferenceable))
+ !II->getOperandBundle("dereferenceable"))
continue;
}
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 8c819ad17a1f3..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) ]
@@ -1384,22 +1392,6 @@ define i32 @assume_noundef_on_load_after_call(ptr %ptr) {
ret i32 %val
}
-define ptr @avoid_get_operand_bundle() {
-; CHECK-LABEL: @avoid_get_operand_bundle(
-; CHECK-NEXT: bb:
-; CHECK-NEXT: [[LOAD:%.*]] = load volatile ptr, ptr null, align 8
-; CHECK-NEXT: [[PTRTOINT_I:%.*]] = ptrtoint ptr [[LOAD]] to i64
-; CHECK-NEXT: call void @llvm.assume(i1 true) [ "dereferenceable"(ptr null, i64 [[PTRTOINT_I]]), "dereferenceable"(ptr null, i64 [[PTRTOINT_I]]) ]
-; CHECK-NEXT: ret ptr null
-;
-bb:
- %load = load volatile ptr, ptr null, align 8
- %ptrtoint.i = ptrtoint ptr %load to i64
- call void @llvm.assume(i1 true) [ "dereferenceable"(ptr null, i64 %ptrtoint.i) ]
- call void @llvm.assume(i1 true) [ "dereferenceable"(ptr null, i64 %ptrtoint.i) ]
- ret ptr null
-}
-
declare void @use(i1)
declare void @block()
declare void @llvm.dbg.value(metadata, metadata, metadata)
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]]:
More information about the llvm-branch-commits
mailing list