Skip to content

Commit 1ab649c

Browse files
committed
[X86] LowerSELECTWithCmpZero - move !canUseCMOV check inside fold and update comment describing fold for clarity. NFC.
Minor refactor step before extending fold to support more patterns.
1 parent 13546c2 commit 1ab649c

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

llvm/lib/Target/X86/X86ISelLowering.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24084,13 +24084,9 @@ static SDValue LowerSELECTWithCmpZero(SDValue CmpVal, SDValue LHS, SDValue RHS,
2408424084
if (!CmpVT.isScalarInteger() || !VT.isScalarInteger())
2408524085
return SDValue();
2408624086

24087-
// Convert 'identity' patterns (iff X is 0 or 1):
24088-
// SELECT (X != 0), Y, (OR Y, Z) -> (OR Y, (AND (0 - X), Z))
24089-
// SELECT (X != 0), Y, (XOR Y, Z) -> (XOR Y, (AND (0 - X), Z))
24090-
// SELECT (X != 0), Y, (ADD Y, Z) -> (ADD Y, (AND (0 - X), Z))
24091-
// SELECT (X != 0), Y, (SUB Y, Z) -> (SUB Y, (AND (0 - X), Z))
24092-
if (!Subtarget.canUseCMOV() && X86CC == X86::COND_E &&
24093-
CmpVal.getOpcode() == ISD::AND && isOneConstant(CmpVal.getOperand(1))) {
24087+
if (X86CC == X86::COND_E && CmpVal.getOpcode() == ISD::AND &&
24088+
isOneConstant(CmpVal.getOperand(1))) {
24089+
2409424090
SDValue Src1, Src2;
2409524091
auto isIdentityPattern = [&]() {
2409624092
switch (RHS.getOpcode()) {
@@ -24114,7 +24110,12 @@ static SDValue LowerSELECTWithCmpZero(SDValue CmpVal, SDValue LHS, SDValue RHS,
2411424110
return false;
2411524111
};
2411624112

24117-
if (isIdentityPattern()) {
24113+
// Convert 'identity' patterns (iff X is 0 or 1):
24114+
// SELECT (AND(X,1) == 0), Y, (OR Y, Z) -> (OR Y, (AND NEG(AND(X,1)), Z))
24115+
// SELECT (AND(X,1) == 0), Y, (XOR Y, Z) -> (XOR Y, (AND NEG(AND(X,1)), Z))
24116+
// SELECT (AND(X,1) == 0), Y, (ADD Y, Z) -> (ADD Y, (AND NEG(AND(X,1)), Z))
24117+
// SELECT (AND(X,1) == 0), Y, (SUB Y, Z) -> (SUB Y, (AND NEG(AND(X,1)), Z))
24118+
if (!Subtarget.canUseCMOV() && isIdentityPattern()) {
2411824119
// we need mask of all zeros or ones with same size of the other
2411924120
// operands.
2412024121
SDValue Neg = CmpVal;

0 commit comments

Comments
 (0)