Fix llvm.trunc

Its meaning is different from fptrunc
Handle llvm.uadd.with.overflow
Implement ctlz

Also let CUDA's ffs use this implementation