[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