mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-11 06:06:52 +00:00
This situation can occur:
,------. | | | v | t2 = phi ... t1 ... | | | v | t1 = ... | ... = ... t1 ... | | `------' where there is a use in a PHI node that's a predecessor to the defining block. We don't want to mark all predecessors as having the value "alive" in this case. Also, the assert was too restrictive and didn't handle this case. llvm-svn: 52655
This commit is contained in:
parent
95743e3078
commit
2501066409
@ -139,8 +139,23 @@ void LiveVariables::HandleVirtRegUse(unsigned reg, MachineBasicBlock *MBB,
|
||||
assert(VRInfo.Kills[i]->getParent() != MBB && "entry should be at end!");
|
||||
#endif
|
||||
|
||||
assert(MBB != MRI->getVRegDef(reg)->getParent() &&
|
||||
"Should have kill for defblock!");
|
||||
// This situation can occur:
|
||||
//
|
||||
// ,------.
|
||||
// | |
|
||||
// | v
|
||||
// | t2 = phi ... t1 ...
|
||||
// | |
|
||||
// | v
|
||||
// | t1 = ...
|
||||
// | ... = ... t1 ...
|
||||
// | |
|
||||
// `------'
|
||||
//
|
||||
// where there is a use in a PHI node that's a predecessor to the defining
|
||||
// block. We don't want to mark all predecessors as having the value "alive"
|
||||
// in this case.
|
||||
if (MBB == MRI->getVRegDef(reg)->getParent()) return;
|
||||
|
||||
// Add a new kill entry for this basic block. If this virtual register is
|
||||
// already marked as alive in this basic block, that means it is alive in at
|
||||
|
25
test/CodeGen/PowerPC/2008-06-23-LiveVariablesCrash.ll
Normal file
25
test/CodeGen/PowerPC/2008-06-23-LiveVariablesCrash.ll
Normal file
@ -0,0 +1,25 @@
|
||||
; RUN: llvm-as < %s | llc -march=ppc32
|
||||
; <rdar://problem/6020042>
|
||||
|
||||
define i32 @bork() nounwind {
|
||||
entry:
|
||||
br i1 true, label %bb1, label %bb3
|
||||
|
||||
bb1:
|
||||
%tmp1 = load i8* null, align 1
|
||||
%tmp2 = icmp eq i8 %tmp1, 0
|
||||
br label %bb2
|
||||
|
||||
bb2:
|
||||
%val1 = phi i32 [ 0, %bb1 ], [ %val2, %bb2 ]
|
||||
%val2 = select i1 %tmp2, i32 -1, i32 %val1
|
||||
switch i32 %val2, label %bb2 [
|
||||
i32 -1, label %bb3
|
||||
i32 0, label %bb1
|
||||
i32 1, label %bb3
|
||||
i32 2, label %bb1
|
||||
]
|
||||
|
||||
bb3:
|
||||
ret i32 -1
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user