[llvm] [X86] Remove redundant and-not pattern code in X86 (PR #157687)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 9 08:59:18 PDT 2025
https://github.com/AZero13 updated https://github.com/llvm/llvm-project/pull/157687
>From cda4aa0a43782d2e98ba16f7ecb233d859ebd5b9 Mon Sep 17 00:00:00 2001
From: AZero13 <gfunni234 at gmail.com>
Date: Tue, 9 Sep 2025 11:08:21 -0400
Subject: [PATCH] [X86] Remove redundant code in X86
These transforms are now handled in DAGCombine, so enable hasAndNotCompare for the same cases for X86, and remove the platform-specific code that does the same thing.
---
llvm/lib/Target/X86/X86ISelLowering.cpp | 62 ++++-----------------
llvm/test/CodeGen/X86/avx512-cmp.ll | 4 +-
llvm/test/CodeGen/X86/known-pow2.ll | 72 ++++++++++++-------------
llvm/test/CodeGen/X86/setcc-logic.ll | 8 +--
4 files changed, 52 insertions(+), 94 deletions(-)
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 08ae0d52d795e..7327a07b42d51 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -3489,29 +3489,23 @@ bool X86TargetLowering::isMaskAndCmp0FoldingBeneficial(
}
bool X86TargetLowering::hasAndNotCompare(SDValue Y) const {
- EVT VT = Y.getValueType();
-
- if (VT.isVector())
- return false;
-
- if (!Subtarget.hasBMI())
- return false;
-
- // There are only 32-bit and 64-bit forms for 'andn'.
- if (VT != MVT::i32 && VT != MVT::i64)
- return false;
-
- return !isa<ConstantSDNode>(Y) || cast<ConstantSDNode>(Y)->isOpaque();
+ return Y.getValueType().isScalarInteger();
}
bool X86TargetLowering::hasAndNot(SDValue Y) const {
EVT VT = Y.getValueType();
- if (!VT.isVector())
- return hasAndNotCompare(Y);
+ if (!VT.isVector()) {
+ if (!Subtarget.hasBMI())
+ return false;
- // Vector.
+ // There are only 32-bit and 64-bit forms for 'andn'.
+ if (VT != MVT::i32 && VT != MVT::i64)
+ return false;
+ return !isa<ConstantSDNode>(Y) || cast<ConstantSDNode>(Y)->isOpaque();
+ }
+ // Vector.
if (!Subtarget.hasSSE1() || VT.getSizeInBits() < 128)
return false;
@@ -56333,42 +56327,6 @@ static SDValue combineSetCC(SDNode *N, SelectionDAG &DAG,
if (CC == ISD::SETNE || CC == ISD::SETEQ) {
if (OpVT.isScalarInteger()) {
- // cmpeq(or(X,Y),X) --> cmpeq(and(~X,Y),0)
- // cmpne(or(X,Y),X) --> cmpne(and(~X,Y),0)
- auto MatchOrCmpEq = [&](SDValue N0, SDValue N1) {
- if (N0.getOpcode() == ISD::OR && N0->hasOneUse()) {
- if (N0.getOperand(0) == N1)
- return DAG.getNode(ISD::AND, DL, OpVT, DAG.getNOT(DL, N1, OpVT),
- N0.getOperand(1));
- if (N0.getOperand(1) == N1)
- return DAG.getNode(ISD::AND, DL, OpVT, DAG.getNOT(DL, N1, OpVT),
- N0.getOperand(0));
- }
- return SDValue();
- };
- if (SDValue AndN = MatchOrCmpEq(LHS, RHS))
- return DAG.getSetCC(DL, VT, AndN, DAG.getConstant(0, DL, OpVT), CC);
- if (SDValue AndN = MatchOrCmpEq(RHS, LHS))
- return DAG.getSetCC(DL, VT, AndN, DAG.getConstant(0, DL, OpVT), CC);
-
- // cmpeq(and(X,Y),Y) --> cmpeq(and(~X,Y),0)
- // cmpne(and(X,Y),Y) --> cmpne(and(~X,Y),0)
- auto MatchAndCmpEq = [&](SDValue N0, SDValue N1) {
- if (N0.getOpcode() == ISD::AND && N0->hasOneUse()) {
- if (N0.getOperand(0) == N1)
- return DAG.getNode(ISD::AND, DL, OpVT, N1,
- DAG.getNOT(DL, N0.getOperand(1), OpVT));
- if (N0.getOperand(1) == N1)
- return DAG.getNode(ISD::AND, DL, OpVT, N1,
- DAG.getNOT(DL, N0.getOperand(0), OpVT));
- }
- return SDValue();
- };
- if (SDValue AndN = MatchAndCmpEq(LHS, RHS))
- return DAG.getSetCC(DL, VT, AndN, DAG.getConstant(0, DL, OpVT), CC);
- if (SDValue AndN = MatchAndCmpEq(RHS, LHS))
- return DAG.getSetCC(DL, VT, AndN, DAG.getConstant(0, DL, OpVT), CC);
-
// cmpeq(trunc(x),C) --> cmpeq(x,C)
// cmpne(trunc(x),C) --> cmpne(x,C)
// iff x upper bits are zero.
diff --git a/llvm/test/CodeGen/X86/avx512-cmp.ll b/llvm/test/CodeGen/X86/avx512-cmp.ll
index 56d6d136fdb61..ac099b5c6718e 100644
--- a/llvm/test/CodeGen/X86/avx512-cmp.ll
+++ b/llvm/test/CodeGen/X86/avx512-cmp.ll
@@ -155,10 +155,10 @@ B:
define i32 @test10(i64 %b, i64 %c, i1 %d) {
; ALL-LABEL: test10:
; ALL: ## %bb.0:
+; ALL-NEXT: xorb $1, %dl
; ALL-NEXT: cmpq %rsi, %rdi
; ALL-NEXT: sete %al
-; ALL-NEXT: notb %dl
-; ALL-NEXT: testb %al, %dl
+; ALL-NEXT: testb %dl, %al
; ALL-NEXT: je LBB8_1
; ALL-NEXT: ## %bb.2: ## %if.end.i
; ALL-NEXT: movl $6, %eax
diff --git a/llvm/test/CodeGen/X86/known-pow2.ll b/llvm/test/CodeGen/X86/known-pow2.ll
index e183bbc15617d..bb23a4db9debf 100644
--- a/llvm/test/CodeGen/X86/known-pow2.ll
+++ b/llvm/test/CodeGen/X86/known-pow2.ll
@@ -118,8 +118,8 @@ define i1 @pow2_srl_fail0(i32 %x, i32 %y) {
; CHECK-LABEL: pow2_srl_fail0:
; CHECK: # %bb.0:
; CHECK-NEXT: movl %esi, %ecx
-; CHECK-NEXT: andb $30, %cl
; CHECK-NEXT: notl %edi
+; CHECK-NEXT: andb $30, %cl
; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
; CHECK-NEXT: shll %cl, %edi
; CHECK-NEXT: testl $1048576, %edi # imm = 0x100000
@@ -136,8 +136,8 @@ define i1 @pow2_srl_fail1(i32 %x, i32 %y) {
; CHECK-LABEL: pow2_srl_fail1:
; CHECK: # %bb.0:
; CHECK-NEXT: movl %esi, %ecx
-; CHECK-NEXT: andb $7, %cl
; CHECK-NEXT: notl %edi
+; CHECK-NEXT: andb $7, %cl
; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
; CHECK-NEXT: shll %cl, %edi
; CHECK-NEXT: testl $1048577, %edi # imm = 0x100001
@@ -170,12 +170,12 @@ define i1 @pow2_rotl_fail0(i32 %x, i32 %y) {
; CHECK-LABEL: pow2_rotl_fail0:
; CHECK: # %bb.0:
; CHECK-NEXT: movl %esi, %ecx
+; CHECK-NEXT: notl %edi
; CHECK-NEXT: movl $1048576, %eax # imm = 0x100000
; CHECK-NEXT: movl $512, %edx # imm = 0x200
; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
; CHECK-NEXT: shldl %cl, %eax, %edx
-; CHECK-NEXT: notl %edi
-; CHECK-NEXT: testl %edi, %edx
+; CHECK-NEXT: testl %edx, %edi
; CHECK-NEXT: sete %al
; CHECK-NEXT: retq
%d = call i32 @llvm.fshl.i32(i32 512, i32 1048576, i32 %y)
@@ -188,11 +188,11 @@ define i1 @pow2_rotl_fail1(i32 %x, i32 %y) {
; CHECK-LABEL: pow2_rotl_fail1:
; CHECK: # %bb.0:
; CHECK-NEXT: movl %esi, %ecx
+; CHECK-NEXT: notl %edi
; CHECK-NEXT: movl $511, %eax # imm = 0x1FF
; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
; CHECK-NEXT: roll %cl, %eax
-; CHECK-NEXT: notl %edi
-; CHECK-NEXT: testl %edi, %eax
+; CHECK-NEXT: testl %eax, %edi
; CHECK-NEXT: sete %al
; CHECK-NEXT: retq
%d = call i32 @llvm.fshl.i32(i32 511, i32 511, i32 %y)
@@ -221,12 +221,12 @@ define i1 @pow2_rotr_fail0(i32 %x, i32 %y) {
; CHECK-LABEL: pow2_rotr_fail0:
; CHECK: # %bb.0:
; CHECK-NEXT: movl %esi, %ecx
+; CHECK-NEXT: notl %edi
; CHECK-NEXT: movl $512, %eax # imm = 0x200
; CHECK-NEXT: movl $1048576, %edx # imm = 0x100000
; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
; CHECK-NEXT: shrdl %cl, %eax, %edx
-; CHECK-NEXT: notl %edi
-; CHECK-NEXT: testl %edi, %edx
+; CHECK-NEXT: testl %edx, %edi
; CHECK-NEXT: sete %al
; CHECK-NEXT: retq
%d = call i32 @llvm.fshr.i32(i32 512, i32 1048576, i32 %y)
@@ -239,11 +239,11 @@ define i1 @pow2_rotr_fail1(i32 %x, i32 %y) {
; CHECK-LABEL: pow2_rotr_fail1:
; CHECK: # %bb.0:
; CHECK-NEXT: movl %esi, %ecx
+; CHECK-NEXT: notl %edi
; CHECK-NEXT: movl $511, %eax # imm = 0x1FF
; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
; CHECK-NEXT: rorl %cl, %eax
-; CHECK-NEXT: notl %edi
-; CHECK-NEXT: testl %edi, %eax
+; CHECK-NEXT: testl %eax, %edi
; CHECK-NEXT: sete %al
; CHECK-NEXT: retq
%d = call i32 @llvm.fshr.i32(i32 511, i32 511, i32 %y)
@@ -276,14 +276,14 @@ define i1 @pow2_umin_fail0(i32 %x, i32 %y) {
; CHECK-LABEL: pow2_umin_fail0:
; CHECK: # %bb.0:
; CHECK-NEXT: movl %esi, %ecx
+; CHECK-NEXT: notl %edi
; CHECK-NEXT: movl $4, %eax
; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
; CHECK-NEXT: shll %cl, %eax
; CHECK-NEXT: cmpl $262144, %eax # imm = 0x40000
; CHECK-NEXT: movl $262144, %ecx # imm = 0x40000
; CHECK-NEXT: cmovbl %eax, %ecx
-; CHECK-NEXT: notl %edi
-; CHECK-NEXT: testl %edi, %ecx
+; CHECK-NEXT: testl %ecx, %edi
; CHECK-NEXT: sete %al
; CHECK-NEXT: retq
%yy = shl i32 4, %y
@@ -297,14 +297,14 @@ define i1 @pow2_umin_fail1(i32 %x, i32 %y) {
; CHECK-LABEL: pow2_umin_fail1:
; CHECK: # %bb.0:
; CHECK-NEXT: movl %esi, %ecx
+; CHECK-NEXT: notl %edi
; CHECK-NEXT: movl $1, %eax
; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
; CHECK-NEXT: shll %cl, %eax
; CHECK-NEXT: cmpl $12345, %eax # imm = 0x3039
; CHECK-NEXT: movl $12345, %ecx # imm = 0x3039
; CHECK-NEXT: cmovbl %eax, %ecx
-; CHECK-NEXT: notl %edi
-; CHECK-NEXT: testl %edi, %ecx
+; CHECK-NEXT: testl %ecx, %edi
; CHECK-NEXT: sete %al
; CHECK-NEXT: retq
%yy = shl i32 1, %y
@@ -341,6 +341,7 @@ define i1 @pow2_umax_fail0(i32 %x, i32 %y, i32 %z) {
; CHECK-LABEL: pow2_umax_fail0:
; CHECK: # %bb.0:
; CHECK-NEXT: movl %esi, %ecx
+; CHECK-NEXT: notl %edi
; CHECK-NEXT: movl $1, %eax
; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
; CHECK-NEXT: shll %cl, %eax
@@ -349,8 +350,7 @@ define i1 @pow2_umax_fail0(i32 %x, i32 %y, i32 %z) {
; CHECK-NEXT: shrl %cl, %esi
; CHECK-NEXT: cmpl %esi, %eax
; CHECK-NEXT: cmoval %eax, %esi
-; CHECK-NEXT: notl %edi
-; CHECK-NEXT: testl %edi, %esi
+; CHECK-NEXT: testl %esi, %edi
; CHECK-NEXT: sete %al
; CHECK-NEXT: retq
%yy = shl i32 1, %y
@@ -365,6 +365,7 @@ define i1 @pow2_umax_fail1(i32 %x, i32 %y, i32 %z) {
; CHECK-LABEL: pow2_umax_fail1:
; CHECK: # %bb.0:
; CHECK-NEXT: movl %esi, %ecx
+; CHECK-NEXT: notl %edi
; CHECK-NEXT: movl $4, %eax
; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
; CHECK-NEXT: shll %cl, %eax
@@ -373,8 +374,7 @@ define i1 @pow2_umax_fail1(i32 %x, i32 %y, i32 %z) {
; CHECK-NEXT: shrl %cl, %esi
; CHECK-NEXT: cmpl %esi, %eax
; CHECK-NEXT: cmoval %eax, %esi
-; CHECK-NEXT: notl %edi
-; CHECK-NEXT: testl %edi, %esi
+; CHECK-NEXT: testl %esi, %edi
; CHECK-NEXT: sete %al
; CHECK-NEXT: retq
%yy = shl i32 4, %y
@@ -409,14 +409,14 @@ define i1 @pow2_smin_fail0(i32 %x, i32 %y) {
; CHECK-LABEL: pow2_smin_fail0:
; CHECK: # %bb.0:
; CHECK-NEXT: movl %esi, %ecx
+; CHECK-NEXT: notl %edi
; CHECK-NEXT: movl $4, %eax
; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
; CHECK-NEXT: shll %cl, %eax
; CHECK-NEXT: cmpl $262144, %eax # imm = 0x40000
; CHECK-NEXT: movl $262144, %ecx # imm = 0x40000
; CHECK-NEXT: cmovll %eax, %ecx
-; CHECK-NEXT: notl %edi
-; CHECK-NEXT: testl %edi, %ecx
+; CHECK-NEXT: testl %ecx, %edi
; CHECK-NEXT: sete %al
; CHECK-NEXT: retq
%yy = shl i32 4, %y
@@ -430,14 +430,14 @@ define i1 @pow2_smin_fail1(i32 %x, i32 %y) {
; CHECK-LABEL: pow2_smin_fail1:
; CHECK: # %bb.0:
; CHECK-NEXT: movl %esi, %ecx
+; CHECK-NEXT: notl %edi
; CHECK-NEXT: movl $1, %eax
; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
; CHECK-NEXT: shll %cl, %eax
; CHECK-NEXT: cmpl $12345, %eax # imm = 0x3039
; CHECK-NEXT: movl $12345, %ecx # imm = 0x3039
; CHECK-NEXT: cmovll %eax, %ecx
-; CHECK-NEXT: notl %edi
-; CHECK-NEXT: testl %edi, %ecx
+; CHECK-NEXT: testl %ecx, %edi
; CHECK-NEXT: sete %al
; CHECK-NEXT: retq
%yy = shl i32 1, %y
@@ -474,6 +474,7 @@ define i1 @pow2_smax_fail0(i32 %x, i32 %y, i32 %z) {
; CHECK-LABEL: pow2_smax_fail0:
; CHECK: # %bb.0:
; CHECK-NEXT: movl %esi, %ecx
+; CHECK-NEXT: notl %edi
; CHECK-NEXT: movl $1, %eax
; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
; CHECK-NEXT: shll %cl, %eax
@@ -482,8 +483,7 @@ define i1 @pow2_smax_fail0(i32 %x, i32 %y, i32 %z) {
; CHECK-NEXT: shrl %cl, %esi
; CHECK-NEXT: cmpl %esi, %eax
; CHECK-NEXT: cmovgl %eax, %esi
-; CHECK-NEXT: notl %edi
-; CHECK-NEXT: testl %edi, %esi
+; CHECK-NEXT: testl %esi, %edi
; CHECK-NEXT: sete %al
; CHECK-NEXT: retq
%yy = shl i32 1, %y
@@ -498,6 +498,7 @@ define i1 @pow2_smax_fail1(i32 %x, i32 %y, i32 %z) {
; CHECK-LABEL: pow2_smax_fail1:
; CHECK: # %bb.0:
; CHECK-NEXT: movl %esi, %ecx
+; CHECK-NEXT: notl %edi
; CHECK-NEXT: movl $4, %eax
; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
; CHECK-NEXT: shll %cl, %eax
@@ -506,8 +507,7 @@ define i1 @pow2_smax_fail1(i32 %x, i32 %y, i32 %z) {
; CHECK-NEXT: shrl %cl, %esi
; CHECK-NEXT: cmpl %esi, %eax
; CHECK-NEXT: cmovgl %eax, %esi
-; CHECK-NEXT: notl %edi
-; CHECK-NEXT: testl %edi, %esi
+; CHECK-NEXT: testl %esi, %edi
; CHECK-NEXT: sete %al
; CHECK-NEXT: retq
%yy = shl i32 4, %y
@@ -547,6 +547,7 @@ define i1 @pow2_select_fail0(i1 %c, i32 %x, i32 %y, i32 %z) {
; CHECK: # %bb.0:
; CHECK-NEXT: movl %ecx, %eax
; CHECK-NEXT: movl %edx, %ecx
+; CHECK-NEXT: notl %esi
; CHECK-NEXT: movl $1, %edx
; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
; CHECK-NEXT: shll %cl, %edx
@@ -555,8 +556,7 @@ define i1 @pow2_select_fail0(i1 %c, i32 %x, i32 %y, i32 %z) {
; CHECK-NEXT: shrl %cl, %r8d
; CHECK-NEXT: testb $1, %dil
; CHECK-NEXT: cmovnel %edx, %r8d
-; CHECK-NEXT: notl %esi
-; CHECK-NEXT: testl %esi, %r8d
+; CHECK-NEXT: testl %r8d, %esi
; CHECK-NEXT: sete %al
; CHECK-NEXT: retq
%yy = shl i32 1, %y
@@ -572,6 +572,7 @@ define i1 @pow2_select_fail2(i1 %c, i32 %x, i32 %y, i32 %z) {
; CHECK: # %bb.0:
; CHECK-NEXT: movl %ecx, %eax
; CHECK-NEXT: movl %edx, %ecx
+; CHECK-NEXT: notl %esi
; CHECK-NEXT: movl $4, %edx
; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
; CHECK-NEXT: shll %cl, %edx
@@ -580,8 +581,7 @@ define i1 @pow2_select_fail2(i1 %c, i32 %x, i32 %y, i32 %z) {
; CHECK-NEXT: shrl %cl, %r8d
; CHECK-NEXT: testb $1, %dil
; CHECK-NEXT: cmovnel %edx, %r8d
-; CHECK-NEXT: notl %esi
-; CHECK-NEXT: testl %esi, %r8d
+; CHECK-NEXT: testl %r8d, %esi
; CHECK-NEXT: sete %al
; CHECK-NEXT: retq
%yy = shl i32 4, %y
@@ -781,14 +781,14 @@ define i1 @pow2_and_fail0(i32 %x, i32 %y) {
; CHECK-LABEL: pow2_and_fail0:
; CHECK: # %bb.0:
; CHECK-NEXT: movl %esi, %ecx
+; CHECK-NEXT: notl %edi
; CHECK-NEXT: movl $4, %eax
; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
; CHECK-NEXT: shll %cl, %eax
; CHECK-NEXT: movl %eax, %ecx
; CHECK-NEXT: negl %ecx
; CHECK-NEXT: andl %eax, %ecx
-; CHECK-NEXT: notl %edi
-; CHECK-NEXT: testl %edi, %ecx
+; CHECK-NEXT: testl %ecx, %edi
; CHECK-NEXT: sete %al
; CHECK-NEXT: retq
%yy = shl i32 4, %y
@@ -803,14 +803,14 @@ define i1 @pow2_and_fail1(i32 %x, i32 %y) {
; CHECK-LABEL: pow2_and_fail1:
; CHECK: # %bb.0:
; CHECK-NEXT: movl %esi, %ecx
+; CHECK-NEXT: notl %edi
; CHECK-NEXT: movl $1, %eax
; CHECK-NEXT: movl $1, %edx
; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
; CHECK-NEXT: shll %cl, %edx
; CHECK-NEXT: subl %edx, %eax
; CHECK-NEXT: andl %edx, %eax
-; CHECK-NEXT: notl %edi
-; CHECK-NEXT: testl %edi, %eax
+; CHECK-NEXT: testl %eax, %edi
; CHECK-NEXT: sete %al
; CHECK-NEXT: retq
%yy = shl i32 1, %y
@@ -825,12 +825,12 @@ define i1 @pow2_and_fail2(i32 %x, i32 %y, i32 %z) {
; CHECK-LABEL: pow2_and_fail2:
; CHECK: # %bb.0:
; CHECK-NEXT: movl %esi, %ecx
+; CHECK-NEXT: notl %edi
; CHECK-NEXT: movl $1, %eax
; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
; CHECK-NEXT: shll %cl, %eax
; CHECK-NEXT: andl %edx, %eax
-; CHECK-NEXT: notl %edi
-; CHECK-NEXT: testl %edi, %eax
+; CHECK-NEXT: testl %eax, %edi
; CHECK-NEXT: sete %al
; CHECK-NEXT: retq
%yy = shl i32 1, %y
diff --git a/llvm/test/CodeGen/X86/setcc-logic.ll b/llvm/test/CodeGen/X86/setcc-logic.ll
index c98aae7fbf405..83ab90805cb60 100644
--- a/llvm/test/CodeGen/X86/setcc-logic.ll
+++ b/llvm/test/CodeGen/X86/setcc-logic.ll
@@ -629,7 +629,7 @@ define i1 @or_cmp_eq_i64(i64 %x, i64 %y) {
; NOBMI-LABEL: or_cmp_eq_i64:
; NOBMI: # %bb.0:
; NOBMI-NEXT: notq %rdi
-; NOBMI-NEXT: testq %rsi, %rdi
+; NOBMI-NEXT: testq %rdi, %rsi
; NOBMI-NEXT: sete %al
; NOBMI-NEXT: retq
;
@@ -647,7 +647,7 @@ define i1 @or_cmp_ne_i32(i32 %x, i32 %y) {
; NOBMI-LABEL: or_cmp_ne_i32:
; NOBMI: # %bb.0:
; NOBMI-NEXT: notl %esi
-; NOBMI-NEXT: testl %edi, %esi
+; NOBMI-NEXT: testl %esi, %edi
; NOBMI-NEXT: setne %al
; NOBMI-NEXT: retq
;
@@ -665,7 +665,7 @@ define i1 @or_cmp_eq_i16(i16 zeroext %x, i16 zeroext %y) {
; NOBMI-LABEL: or_cmp_eq_i16:
; NOBMI: # %bb.0:
; NOBMI-NEXT: notl %edi
-; NOBMI-NEXT: testl %esi, %edi
+; NOBMI-NEXT: testl %edi, %esi
; NOBMI-NEXT: sete %al
; NOBMI-NEXT: retq
;
@@ -683,7 +683,7 @@ define i1 @or_cmp_ne_i8(i8 zeroext %x, i8 zeroext %y) {
; CHECK-LABEL: or_cmp_ne_i8:
; CHECK: # %bb.0:
; CHECK-NEXT: notb %sil
-; CHECK-NEXT: testb %dil, %sil
+; CHECK-NEXT: testb %sil, %dil
; CHECK-NEXT: setne %al
; CHECK-NEXT: retq
%o = or i8 %x, %y
More information about the llvm-commits
mailing list