[llvm] b5d6ad2 - [MachineCopyPropagation] Handle propagation of undef copies

Carl Ritson via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 7 04:34:55 PDT 2021


Author: Carl Ritson
Date: 2021-10-07T20:34:27+09:00
New Revision: b5d6ad20e182318b2048a923eac56a198250ed0a

URL: https://github.com/llvm/llvm-project/commit/b5d6ad20e182318b2048a923eac56a198250ed0a
DIFF: https://github.com/llvm/llvm-project/commit/b5d6ad20e182318b2048a923eac56a198250ed0a.diff

LOG: [MachineCopyPropagation] Handle propagation of undef copies

When propagating undefined copies the undef flag must also be
propagated.

Reviewed By: foad

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

Added: 
    llvm/test/CodeGen/AMDGPU/undef-copy-propagation.mir

Modified: 
    llvm/lib/CodeGen/MachineCopyPropagation.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/CodeGen/MachineCopyPropagation.cpp b/llvm/lib/CodeGen/MachineCopyPropagation.cpp
index 2d9ada5a77e98..e3fbd880ffdfb 100644
--- a/llvm/lib/CodeGen/MachineCopyPropagation.cpp
+++ b/llvm/lib/CodeGen/MachineCopyPropagation.cpp
@@ -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
index 0000000000000..af255e35bc9ce
--- /dev/null
+++ b/llvm/test/CodeGen/AMDGPU/undef-copy-propagation.mir
@@ -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
+...


        


More information about the llvm-commits mailing list