Atualmente, o cálculo de interseção de pontos assume que os valores têm sinal, e os valores 32 bits. Trecho que código:
const auto rem = builder->CreateSRem(b, a, "rem"); // rem = b % a
const auto zero = ConstantInt::get(Type::getInt32Ty(*context), 0);
const auto divisible = builder->CreateICmp(CmpInst::ICMP_NE, rem, zero, "divisible"); // rem == 0 ? 0 : 1
const auto extended = builder->CreateZExt(divisible, IntegerType::getInt32Ty(*context), "extended"); // extends to 32 bits
const auto result = builder->CreateAdd(div, extended, "result");
Alterar o código para que trate casos de unsigned e número de bits qualquer