APInt swift::constantFoldDiv(APInt lhs, APInt rhs, bool &Overflow, BuiltinValueKind ID) { assert(rhs != 0 && "division by zero"); switch (ID) { default : llvm_unreachable("Invalid case"); case BuiltinValueKind::SDiv: return lhs.sdiv_ov(rhs, Overflow); case BuiltinValueKind::SRem: // Check for overflow lhs.sdiv_ov(rhs, Overflow); return lhs.srem(rhs); case BuiltinValueKind::UDiv: Overflow = false; return lhs.udiv(rhs); case BuiltinValueKind::URem: Overflow = false; return lhs.urem(rhs); } }