[llvm] [AssumptionCache] Properly print assume operand bundles. (PR #207501)

via llvm-commits llvm-commits at lists.llvm.org
Sat Jul 4 02:50:35 PDT 2026


llvmorg-github-actions[bot] wrote:


<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-analysis

@llvm/pr-subscribers-llvm-transforms

Author: Florian Hahn (fhahn)

<details>
<summary>Changes</summary>

Update AssumptionCache printing to print operand bundles, instead of just printing true which does not provide any useful information.

---
Full diff: https://github.com/llvm/llvm-project/pull/207501.diff


3 Files Affected:

- (modified) llvm/lib/Analysis/AssumptionCache.cpp (+23-3) 
- (modified) llvm/test/Analysis/AssumptionCache/basic.ll (+16) 
- (modified) llvm/test/Transforms/InstCombine/assume-cache-update.ll (+2-2) 


``````````diff
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) ]

``````````

</details>


https://github.com/llvm/llvm-project/pull/207501


More information about the llvm-commits mailing list