mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-17 00:27:31 +00:00
Fix live-out reg logic to not insert over-aggressive AssertZExt
instructions. This fixes lua. llvm-svn: 68083
This commit is contained in:
parent
5c02e62620
commit
cba99ee717
@ -4587,15 +4587,15 @@ SDValue RegsForValue::getCopyFromRegs(SelectionDAG &DAG, DebugLoc dl,
|
||||
isSExt = false, FromVT = MVT::i1; // ASSERT ZEXT 1
|
||||
else if (NumSignBits > RegSize-8)
|
||||
isSExt = true, FromVT = MVT::i8; // ASSERT SEXT 8
|
||||
else if (NumZeroBits >= RegSize-9)
|
||||
else if (NumZeroBits >= RegSize-8)
|
||||
isSExt = false, FromVT = MVT::i8; // ASSERT ZEXT 8
|
||||
else if (NumSignBits > RegSize-16)
|
||||
isSExt = true, FromVT = MVT::i16; // ASSERT SEXT 16
|
||||
else if (NumZeroBits >= RegSize-17)
|
||||
else if (NumZeroBits >= RegSize-16)
|
||||
isSExt = false, FromVT = MVT::i16; // ASSERT ZEXT 16
|
||||
else if (NumSignBits > RegSize-32)
|
||||
isSExt = true, FromVT = MVT::i32; // ASSERT SEXT 32
|
||||
else if (NumZeroBits >= RegSize-33)
|
||||
else if (NumZeroBits >= RegSize-32)
|
||||
isSExt = false, FromVT = MVT::i32; // ASSERT ZEXT 32
|
||||
|
||||
if (FromVT != MVT::Other) {
|
||||
|
20
test/CodeGen/X86/live-out-reg-info.ll
Normal file
20
test/CodeGen/X86/live-out-reg-info.ll
Normal file
@ -0,0 +1,20 @@
|
||||
; RUN: llvm-as < %s | llc -march=x86-64 | grep testl
|
||||
|
||||
; Make sure dagcombine doesn't eliminate the comparison due
|
||||
; to an off-by-one bug with ComputeMaskedBits information.
|
||||
|
||||
declare void @qux()
|
||||
|
||||
define void @foo(i32 %a) {
|
||||
%t0 = lshr i32 %a, 23
|
||||
br label %next
|
||||
next:
|
||||
%t1 = and i32 %t0, 256
|
||||
%t2 = icmp eq i32 %t1, 0
|
||||
br i1 %t2, label %true, label %false
|
||||
true:
|
||||
call void @qux()
|
||||
ret void
|
||||
false:
|
||||
ret void
|
||||
}
|
Loading…
Reference in New Issue
Block a user