[llvm] [DropUnnecessaryAssumes] Add support for operand bundles (PR #160311)
Andreas Jonson via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 23 11:42:15 PDT 2025
================
@@ -83,6 +82,44 @@ define ptr @operand_bundle_live(ptr %x) {
ret ptr %x
}
+define void @operand_bundle_multiple_dead(ptr %x, ptr %y) {
+; CHECK-LABEL: define void @operand_bundle_multiple_dead(
+; CHECK-SAME: ptr [[X:%.*]], ptr [[Y:%.*]]) {
+; CHECK-NEXT: ret void
+;
+ call void @llvm.assume(i1 true) ["align"(ptr %x, i64 8), "align"(ptr %y, i64 8)]
+ ret void
+}
+
+define ptr @operand_bundle_one_live_one_dead(ptr %x, ptr %y) {
+; CHECK-LABEL: define ptr @operand_bundle_one_live_one_dead(
+; CHECK-SAME: ptr [[X:%.*]], ptr [[Y:%.*]]) {
+; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[Y]], i64 8) ]
+; CHECK-NEXT: ret ptr [[Y]]
+;
+ call void @llvm.assume(i1 true) ["align"(ptr %x, i64 8), "align"(ptr %y, i64 8)]
+ ret ptr %y
+}
+
+define i64 @operand_bundle_ignore_unaffected_operands(ptr %x, i64 %align) {
+; CHECK-LABEL: define i64 @operand_bundle_ignore_unaffected_operands(
+; CHECK-SAME: ptr [[X:%.*]], i64 [[ALIGN:%.*]]) {
+; CHECK-NEXT: ret i64 [[ALIGN]]
+;
+ call void @llvm.assume(i1 true) ["align"(ptr %x, i64 %align)]
+ ret i64 %align
+}
+
+define void @operand_bundle_remove_dead_insts(ptr %x) {
+; CHECK-LABEL: define void @operand_bundle_remove_dead_insts(
+; CHECK-SAME: ptr [[X:%.*]]) {
+; CHECK-NEXT: ret void
+;
+ %gep = getelementptr i8, ptr %x, i64 8
+ call void @llvm.assume(i1 true) ["align"(ptr %gep, i64 8)]
+ ret void
+}
+
----------------
andjo403 wrote:
No test with condition and bundles
https://github.com/llvm/llvm-project/pull/160311
More information about the llvm-commits
mailing list