[PATCH] D33408: MachineCSE: Respect interblock physreg liveness

Mikael Holmén via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed May 24 02:35:32 PDT 2017


This revision was automatically updated to reflect the committed changes.
Closed by commit rL303731: MachineCSE: Respect interblock physreg liveness (authored by uabelho).

Changed prior to commit:
  https://reviews.llvm.org/D33408?vs=99746&id=100057#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D33408

Files:
  llvm/trunk/lib/CodeGen/MachineCSE.cpp
  llvm/trunk/test/CodeGen/MIR/Generic/machine-cse-physreg.mir


Index: llvm/trunk/test/CodeGen/MIR/Generic/machine-cse-physreg.mir
===================================================================
--- llvm/trunk/test/CodeGen/MIR/Generic/machine-cse-physreg.mir
+++ llvm/trunk/test/CodeGen/MIR/Generic/machine-cse-physreg.mir
@@ -0,0 +1,35 @@
+# RUN: llc -mtriple thumbv5e -run-pass=machine-cse -o - %s | FileCheck %s
+
+# This is a contrived example made to expose a bug in
+# MachineCSE, see PR32538.
+
+# MachineCSE must not remove this def of %cpsr:
+# CHECK-LABEL: bb.1:
+# CHECK: , %cpsr = tLSLri
+
+...
+---
+name:            spam
+registers:
+  - { id: 0, class: tgpr }
+  - { id: 1, class: tgpr }
+  - { id: 2, class: tgpr }
+  - { id: 3, class: tgpr }
+liveins:
+  - { reg: '%r0', virtual-reg: '%0' }
+body:             |
+  bb.0:
+    liveins: %r0
+    %0 = COPY %r0
+    %1, %cpsr = tLSLri %0, 2, 14, _
+    tCMPi8 %0, 5, 14, _, implicit-def %cpsr
+    tBcc %bb.8, 8, %cpsr
+
+  bb.1:
+    %2, %cpsr = tLSLri %0, 2, 14, _
+
+  bb.8:
+    liveins: %cpsr
+    %3 = COPY %cpsr
+    tSTRi killed %3, %0, 0, 14, _
+...
Index: llvm/trunk/lib/CodeGen/MachineCSE.cpp
===================================================================
--- llvm/trunk/lib/CodeGen/MachineCSE.cpp
+++ llvm/trunk/lib/CodeGen/MachineCSE.cpp
@@ -180,8 +180,8 @@
     I = skipDebugInstructionsForward(I, E);
 
     if (I == E)
-      // Reached end of block, register is obviously dead.
-      return true;
+      // Reached end of block, we don't know if register is dead or not.
+      return false;
 
     bool SeenDef = false;
     for (const MachineOperand &MO : I->operands()) {


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D33408.100057.patch
Type: text/x-patch
Size: 1602 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170524/9fe61a7f/attachment.bin>


More information about the llvm-commits mailing list