[llvm] [AssumptionCache] Properly print assume operand bundles. (PR #207501)
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Sat Jul 4 13:27:49 PDT 2026
https://github.com/fhahn updated https://github.com/llvm/llvm-project/pull/207501
>From 97861e6274eb7420ff4b3e0738473768289e00a5 Mon Sep 17 00:00:00 2001
From: Florian Hahn <flo at fhahn.com>
Date: Fri, 19 Jun 2026 21:16:25 +0100
Subject: [PATCH] [AssumptionCache] Properly print assume operand bundles.
Update AssumptionCache printing to print operand bundles, instead of
just printing true which does not provide any useful information.
---
llvm/lib/Analysis/AssumptionCache.cpp | 26 ++++++++++++++++---
llvm/test/Analysis/AssumptionCache/basic.ll | 16 ++++++++++++
.../InstCombine/assume-cache-update.ll | 4 +--
3 files changed, 41 insertions(+), 5 deletions(-)
diff --git a/llvm/lib/Analysis/AssumptionCache.cpp b/llvm/lib/Analysis/AssumptionCache.cpp
index 94eb93e048720..d7db161b05381 100644
--- a/llvm/lib/Analysis/AssumptionCache.cpp
+++ b/llvm/lib/Analysis/AssumptionCache.cpp
@@ -15,6 +15,7 @@
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/StringExtras.h"
#include "llvm/Analysis/AssumeBundleQueries.h"
#include "llvm/Analysis/TargetTransformInfo.h"
#include "llvm/Analysis/ValueTracking.h"
@@ -279,9 +280,28 @@ PreservedAnalyses AssumptionPrinterPass::run(Function &F,
AssumptionCache &AC = AM.getResult<AssumptionAnalysis>(F);
OS << "Cached assumptions for function: " << F.getName() << "\n";
- for (auto &VH : AC.assumptions())
- if (VH)
- OS << " " << *cast<CallInst>(VH)->getArgOperand(0) << "\n";
+ for (auto &VH : AC.assumptions()) {
+ if (!VH)
+ continue;
+
+ auto *Assume = cast<CallInst>(VH);
+ if (!Assume->hasOperandBundles()) {
+ OS << " " << *Assume->getArgOperand(0) << "\n";
+ continue;
+ }
+
+ assert(match(Assume->getArgOperand(0), m_One()) &&
+ "assume must have trivial cond");
+ OS << " [ ";
+ ListSeparator LS;
+ for (const OperandBundleUse &BU : Assume->operand_bundles()) {
+ OS << LS << '"' << BU.getTagName() << "\"(";
+ interleaveComma(BU.Inputs, OS,
+ [&](const Use &Input) { Input->printAsOperand(OS); });
+ OS << ')';
+ }
+ OS << " ]\n";
+ }
return PreservedAnalyses::all();
}
diff --git a/llvm/test/Analysis/AssumptionCache/basic.ll b/llvm/test/Analysis/AssumptionCache/basic.ll
index 6056ed1a4c457..88761df3ae00a 100644
--- a/llvm/test/Analysis/AssumptionCache/basic.ll
+++ b/llvm/test/Analysis/AssumptionCache/basic.ll
@@ -31,3 +31,19 @@ entry:
call void @llvm.assume(i1 %cond1)
ret void
}
+
+define void @test_bundles(ptr %A, i32 %x) {
+; CHECK-LABEL: Cached assumptions for function: test_bundles
+; CHECK-NEXT: [ "dereferenceable"(ptr %A, i64 1024) ]
+; CHECK-NEXT: [ "align"(ptr %A, i64 8), "nonnull"(ptr %A) ]
+; CHECK-NEXT: icmp ne i32 %{{.*}}, 0
+; CHECK-NEXT: [ "separate_storage"(ptr %A, ptr %A) ]
+
+entry:
+ call void @llvm.assume(i1 true) [ "dereferenceable"(ptr %A, i64 1024) ]
+ call void @llvm.assume(i1 true) [ "align"(ptr %A, i64 8), "nonnull"(ptr %A) ]
+ %cond = icmp ne i32 %x, 0
+ call void @llvm.assume(i1 %cond)
+ call void @llvm.assume(i1 true) [ "separate_storage"(ptr %A, ptr %A) ]
+ ret void
+}
diff --git a/llvm/test/Transforms/InstCombine/assume-cache-update.ll b/llvm/test/Transforms/InstCombine/assume-cache-update.ll
index fe10ad8b7d72f..da0dc0071ac5f 100644
--- a/llvm/test/Transforms/InstCombine/assume-cache-update.ll
+++ b/llvm/test/Transforms/InstCombine/assume-cache-update.ll
@@ -3,9 +3,9 @@
declare void @llvm.assume(i1)
; CHECK: Cached assumptions for function: drop_dead_bundle
-; CHECK-NEXT: i1 true
+; CHECK-NEXT: [ "ignore"(ptr %q), "align"(ptr %p, i64 8) ]
; CHECK: Cached assumptions for function: drop_dead_bundle
-; CHECK-NEXT: i1 true
+; CHECK-NEXT: [ "align"(ptr %p, i64 8) ]
define i8 @drop_dead_bundle(ptr %p, ptr %q) {
%v = load i8, ptr %p
call void @llvm.assume(i1 true) [ "ignore"(ptr %q), "align"(ptr %p, i64 8) ]
More information about the llvm-commits
mailing list