mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-28 00:07:22 +00:00
[RDF] Consider register as live if any alias is live
This only affects the recomputation of kill flags. llvm-svn: 266875
This commit is contained in:
parent
69b803dc41
commit
17749987f0
@ -616,8 +616,8 @@ void Liveness::resetKills(MachineBasicBlock *B) {
|
||||
if (!TargetRegisterInfo::isPhysicalRegister(R))
|
||||
continue;
|
||||
bool IsLive = false;
|
||||
for (MCSubRegIterator SR(R, &TRI, true); SR.isValid(); ++SR) {
|
||||
if (!Live[*SR])
|
||||
for (MCRegAliasIterator AR(R, &TRI, true); AR.isValid(); ++AR) {
|
||||
if (!Live[*AR])
|
||||
continue;
|
||||
IsLive = true;
|
||||
break;
|
||||
|
28
test/CodeGen/Hexagon/rdf-reset-kills.ll
Normal file
28
test/CodeGen/Hexagon/rdf-reset-kills.ll
Normal file
@ -0,0 +1,28 @@
|
||||
; RUN: llc -march=hexagon < %s
|
||||
; REQUIRES: asserts
|
||||
|
||||
; This test used to crash in register scavenger due to incorrectly set
|
||||
; kill flags.
|
||||
|
||||
target triple = "hexagon"
|
||||
|
||||
define void @foo(i64 %a) #0 {
|
||||
entry:
|
||||
%conv.i = and i64 %a, 9218868437227405312
|
||||
%cmp = icmp ne i64 %conv.i, 9218868437227405312
|
||||
%and.i37 = and i64 %a, 4503599627370495
|
||||
%tobool = icmp eq i64 %and.i37, 0
|
||||
%or.cond = or i1 %cmp, %tobool
|
||||
br i1 %or.cond, label %lor.lhs.false, label %if.then
|
||||
|
||||
lor.lhs.false: ; preds = %entry
|
||||
br i1 undef, label %return, label %if.then
|
||||
|
||||
if.then: ; preds = %lor.lhs.false, %entry
|
||||
br label %return
|
||||
|
||||
return: ; preds = %if.then, %lor.lhs.false
|
||||
ret void
|
||||
}
|
||||
|
||||
attributes #0 = { norecurse nounwind }
|
Loading…
x
Reference in New Issue
Block a user