[llvm] r265351 - MachineScheduler: Ignore COPYs with undef/dead op in CopyConstrain mutation.

Matthias Braun via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 4 14:23:46 PDT 2016


Author: matze
Date: Mon Apr  4 16:23:46 2016
New Revision: 265351

URL: http://llvm.org/viewvc/llvm-project?rev=265351&view=rev
Log:
MachineScheduler: Ignore COPYs with undef/dead op in CopyConstrain mutation.

There is no problem with the code today, but the fix will avoid a crash
in test/CodeGen/AMDGPU/subreg-coalescer-undef-use.ll once the
DetectDeadLanes pass is added.

Modified:
    llvm/trunk/lib/CodeGen/MachineScheduler.cpp

Modified: llvm/trunk/lib/CodeGen/MachineScheduler.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineScheduler.cpp?rev=265351&r1=265350&r2=265351&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/MachineScheduler.cpp (original)
+++ llvm/trunk/lib/CodeGen/MachineScheduler.cpp Mon Apr  4 16:23:46 2016
@@ -1580,12 +1580,14 @@ void CopyConstrain::constrainLocalCopy(S
   MachineInstr *Copy = CopySU->getInstr();
 
   // Check for pure vreg copies.
-  unsigned SrcReg = Copy->getOperand(1).getReg();
-  if (!TargetRegisterInfo::isVirtualRegister(SrcReg))
+  const MachineOperand &SrcOp = Copy->getOperand(1);
+  unsigned SrcReg = SrcOp.getReg();
+  if (!TargetRegisterInfo::isVirtualRegister(SrcReg) || !SrcOp.readsReg())
     return;
 
-  unsigned DstReg = Copy->getOperand(0).getReg();
-  if (!TargetRegisterInfo::isVirtualRegister(DstReg))
+  const MachineOperand &DstOp = Copy->getOperand(0);
+  unsigned DstReg = DstOp.getReg();
+  if (!TargetRegisterInfo::isVirtualRegister(DstReg) || DstOp.isDead())
     return;
 
   // Check if either the dest or source is local. If it's live across a back




More information about the llvm-commits mailing list