-
Notifications
You must be signed in to change notification settings - Fork 13.5k
Propagate DebugLocs on phis in BreakCriticalEdges #133492
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
@llvm/pr-subscribers-llvm-transforms Author: Orlando Cazalet-Hyams (OCHyams) ChangesFull diff: https://github.com/llvm/llvm-project/pull/133492.diff 2 Files Affected:
diff --git a/llvm/lib/Transforms/Utils/BreakCriticalEdges.cpp b/llvm/lib/Transforms/Utils/BreakCriticalEdges.cpp
index d20902c577d3a..4d9d9e1fec48d 100644
--- a/llvm/lib/Transforms/Utils/BreakCriticalEdges.cpp
+++ b/llvm/lib/Transforms/Utils/BreakCriticalEdges.cpp
@@ -445,6 +445,7 @@ bool llvm::SplitIndirectBrCriticalEdges(Function &F,
PHINode *NewIndPHI = PHINode::Create(IndPHI->getType(), 1, "ind", InsertPt);
NewIndPHI->addIncoming(IndPHI->getIncomingValueForBlock(IBRPred),
IBRPred);
+ NewIndPHI->setDebugLoc(IndPHI->getDebugLoc());
// Create a PHI in the body block, to merge the direct and indirect
// predecessors.
@@ -452,6 +453,8 @@ bool llvm::SplitIndirectBrCriticalEdges(Function &F,
MergePHI->insertBefore(MergeInsert);
MergePHI->addIncoming(NewIndPHI, Target);
MergePHI->addIncoming(DirPHI, DirectSucc);
+ MergePHI->applyMergedLocation(DirPHI->getDebugLoc(),
+ IndPHI->getDebugLoc());
IndPHI->replaceAllUsesWith(MergePHI);
IndPHI->eraseFromParent();
diff --git a/llvm/test/Transforms/CodeGenPrepare/X86/split-dbg.ll b/llvm/test/Transforms/CodeGenPrepare/X86/split-dbg.ll
new file mode 100644
index 0000000000000..773ae3ff9a3e5
--- /dev/null
+++ b/llvm/test/Transforms/CodeGenPrepare/X86/split-dbg.ll
@@ -0,0 +1,49 @@
+; RUN: opt -passes='require<profile-summary>,function(codegenprepare)' -S -mtriple=x86_64 < %s \
+; RUN: | FileCheck %s
+
+;; Check debug locations are propagated onto new PHIs.
+
+; CHECK: .split:
+; CHECK-NEXT: %merge = phi i32 [ poison, %while.body ], [ %dest.sroa.clone, %while.body.clone ], !dbg [[DBG:!.*]]
+
+; CHECK: while.body.clone:
+; CHECK-NEXT: %dest.sroa.clone = phi i32 [ %1, %.split ], [ poison, %if.else ], !dbg [[DBG]]
+
+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 !8
+ %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 = !{}
+!8 = !DILocation(line: 1, column: 1, scope: !5)
|
✅ With the latest revision this PR passed the C/C++ code formatter. |
✅ With the latest revision this PR passed the Python code formatter. |
✅ With the latest revision this PR passed the undef deprecator. |
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/190/builds/19660 Here is the relevant piece of the build log for the reference
|
No description provided.