ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1);
// XXX-disabled: (and x, 0) should not be folded.
+ // (and (and x, 0), y) shouldn't either.
if (!N0C && N1C->isNullValue()) {
return SDValue();
}
+ if (!N0C) {
+ if (N0.getOpcode() == ISD::AND) {
+ auto* N01 = N0.getOperand(1).getNode();
+ auto* N01C = dyn_cast<ConstantSDNode>(N01);
+ if (N01C && N01C->isNullValue()) {
+ return SDValue();
+ }
+ }
+ }
if (N0C && N1C && !N1C->isOpaque())
return DAG.FoldConstantArithmetic(ISD::AND, SDLoc(N), VT, N0C, N1C);