[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:
parent
35522001fa
commit
a74480d1eb
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue