[PATCH] D92576: Remove insertDebugValuesForPHIs() from LCSSA to prevent assignments from being reordered
Nabeel via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Dec 3 07:35:48 PST 2020
n-omer updated this revision to Diff 309255.
n-omer added a comment.
Added context to diff.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D92576/new/
https://reviews.llvm.org/D92576
Files:
llvm/lib/Transforms/Utils/LCSSA.cpp
llvm/test/Transforms/LCSSA/DontInsertDebugValuesForPHIs.ll
llvm/test/Transforms/LCSSA/basictest.ll
Index: llvm/test/Transforms/LCSSA/basictest.ll
===================================================================
--- llvm/test/Transforms/LCSSA/basictest.ll
+++ llvm/test/Transforms/LCSSA/basictest.ll
@@ -20,7 +20,6 @@
loop.exit: ; preds = %post.if
; CHECK: %X3.lcssa = phi i32
; DEBUGIFY: %X3.lcssa = phi i32 {{.*}}, !dbg ![[DbgLoc:[0-9]+]]
-; DEBUGIFY-NEXT: call void @llvm.dbg.value(metadata i32 %X3.lcssa
; CHECK: %X4 = add i32 3, %X3.lcssa
%X4 = add i32 3, %X3 ; <i32> [#uses=0]
ret void
Index: llvm/test/Transforms/LCSSA/DontInsertDebugValuesForPHIs.ll
===================================================================
--- /dev/null
+++ llvm/test/Transforms/LCSSA/DontInsertDebugValuesForPHIs.ll
@@ -0,0 +1,57 @@
+; RUN: opt < %s -lcssa -S | FileCheck %s
+
+; This test ensures that LCSSA does not insert dbg.value intrinsics using
+; insertDebugValuesForPHIs() which effectively cause assignments to be
+; re-ordered.
+; See PR48206 for more information.
+
+define dso_local i32 @_Z5lcssab(i1 zeroext %S2) {
+entry:
+ br label %loop.interior
+
+loop.interior: ; preds = %post.if, %entry
+ br i1 %S2, label %if.true, label %if.false
+
+if.true: ; preds = %loop.interior
+ %X1 = add i32 0, 0
+ br label %post.if
+
+if.false: ; preds = %loop.interior
+ %X2 = add i32 0, 1
+ br label %post.if
+
+post.if: ; preds = %if.false, %if.true
+ %X3 = phi i32 [ %X1, %if.true ], [ %X2, %if.false ], !dbg !21
+ call void @llvm.dbg.value(metadata i32 %X3, metadata !9, metadata !DIExpression()), !dbg !21
+ %Y1 = add i32 4, %X3, !dbg !22
+ call void @llvm.dbg.value(metadata i32 %Y1, metadata !9, metadata !DIExpression()), !dbg !22
+ br i1 %S2, label %loop.exit, label %loop.interior, !dbg !23
+
+loop.exit: ; preds = %post.if
+; CHECK: loop.exit:
+; CHECK-NEXT: %X3.lcssa = phi i32
+; CHECK-NOT: call void @llvm.dbg.value
+ %X4 = add i32 3, %X3
+ ret i32 %X4
+}
+
+declare void @llvm.dbg.value(metadata, metadata, metadata)
+
+!llvm.dbg.cu = !{!0}
+!llvm.debugify = !{!3, !4}
+!llvm.module.flags = !{!5}
+
+!0 = distinct !DICompileUnit(language: DW_LANG_C, file: !1, producer: "debugify and Author", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
+!1 = !DIFile(filename: "./testcase.ll", directory: "/")
+!2 = !{}
+!3 = !{i32 11}
+!4 = !{i32 5}
+!5 = !{i32 2, !"Debug Info Version", i32 3}
+!6 = distinct !DISubprogram(name: "_Z5lcssab", linkageName: "_Z5lcssab", scope: null, file: !1, line: 1, type: !7, scopeLine: 1, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !{!9})
+!7 = !DISubroutineType(types: !2)
+!9 = !DILocalVariable(name: "var", scope: !6, file: !1, line: 3, type: !10)
+!10 = !DIBasicType(name: "ty32", size: 32, encoding: DW_ATE_unsigned)
+!21 = !DILocation(line: 7, column: 1, scope: !6)
+!22 = !DILocation(line: 8, column: 1, scope: !6)
+!23 = !DILocation(line: 9, column: 1, scope: !6)
+
Index: llvm/lib/Transforms/Utils/LCSSA.cpp
===================================================================
--- llvm/lib/Transforms/Utils/LCSSA.cpp
+++ llvm/lib/Transforms/Utils/LCSSA.cpp
@@ -265,15 +265,11 @@
Worklist.push_back(PostProcessPN);
// Keep track of PHI nodes that we want to remove because they did not have
- // any uses rewritten. If the new PHI is used, store it so that we can
- // try to propagate dbg.value intrinsics to it.
- SmallVector<PHINode *, 2> NeedDbgValues;
+ // any uses rewritten.
for (PHINode *PN : AddedPHIs)
if (PN->use_empty())
LocalPHIsToRemove.insert(PN);
- else
- NeedDbgValues.push_back(PN);
- insertDebugValuesForPHIs(InstBB, NeedDbgValues);
+
Changed = true;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D92576.309255.patch
Type: text/x-patch
Size: 3859 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20201203/46ed7cf4/attachment.bin>
More information about the llvm-commits
mailing list