[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