[MachineCopyPropagation] Handle propagation of undef copies
authorCarl Ritson <carl.ritson@amd.com>
Thu, 7 Oct 2021 10:36:10 +0000 (19:36 +0900)
committerCarl Ritson <carl.ritson@amd.com>
Thu, 7 Oct 2021 11:34:27 +0000 (20:34 +0900)
When propagating undefined copies the undef flag must also be
propagated.

Reviewed By: foad

Differential Revision: https://reviews.llvm.org/D111219

llvm/lib/CodeGen/MachineCopyPropagation.cpp
llvm/test/CodeGen/AMDGPU/undef-copy-propagation.mir [new file with mode: 0644]

index 2d9ada5..e3fbd88 100644 (file)
@@ -576,6 +576,7 @@ void MachineCopyPropagation::forwardUses(MachineInstr &MI) {
     MOUse.setReg(CopySrcReg);
     if (!CopySrc.isRenamable())
       MOUse.setIsRenamable(false);
+    MOUse.setIsUndef(CopySrc.isUndef());
 
     LLVM_DEBUG(dbgs() << "MCP: After replacement: " << MI << "\n");
 
diff --git a/llvm/test/CodeGen/AMDGPU/undef-copy-propagation.mir b/llvm/test/CodeGen/AMDGPU/undef-copy-propagation.mir
new file mode 100644 (file)
index 0000000..af255e3
--- /dev/null
@@ -0,0 +1,22 @@
+# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
+# RUN: llc -o - %s -march=amdgcn -mcpu=gfx1010 -run-pass=machine-cp -verify-machineinstrs | FileCheck %s
+
+---
+name: undef_copy_propagation
+tracksRegLiveness: true
+body:    |
+  bb.0:
+
+    ; CHECK-LABEL: name: undef_copy_propagation
+    ; CHECK: renamable $vgpr0 = COPY undef renamable $sgpr42, implicit $exec
+    ; CHECK-NEXT: renamable $vgpr1 = COPY undef $sgpr42
+    ; CHECK-NEXT: renamable $vgpr2 = COPY undef $sgpr42
+    ; CHECK-NEXT: renamable $vgpr3 = COPY undef $sgpr42
+    ; CHECK-NEXT: EXP_DONE 0, killed $vgpr0, killed $vgpr1, killed $vgpr2, killed $vgpr3, -1, -1, 15, implicit $exec
+    renamable $vgpr0 = COPY undef renamable $sgpr42, implicit $exec
+    renamable $vgpr1 = COPY renamable $vgpr0
+    renamable $vgpr2 = COPY renamable $vgpr0
+    renamable $vgpr3 = COPY renamable $vgpr0
+
+    EXP_DONE 0, killed $vgpr0, killed $vgpr1, killed $vgpr2, killed $vgpr3, -1, -1, 15, implicit $exec
+...