[X86] Remove unused node after morphing it from shr to and.

In some cases it won't get cleaned up properly leading to crashes
downstream. PR23353.

Based on a patch by Davide Italiano.

llvm-svn: 237828
This commit is contained in:
Benjamin Kramer 2015-05-20 20:10:26 +00:00
parent 35522001fa
commit a74480d1eb
2 changed files with 18 additions and 0 deletions

View File

@ -12737,6 +12737,7 @@ SDValue X86TargetLowering::EmitTest(SDValue Op, unsigned X86CC, SDLoc dl,
SDValue New = DAG.getNode(ISD::AND, dl, VT, Op->getOperand(0),
DAG.getConstant(Mask, dl, VT));
DAG.ReplaceAllUsesWith(Op, New);
DAG.RemoveDeadNode(Op.getNode());
Op = New;
}
break;

View File

@ -211,3 +211,20 @@ define zeroext i1 @test15(i32 %bf.load, i32 %n) {
; CHECK: shrl $16, %edi
; CHECK: cmpl %esi, %edi
}
; PR23353
define i1 @test16(i32* %a, i1* %b) {
%load = load i32, i32* %a
%trunc = trunc i32 %load to i8
%mul = mul i8 %trunc, 2
%icmp1 = icmp ne i8 %mul, 0
store i1 %icmp1, i1* %b
%and = and i8 %trunc, 127
%icmp2 = icmp ne i8 %and, 0
ret i1 %icmp2
; CHECK-LABEL: test16:
; CHECK-NOT: addb
; CHECK-NOT: andb
; CHECK: testb $127
}