mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-17 00:57:54 +00:00
Don't treat a partial <def,undef> operand as a read.
Normally, a partial register def is treated as reading the super-register unless it also defines the full register like this: %vreg110:sub_32bit<def> = COPY %vreg77:sub_32bit, %vreg110<imp-def> This patch also uses the <undef> flag on partial defs to recognize non-reading operands: %vreg110:sub_32bit<def,undef> = COPY %vreg77:sub_32bit This fixes a subtle bug in RegisterCoalescer where LIS->shrinkToUses would treat a coalesced copy as still reading the register, extending the live range artificially. My test case only works when I disable DCE so a dead copy is left for RegisterCoalescer, so I am not including it. <rdar://problem/9967101> llvm-svn: 138018
This commit is contained in:
parent
c5d64c76e0
commit
d18e1ee34f
@ -901,7 +901,8 @@ MachineInstr::readsWritesVirtualRegister(unsigned Reg,
|
||||
Ops->push_back(i);
|
||||
if (MO.isUse())
|
||||
Use |= !MO.isUndef();
|
||||
else if (MO.getSubReg())
|
||||
else if (MO.getSubReg() && !MO.isUndef())
|
||||
// A partial <def,undef> doesn't count as reading the register.
|
||||
PartDef = true;
|
||||
else
|
||||
FullDef = true;
|
||||
|
Loading…
x
Reference in New Issue
Block a user