[llvm] r320010 - Skip DBG instr in OptimizePHIs when looking for dead PHI cycles

Mikael Holmen via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 6 23:01:21 PST 2017


Author: uabelho
Date: Wed Dec  6 23:01:21 2017
New Revision: 320010

URL: http://llvm.org/viewvc/llvm-project?rev=320010&view=rev
Log:
Skip DBG instr in OptimizePHIs when looking for dead PHI cycles

Summary:
Changed use_instructions() to use_nodbg_instructions() when
building an instruction set.

We don't want the presence of debug info to affect the code
we generate.

Reviewers: dblaikie, Eugene.Zelenko, chandlerc, aprantl

Reviewed By: aprantl

Subscribers: aprantl, llvm-commits

Differential Revision: https://reviews.llvm.org/D40882

Added:
    llvm/trunk/test/CodeGen/MIR/X86/opt_phis.mir
Modified:
    llvm/trunk/lib/CodeGen/OptimizePHIs.cpp

Modified: llvm/trunk/lib/CodeGen/OptimizePHIs.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/OptimizePHIs.cpp?rev=320010&r1=320009&r2=320010&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/OptimizePHIs.cpp (original)
+++ llvm/trunk/lib/CodeGen/OptimizePHIs.cpp Wed Dec  6 23:01:21 2017
@@ -154,7 +154,7 @@ bool OptimizePHIs::IsDeadPHICycle(Machin
   if (PHIsInCycle.size() == 16)
     return false;
 
-  for (MachineInstr &UseMI : MRI->use_instructions(DstReg)) {
+  for (MachineInstr &UseMI : MRI->use_nodbg_instructions(DstReg)) {
     if (!UseMI.isPHI() || !IsDeadPHICycle(&UseMI, PHIsInCycle))
       return false;
   }

Added: llvm/trunk/test/CodeGen/MIR/X86/opt_phis.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/MIR/X86/opt_phis.mir?rev=320010&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/MIR/X86/opt_phis.mir (added)
+++ llvm/trunk/test/CodeGen/MIR/X86/opt_phis.mir Wed Dec  6 23:01:21 2017
@@ -0,0 +1,37 @@
+# RUN: llc -run-pass opt-phis -march=x86-64 -o - %s | FileCheck %s
+--- |
+  define void @test() {
+    ret void
+  }
+
+  !llvm.dbg.cu = !{!1}
+  !llvm.module.flags = !{!2, !3}
+  !llvm.ident = !{!4}
+
+  !0 = !DIFile(filename: "foo.c", directory: "/bar")
+  !1 = distinct !DICompileUnit(language: DW_LANG_C, file: !0, producer: "My Compiler")
+  !2 = !{i32 2, !"Dwarf Version", i32 4}
+  !3 = !{i32 2, !"Debug Info Version", i32 3}
+  !4 = !{!"My Compiler"}
+  !5 = distinct !DISubprogram(name: "test")
+  !6 = !DILocation(line: 7, column: 11, scope: !5)
+  !7 = !DILocalVariable(name: "l", scope: !5)
+
+...
+---
+name:            test
+tracksRegLiveness: true
+body:             |
+  bb.0:
+    %0:gr32 = IMPLICIT_DEF
+
+  bb.1:
+    %1:gr32 = PHI %0, %bb.0, %2, %bb.1
+    DBG_VALUE debug-use %1, debug-use _, !7, !DIExpression(), debug-location !6
+    %2:gr32 = IMPLICIT_DEF
+    JMP_1 %bb.1
+...
+
+# The PHI should be removed since it's only used in a DBG_VALUE
+# CHECK-LABEL: bb.1:
+# CHECK-NOT: PHI




More information about the llvm-commits mailing list