[llvm] [IR] Avoid redundant IRBuilder debug loc updates (PR #193018)

Clemens Wasser via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 21 06:08:55 PDT 2026


https://github.com/clemenswasser updated https://github.com/llvm/llvm-project/pull/193018

>From 62aa68a2744aab9fe36679dddd9cb2a19dcd9ba8 Mon Sep 17 00:00:00 2001
From: Clemens Wasser <clemens.wasser at gmail.com>
Date: Tue, 14 Apr 2026 16:54:47 +0200
Subject: [PATCH 1/2] [IR] Avoid redundant IRBuilder debug loc updates

---
 llvm/include/llvm/IR/IRBuilder.h | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/llvm/include/llvm/IR/IRBuilder.h b/llvm/include/llvm/IR/IRBuilder.h
index bdec42516b8cd..dda0ee2ac11ab 100644
--- a/llvm/include/llvm/IR/IRBuilder.h
+++ b/llvm/include/llvm/IR/IRBuilder.h
@@ -244,7 +244,20 @@ class IRBuilderBase {
   }
 
   /// Set location information used by debugging information.
-  void SetCurrentDebugLocation(DebugLoc L) {
+  void SetCurrentDebugLocation(const DebugLoc &L) {
+    if (StoredDL == L)
+      return;
+
+    // For !dbg metadata attachments, we use DebugLoc instead of the raw MDNode
+    // to include optional introspection data for use in Debugify.
+    StoredDL = L;
+  }
+
+  /// Set location information used by debugging information.
+  void SetCurrentDebugLocation(DebugLoc &&L) {
+    if (StoredDL == L)
+      return;
+
     // For !dbg metadata attachments, we use DebugLoc instead of the raw MDNode
     // to include optional introspection data for use in Debugify.
     StoredDL = std::move(L);

>From 8269e4dce8912fbe576a842ea7198dc6eaa7c867 Mon Sep 17 00:00:00 2001
From: Clemens Wasser <clemens.wasser at gmail.com>
Date: Tue, 21 Apr 2026 14:23:22 +0200
Subject: [PATCH 2/2] [IR] Avoid redundant TrackingMDRef reassignment work

---
 llvm/include/llvm/IR/TrackingMDRef.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/llvm/include/llvm/IR/TrackingMDRef.h b/llvm/include/llvm/IR/TrackingMDRef.h
index 7ad7225d076fc..edbe0778d1e58 100644
--- a/llvm/include/llvm/IR/TrackingMDRef.h
+++ b/llvm/include/llvm/IR/TrackingMDRef.h
@@ -33,7 +33,7 @@ class TrackingMDRef {
   TrackingMDRef(const TrackingMDRef &X) : MD(X.MD) { track(); }
 
   TrackingMDRef &operator=(TrackingMDRef &&X) {
-    if (&X == this)
+    if (&X == this || MD == X.MD)
       return *this;
 
     untrack();
@@ -43,7 +43,7 @@ class TrackingMDRef {
   }
 
   TrackingMDRef &operator=(const TrackingMDRef &X) {
-    if (&X == this)
+    if (&X == this || MD == X.MD)
       return *this;
 
     untrack();



More information about the llvm-commits mailing list