[llvm] r323831 - [RDF] Clear the renamable flag when copy propagating reserved registers

Krzysztof Parzyszek via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 30 15:19:44 PST 2018


Author: kparzysz
Date: Tue Jan 30 15:19:44 2018
New Revision: 323831

URL: http://llvm.org/viewvc/llvm-project?rev=323831&view=rev
Log:
[RDF] Clear the renamable flag when copy propagating reserved registers

Added:
    llvm/trunk/test/CodeGen/Hexagon/rdf-copy-renamable-reserved.mir
Modified:
    llvm/trunk/lib/Target/Hexagon/RDFCopy.cpp

Modified: llvm/trunk/lib/Target/Hexagon/RDFCopy.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/RDFCopy.cpp?rev=323831&r1=323830&r2=323831&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Hexagon/RDFCopy.cpp (original)
+++ llvm/trunk/lib/Target/Hexagon/RDFCopy.cpp Tue Jan 30 15:19:44 2018
@@ -18,6 +18,7 @@
 #include "llvm/CodeGen/MachineDominators.h"
 #include "llvm/CodeGen/MachineInstr.h"
 #include "llvm/CodeGen/MachineOperand.h"
+#include "llvm/CodeGen/MachineRegisterInfo.h"
 #include "llvm/CodeGen/TargetOpcodes.h"
 #include "llvm/CodeGen/TargetRegisterInfo.h"
 #include "llvm/MC/MCRegisterInfo.h"
@@ -100,10 +101,11 @@ NodeId CopyPropagation::getLocalReaching
 
 bool CopyPropagation::run() {
   scanBlock(&DFG.getMF().front());
+  MachineRegisterInfo &MRI = DFG.getMF().getRegInfo();
 
   if (trace()) {
     dbgs() << "Copies:\n";
-    for (auto I : Copies) {
+    for (NodeId I : Copies) {
       dbgs() << "Instr: " << *DFG.addr<StmtNode*>(I).Addr->getCode();
       dbgs() << "   eq: {";
       for (auto J : CopyMap[I])
@@ -130,7 +132,7 @@ bool CopyPropagation::run() {
     return 0;
   };
 
-  for (auto C : Copies) {
+  for (NodeId C : Copies) {
 #ifndef NDEBUG
     if (HasLimit && CpCount >= CpLimit)
       break;
@@ -179,6 +181,8 @@ bool CopyPropagation::run() {
         unsigned NewReg = MinPhysReg(SR);
         Op.setReg(NewReg);
         Op.setSubReg(0);
+        if (MRI.isReserved(NewReg))
+          Op.setIsRenamable(false);
         DFG.unlinkUse(UA, false);
         if (AtCopy != 0) {
           UA.Addr->linkToDef(UA.Id, DFG.addr<DefNode*>(AtCopy));

Added: llvm/trunk/test/CodeGen/Hexagon/rdf-copy-renamable-reserved.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Hexagon/rdf-copy-renamable-reserved.mir?rev=323831&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/Hexagon/rdf-copy-renamable-reserved.mir (added)
+++ llvm/trunk/test/CodeGen/Hexagon/rdf-copy-renamable-reserved.mir Tue Jan 30 15:19:44 2018
@@ -0,0 +1,19 @@
+# RUN: llc -march=hexagon -run-pass hexagon-rdf-opt %s -o - | FileCheck %s
+
+# Check that r29 gets propagated into the A2_addi, and that the renamable
+# flag is cleared.
+
+# CHECK: renamable %r28 = COPY %r29
+# CHECK-NOT: renamable
+
+---
+name: fred
+tracksRegLiveness: true
+
+body: |
+  bb.0:
+    renamable %r28 = COPY %r29
+    %r0 = A2_addi renamable %r28, 1
+    J2_jumpr %r31, implicit-def %pc, implicit %r0
+...
+




More information about the llvm-commits mailing list