mirror of
https://github.com/RPCS3/llvm.git
synced 2024-11-30 23:21:04 +00:00
[MachineBasicBlock] Take advantage of the partially dead information.
Thanks to that information we wouldn't lie on a register being live whereas it is not. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@267622 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b62e24784c
commit
1b369e43d3
@ -1208,8 +1208,15 @@ MachineBasicBlock::computeRegisterLiveness(const TargetRegisterInfo *TRI,
|
||||
if (Info.DeadDef)
|
||||
return LQR_Dead;
|
||||
// Register is (at least partially) live after a def.
|
||||
if (Info.Defined)
|
||||
return LQR_Live;
|
||||
if (Info.Defined) {
|
||||
if (!Info.PartialDeadDef)
|
||||
return LQR_Live;
|
||||
// As soon as we saw a partial definition (dead or not),
|
||||
// we cannot tell if the value is partial live without
|
||||
// tracking the lanemasks. We are not going to do this,
|
||||
// so fall back on the remaining of the analysis.
|
||||
break;
|
||||
}
|
||||
// Register is dead after a full kill or clobber and no def.
|
||||
if (Info.Killed || Info.Clobbered)
|
||||
return LQR_Dead;
|
||||
|
@ -167,11 +167,10 @@ define i32 @test_feed_cmov(i32* %addr, i32 %desired, i32 %new) {
|
||||
|
||||
; x8664-sahf-LABEL: test_feed_cmov:
|
||||
; x8664-sahf: cmpxchgl
|
||||
; x8664-sahf: pushq %rax
|
||||
; RAX is dead, do not push or pop it.
|
||||
; x8664-sahf-NEXT: seto %al
|
||||
; x8664-sahf-NEXT: lahf
|
||||
; x8664-sahf-NEXT: movq %rax, [[FLAGS:%.*]]
|
||||
; x8664-sahf-NEXT: popq %rax
|
||||
; x8664-sahf-NEXT: callq foo
|
||||
; x8664-sahf-NEXT: pushq %rax
|
||||
; x8664-sahf-NEXT: movq [[FLAGS]], %rax
|
||||
|
Loading…
Reference in New Issue
Block a user