[PATCH] D146512: [TLI] Fold ~X s>/u< ~Y --> Y s>/u< X
Jun Zhang via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 21 04:20:04 PDT 2023
junaire created this revision.
Herald added subscribers: pengfei, hiraditya.
Herald added a project: All.
junaire requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
Fixes: https://github.com/llvm/llvm-project/issues/61120
Signed-off-by: Jun Zhang <jun at junz.org>
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D146512
Files:
llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
llvm/test/CodeGen/X86/setcc-combine.ll
Index: llvm/test/CodeGen/X86/setcc-combine.ll
===================================================================
--- llvm/test/CodeGen/X86/setcc-combine.ll
+++ llvm/test/CodeGen/X86/setcc-combine.ll
@@ -503,10 +503,8 @@
define i64 @cmp_sgt(i64 %a, i64 %b) {
; CHECK-LABEL: cmp_sgt:
; CHECK: # %bb.0:
-; CHECK-NEXT: notq %rdi
-; CHECK-NEXT: notq %rsi
; CHECK-NEXT: xorl %eax, %eax
-; CHECK-NEXT: cmpq %rsi, %rdi
+; CHECK-NEXT: cmpq %rdi, %rsi
; CHECK-NEXT: setg %al
; CHECK-NEXT: negq %rax
; CHECK-NEXT: retq
@@ -520,14 +518,14 @@
define <2 x i64> @cmp_sgt_vec(<2 x i64> %a, <2 x i64> %b) {
; CHECK-LABEL: cmp_sgt_vec:
; CHECK: # %bb.0:
-; CHECK-NEXT: movdqa {{.*#+}} xmm2 = [18446744071562067967,18446744071562067967]
-; CHECK-NEXT: pxor %xmm2, %xmm1
+; CHECK-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
; CHECK-NEXT: pxor %xmm2, %xmm0
-; CHECK-NEXT: movdqa %xmm0, %xmm2
-; CHECK-NEXT: pcmpgtd %xmm1, %xmm2
+; CHECK-NEXT: pxor %xmm2, %xmm1
+; CHECK-NEXT: movdqa %xmm1, %xmm2
+; CHECK-NEXT: pcmpgtd %xmm0, %xmm2
; CHECK-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
-; CHECK-NEXT: pcmpeqd %xmm1, %xmm0
-; CHECK-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]
+; CHECK-NEXT: pcmpeqd %xmm0, %xmm1
+; CHECK-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
; CHECK-NEXT: pand %xmm3, %xmm1
; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
; CHECK-NEXT: por %xmm1, %xmm0
@@ -542,10 +540,8 @@
define i64 @cmp_ule(i64 %a, i64 %b) {
; CHECK-LABEL: cmp_ule:
; CHECK: # %bb.0:
-; CHECK-NEXT: notq %rdi
-; CHECK-NEXT: notq %rsi
; CHECK-NEXT: xorl %eax, %eax
-; CHECK-NEXT: cmpq %rdi, %rsi
+; CHECK-NEXT: cmpq %rsi, %rdi
; CHECK-NEXT: adcq $-1, %rax
; CHECK-NEXT: retq
%na = xor i64 %a, -1
@@ -558,14 +554,14 @@
define <2 x i64> @cmp_ule_vec(<2 x i64> %a, <2 x i64> %b) {
; CHECK-LABEL: cmp_ule_vec:
; CHECK: # %bb.0:
-; CHECK-NEXT: movdqa {{.*#+}} xmm2 = [9223372034707292159,9223372034707292159]
-; CHECK-NEXT: pxor %xmm2, %xmm1
+; CHECK-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
; CHECK-NEXT: pxor %xmm2, %xmm0
-; CHECK-NEXT: movdqa %xmm0, %xmm2
-; CHECK-NEXT: pcmpgtd %xmm1, %xmm2
+; CHECK-NEXT: pxor %xmm2, %xmm1
+; CHECK-NEXT: movdqa %xmm1, %xmm2
+; CHECK-NEXT: pcmpgtd %xmm0, %xmm2
; CHECK-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
-; CHECK-NEXT: pcmpeqd %xmm1, %xmm0
-; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
+; CHECK-NEXT: pcmpeqd %xmm0, %xmm1
+; CHECK-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
; CHECK-NEXT: pand %xmm3, %xmm0
; CHECK-NEXT: pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
; CHECK-NEXT: por %xmm0, %xmm1
Index: llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
===================================================================
--- llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
+++ llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
@@ -4977,6 +4977,19 @@
return DAG.getSetCC(dl, VT, N0, N1, NewCond);
}
+ // ~X s> ~Y --> Y s> X
+ // ~X u< ~Y --> Y u< X
+ if ((Cond == ISD::SETGT || Cond == ISD::SETULE) && N0.getOpcode() == ISD::XOR &&
+ N0.getValueType().isInteger()) {
+ if (N0.getOpcode() == N1.getOpcode()) {
+ if (N0.getOperand(1) == N1.getOperand(1)) {
+ if (isAllOnesConstant(N0.getOperand(1)) ||
+ ISD::isBuildVectorAllOnes(N0.getOperand(1).getNode()))
+ return DAG.getSetCC(dl, VT, N1.getOperand(0), N0.getOperand(0), Cond);
+ }
+ }
+ }
+
if ((Cond == ISD::SETEQ || Cond == ISD::SETNE) &&
N0.getValueType().isInteger()) {
if (N0.getOpcode() == ISD::ADD || N0.getOpcode() == ISD::SUB ||
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D146512.506909.patch
Type: text/x-patch
Size: 3718 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230321/7af3fd01/attachment.bin>
More information about the llvm-commits
mailing list