Skip to content

Commit

Permalink
[X86] LowerVectorAllEqual - handle i64 comparisons on 32-bit targets
Browse files Browse the repository at this point in the history
  • Loading branch information
RKSimon committed Apr 1, 2023
1 parent 7de8cd6 commit 88e5df0
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 7 deletions.
17 changes: 15 additions & 2 deletions llvm/lib/Target/X86/X86ISelLowering.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24366,8 +24366,21 @@ static SDValue LowerVectorAllEqual(const SDLoc &DL, SDValue LHS, SDValue RHS,
// For sub-128-bit vector, cast to (legal) integer and compare with zero.
if (VT.getSizeInBits() < 128) {
EVT IntVT = EVT::getIntegerVT(*DAG.getContext(), VT.getSizeInBits());
if (!DAG.getTargetLoweringInfo().isTypeLegal(IntVT))
return SDValue();
if (!DAG.getTargetLoweringInfo().isTypeLegal(IntVT)) {
if (IntVT != MVT::i64)
return SDValue();
auto SplitLHS = DAG.SplitScalar(DAG.getBitcast(IntVT, MaskBits(LHS)), DL,
MVT::i32, MVT::i32);
auto SplitRHS = DAG.SplitScalar(DAG.getBitcast(IntVT, MaskBits(RHS)), DL,
MVT::i32, MVT::i32);
SDValue Lo =
DAG.getNode(ISD::XOR, DL, MVT::i32, SplitLHS.first, SplitRHS.first);
SDValue Hi =
DAG.getNode(ISD::XOR, DL, MVT::i32, SplitLHS.second, SplitRHS.second);
return DAG.getNode(X86ISD::CMP, DL, MVT::i32,
DAG.getNode(ISD::OR, DL, MVT::i32, Lo, Hi),
DAG.getConstant(0, DL, MVT::i32));
}
return DAG.getNode(X86ISD::CMP, DL, MVT::i32,
DAG.getBitcast(IntVT, MaskBits(LHS)),
DAG.getBitcast(IntVT, MaskBits(RHS)));
Expand Down
10 changes: 5 additions & 5 deletions llvm/test/CodeGen/X86/pr53419.ll
Original file line number Diff line number Diff line change
Expand Up @@ -149,11 +149,11 @@ define i1 @vector_version_v8i8(ptr align 1 %arg, ptr align 1 %arg1) {
; X86: # %bb.0: # %bb
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
; X86-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero
; X86-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero
; X86-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0
; X86-NEXT: vpmovmskb %xmm0, %eax
; X86-NEXT: xorb $-1, %al
; X86-NEXT: movl (%ecx), %edx
; X86-NEXT: movl 4(%ecx), %ecx
; X86-NEXT: xorl 4(%eax), %ecx
; X86-NEXT: xorl (%eax), %edx
; X86-NEXT: orl %ecx, %edx
; X86-NEXT: sete %al
; X86-NEXT: retl
bb:
Expand Down

0 comments on commit 88e5df0

Please sign in to comment.