Procedures pose barriers for some compiler optimizations because of function call overhead and degradation in quality of information. LLVM has implemented some Interprocedural Optimizations (IPO). However, the Interprocedural constant propagation (IPCP) part does very little. It performs on static functions only and only arguments of all callsites are constants will it works. Furthermore, it uses iterative algorithm which works inefficiently. This paper survey what GCC and some other papers do in IPCP. Then, we improve IPCP pass of LLVM by implementing procedure cloning and using value range to simplify branch.