@@ -24084,13 +24084,9 @@ static SDValue LowerSELECTWithCmpZero(SDValue CmpVal, SDValue LHS, SDValue RHS,
24084
24084
if (!CmpVT.isScalarInteger() || !VT.isScalarInteger())
24085
24085
return SDValue();
24086
24086
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
+
24094
24090
SDValue Src1, Src2;
24095
24091
auto isIdentityPattern = [&]() {
24096
24092
switch (RHS.getOpcode()) {
@@ -24114,7 +24110,12 @@ static SDValue LowerSELECTWithCmpZero(SDValue CmpVal, SDValue LHS, SDValue RHS,
24114
24110
return false;
24115
24111
};
24116
24112
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()) {
24118
24119
// we need mask of all zeros or ones with same size of the other
24119
24120
// operands.
24120
24121
SDValue Neg = CmpVal;
0 commit comments