diff options
author | Matthias Braun <matze@braunis.de> | 2016-04-04 21:23:46 +0000 |
---|---|---|
committer | Matthias Braun <matze@braunis.de> | 2016-04-04 21:23:46 +0000 |
commit | 7511abd5c1c6a8adcd7609cca53446613310a6d9 (patch) | |
tree | 88ea7e616803bb1ef23b6a0f668a79b5434fd1ea /llvm/lib/CodeGen/MachineScheduler.cpp | |
parent | 571e3481e71c0b220886889355bd8badd6fe1cfd (diff) | |
download | bcm5719-llvm-7511abd5c1c6a8adcd7609cca53446613310a6d9.tar.gz bcm5719-llvm-7511abd5c1c6a8adcd7609cca53446613310a6d9.zip |
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.
llvm-svn: 265351
Diffstat (limited to 'llvm/lib/CodeGen/MachineScheduler.cpp')
-rw-r--r-- | llvm/lib/CodeGen/MachineScheduler.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/llvm/lib/CodeGen/MachineScheduler.cpp b/llvm/lib/CodeGen/MachineScheduler.cpp index 18933a9c2b1..9a7cae6e71f 100644 --- a/llvm/lib/CodeGen/MachineScheduler.cpp +++ b/llvm/lib/CodeGen/MachineScheduler.cpp @@ -1580,12 +1580,14 @@ void CopyConstrain::constrainLocalCopy(SUnit *CopySU, ScheduleDAGMILive *DAG) { 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 |