Index: lib/Target/X86/X86ISelLowering.cpp =================================================================== --- lib/Target/X86/X86ISelLowering.cpp +++ lib/Target/X86/X86ISelLowering.cpp @@ -17604,7 +17604,7 @@ return true; if (Op.getResNo() == 1 && (Opc == X86ISD::ADD || Opc == X86ISD::SUB || Opc == X86ISD::ADC || - Opc == X86ISD::SBB || Opc == X86ISD::SMUL || Opc == X86ISD::UMUL || + Opc == X86ISD::SBB || Opc == X86ISD::SMUL || Opc == X86ISD::INC || Opc == X86ISD::DEC || Opc == X86ISD::OR || Opc == X86ISD::XOR || Opc == X86ISD::AND)) return true; @@ -26915,12 +26915,15 @@ Known.resetAll(); switch (Opc) { default: break; + case X86ISD::UMUL: + if (Op.getResNo() == 2) + goto bool_result; + break; case X86ISD::ADD: case X86ISD::SUB: case X86ISD::ADC: case X86ISD::SBB: case X86ISD::SMUL: - case X86ISD::UMUL: case X86ISD::INC: case X86ISD::DEC: case X86ISD::OR: @@ -26931,6 +26934,7 @@ break; LLVM_FALLTHROUGH; case X86ISD::SETCC: +bool_result: Known.Zero.setBitsFrom(1); break; case X86ISD::MOVMSK: {