taming undefined behavior in llvm