]> granicus.if.org Git - llvm/commitdiff
RenameIndependentSubregs: Fix infinite loop
authorMatt Arsenault <Matthew.Arsenault@amd.com>
Tue, 27 Jun 2017 18:28:10 +0000 (18:28 +0000)
committerMatt Arsenault <Matthew.Arsenault@amd.com>
Tue, 27 Jun 2017 18:28:10 +0000 (18:28 +0000)
Apparently this replacement can really be substituting the
same as the original register. Avoid restarting the loop
when there's been no change in the register uses.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@306441 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/RenameIndependentSubregs.cpp
test/CodeGen/AMDGPU/rename-independent-subregs-mac-operands.mir [moved from test/CodeGen/AMDGPU/rename-independent-subregs-invalid-mac-operands.mir with 88% similarity]

index a5abd500080496a898348c530dac7bae7c5b5882..bd5ecbd28f2933f6b4bfac8092f0e2d589d53d82 100644 (file)
@@ -243,7 +243,8 @@ void RenameIndependentSubregs::rewriteOperands(const IntEqClasses &Classes,
 
     unsigned VReg = Intervals[ID]->reg;
     MO.setReg(VReg);
-    if (MO.isTied()) {
+
+    if (MO.isTied() && Reg != VReg) {
       /// Undef use operands are not tracked in the equivalence class but need
       /// to be update if they are tied.
       MO.getParent()->substituteRegister(Reg, VReg, 0, TRI);
similarity index 88%
rename from test/CodeGen/AMDGPU/rename-independent-subregs-invalid-mac-operands.mir
rename to test/CodeGen/AMDGPU/rename-independent-subregs-mac-operands.mir
index 9f20d2854c677d5f6c20ef3bc0f360ab5da6519d..770bfaddb23e788306f208fde61a4c246d21557c 100644 (file)
@@ -134,3 +134,22 @@ body:             |
     S_SETPC_B64_return %sgpr30_sgpr31, implicit %sgpr5
 
 ...
+
+# GCN-LABEL: name: inf_loop_tied_operand
+# GCN: bb.0:
+# GCN-NEXT: undef %2.sub0 = V_MAC_F32_e32 1073741824, undef %0, undef %2.sub0, implicit %exec
+# GCN-NEXT: dead undef %3.sub1 = COPY %2.sub0
+
+name:            inf_loop_tied_operand
+tracksRegLiveness: true
+registers:
+  - { id: 0, class: vgpr_32, preferred-register: '' }
+  - { id: 1, class: vgpr_32, preferred-register: '' }
+  - { id: 2, class: vreg_128, preferred-register: '' }
+body:             |
+  bb.0:
+    %1 = V_MAC_F32_e32 1073741824, undef %0, undef %1, implicit %exec
+    undef %2.sub0 = COPY %1
+    %2.sub1 = COPY %1
+
+...