[llvm] 8fa3b52 - [KeyInstr] Remap cloned PHIs in BreakCriticalEdges (#133493)

via llvm-commits llvm-commits at lists.llvm.org
Thu May 8 05:46:56 PDT 2025


Author: Orlando Cazalet-Hyams
Date: 2025-05-08T13:46:53+01:00
New Revision: 8fa3b52ac46cf71e13cc687c77a1a61662675f93

URL: https://github.com/llvm/llvm-project/commit/8fa3b52ac46cf71e13cc687c77a1a61662675f93
DIFF: https://github.com/llvm/llvm-project/commit/8fa3b52ac46cf71e13cc687c77a1a61662675f93.diff

LOG: [KeyInstr] Remap cloned PHIs in BreakCriticalEdges (#133493)

RFC: https://discourse.llvm.org/t/rfc-improving-is-stmt-placement-for-better-interactive-debugging/82668

Added: 
    llvm/test/DebugInfo/KeyInstructions/X86/cgp-break-critical-edge.ll
    llvm/test/DebugInfo/KeyInstructions/X86/lit.local.cfg

Modified: 
    llvm/lib/Transforms/Utils/BreakCriticalEdges.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Transforms/Utils/BreakCriticalEdges.cpp b/llvm/lib/Transforms/Utils/BreakCriticalEdges.cpp
index aea47aec7bb80..ddd203f3acf71 100644
--- a/llvm/lib/Transforms/Utils/BreakCriticalEdges.cpp
+++ b/llvm/lib/Transforms/Utils/BreakCriticalEdges.cpp
@@ -406,6 +406,9 @@ bool llvm::SplitIndirectBrCriticalEdges(Function &F,
     // preds.
     ValueToValueMapTy VMap;
     BasicBlock *DirectSucc = CloneBasicBlock(Target, VMap, ".clone", &F);
+    if (!VMap.AtomMap.empty())
+      for (Instruction &I : *DirectSucc)
+        RemapSourceAtom(&I, VMap);
 
     BlockFrequency BlockFreqForDirectSucc;
     for (BasicBlock *Pred : OtherPreds) {

diff  --git a/llvm/test/DebugInfo/KeyInstructions/X86/cgp-break-critical-edge.ll b/llvm/test/DebugInfo/KeyInstructions/X86/cgp-break-critical-edge.ll
new file mode 100644
index 0000000000000..a21b1da15a45d
--- /dev/null
+++ b/llvm/test/DebugInfo/KeyInstructions/X86/cgp-break-critical-edge.ll
@@ -0,0 +1,52 @@
+; RUN: opt -passes='require<profile-summary>,function(codegenprepare)' -S -mtriple=x86_64 < %s \
+; RUN: | FileCheck %s
+
+;; Check debug locations are propagated onto new PHIs and have their atom groups remapped.
+
+; CHECK: .split:
+; CHECK-NEXT: %merge = phi i32 [ poison, %while.body ], [ %dest.sroa.clone, %while.body.clone ], !dbg [[G1R1:!.*]]
+
+; CHECK: while.body.clone:
+; CHECK-NEXT: %dest.sroa.clone = phi i32 [ %1, %.split ], [ poison, %if.else ], !dbg [[G2R1:!.*]]
+
+; CHECK: [[G1R1]] = !DILocation(line: 1, column: 1, scope: !5, atomGroup: 1, atomRank: 1)
+; CHECK: [[G2R1]] = !DILocation(line: 1, column: 1, scope: !5, atomGroup: 2, atomRank: 1)
+
+define void @test(i1 %c) !dbg !5 {
+entry:
+  br label %if.else
+
+if.else:                                          ; preds = %if.else1, %entry
+  br i1 %c, label %while.body, label %preheader
+
+preheader:                                        ; preds = %if.else
+  br label %if.else1
+
+if.then:                                          ; preds = %if.else1
+  unreachable
+
+while.body:                                       ; preds = %if.else1, %while.body, %if.else
+  %dest.sroa = phi i32 [ %1, %while.body ], [ poison, %if.else1 ], [ poison, %if.else ], !dbg !12
+  %0 = inttoptr i32 %dest.sroa to ptr
+  %incdec.ptr = getelementptr inbounds i8, ptr %0, i32 -1
+  %1 = ptrtoint ptr %incdec.ptr to i32
+  store i8 0, ptr %incdec.ptr, align 1
+  br label %while.body
+
+if.else1:                                         ; preds = %if.else1, %preheader
+  indirectbr ptr poison, [label %if.then, label %while.body, label %if.else, label %if.else1]
+}
+
+!llvm.dbg.cu = !{!0}
+!llvm.debugify = !{!2, !3}
+!llvm.module.flags = !{!4}
+
+!0 = distinct !DICompileUnit(language: DW_LANG_C, file: !1, producer: "debugify", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug)
+!1 = !DIFile(filename: "test.ll", directory: "/")
+!2 = !{i32 11}
+!3 = !{i32 0}
+!4 = !{i32 2, !"Debug Info Version", i32 3}
+!5 = distinct !DISubprogram(name: "test", linkageName: "test", scope: null, file: !1, line: 1, type: !6, scopeLine: 1, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0)
+!6 = !DISubroutineType(types: !7)
+!7 = !{}
+!12 = !DILocation(line: 1, column: 1, scope: !5, atomGroup: 1, atomRank: 1)

diff  --git a/llvm/test/DebugInfo/KeyInstructions/X86/lit.local.cfg b/llvm/test/DebugInfo/KeyInstructions/X86/lit.local.cfg
new file mode 100644
index 0000000000000..42bf50dcc13c3
--- /dev/null
+++ b/llvm/test/DebugInfo/KeyInstructions/X86/lit.local.cfg
@@ -0,0 +1,2 @@
+if not "X86" in config.root.targets:
+    config.unsupported = True


        


More information about the llvm-commits mailing list