[llvm] r267622 - [MachineBasicBlock] Take advantage of the partially dead information.
Quentin Colombet via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 26 16:14:29 PDT 2016
Author: qcolombet
Date: Tue Apr 26 18:14:29 2016
New Revision: 267622
URL: http://llvm.org/viewvc/llvm-project?rev=267622&view=rev
Log:
[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.
Modified:
llvm/trunk/lib/CodeGen/MachineBasicBlock.cpp
llvm/trunk/test/CodeGen/X86/cmpxchg-clobber-flags.ll
Modified: llvm/trunk/lib/CodeGen/MachineBasicBlock.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineBasicBlock.cpp?rev=267622&r1=267621&r2=267622&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/MachineBasicBlock.cpp (original)
+++ llvm/trunk/lib/CodeGen/MachineBasicBlock.cpp Tue Apr 26 18:14:29 2016
@@ -1208,8 +1208,15 @@ MachineBasicBlock::computeRegisterLivene
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;
Modified: llvm/trunk/test/CodeGen/X86/cmpxchg-clobber-flags.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/cmpxchg-clobber-flags.ll?rev=267622&r1=267621&r2=267622&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/cmpxchg-clobber-flags.ll (original)
+++ llvm/trunk/test/CodeGen/X86/cmpxchg-clobber-flags.ll Tue Apr 26 18:14:29 2016
@@ -167,11 +167,10 @@ define i32 @test_feed_cmov(i32* %addr, i
; 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
More information about the llvm-commits
mailing list