[PATCH] D58114: [Codegen] Make sure kill flags are not incorrect from removed machine phi's

Dave Green via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 12 04:31:10 PST 2019


dmgreen created this revision.
dmgreen added reviewers: efriedma, MatzeB, RKSimon, anton-afanasyev.

We need to clear the kill flags on both SingleValReg and OldReg, to ensure they remain
conservatively correct.


https://reviews.llvm.org/D58114

Files:
  lib/CodeGen/OptimizePHIs.cpp
  test/CodeGen/Thumb/opt-phis.mir


Index: test/CodeGen/Thumb/opt-phis.mir
===================================================================
--- /dev/null
+++ test/CodeGen/Thumb/opt-phis.mir
@@ -0,0 +1,38 @@
+# RUN: llc -mtriple thumbv6m-none-eabi -run-pass=opt-phis -verify-machineinstrs -o - %s | FileCheck %s
+--- |
+  target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
+  target triple = "thumbv6m-arm-none-eabi"
+
+  define i32 @funca() { unreachable }
+
+...
+---
+name:            funca
+tracksRegLiveness: true
+body:             |
+  bb.0:
+    successors: %bb.2(0x40000000), %bb.3(0x40000000)
+
+    %0:tgpr, dead $cpsr = tMOVi8 255, 14, $noreg
+    %1:tgpr, dead $cpsr = tMOVi8 128, 14, $noreg
+    tCMPi8 %0, 0, 14, $noreg, implicit-def $cpsr
+    tBcc %bb.3, 1, $cpsr
+
+  bb.2:
+    successors: %bb.3(0x80000000)
+
+  bb.3:
+    successors: %bb.0(0x80000000)
+
+    %2:tgpr = PHI %0, %bb.2, %0, %bb.0
+    %3:tgpr, $cpsr = tSUBrr %1, killed %2, 14, $noreg
+    %4:tgpr, $cpsr = tADDrr killed %3, killed %0, 14, $noreg
+    tB %bb.0, 14, $noreg
+
+# Make sure the kill flags are not incorrect
+# CHECK-LABEL: name: funca
+# CHECK-NOT: PHI
+# CHECK: tSUBrr %1, %0
+# CHECK: tADDrr killed %3, %0
+
+...
Index: lib/CodeGen/OptimizePHIs.cpp
===================================================================
--- lib/CodeGen/OptimizePHIs.cpp
+++ lib/CodeGen/OptimizePHIs.cpp
@@ -181,11 +181,12 @@
       if (!MRI->constrainRegClass(SingleValReg, MRI->getRegClass(OldReg)))
         continue;
 
-      // for the case SingleValReg taken from copy instr
-      MRI->clearKillFlags(SingleValReg);
-
       MRI->replaceRegWith(OldReg, SingleValReg);
       MI->eraseFromParent();
+
+      // The kill flags on OldReg and SingleValReg may no longer be correct.
+      MRI->clearKillFlags(SingleValReg);
+
       ++NumPHICycles;
       Changed = true;
       continue;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D58114.186438.patch
Type: text/x-patch
Size: 1857 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190212/6f836695/attachment.bin>


More information about the llvm-commits mailing list