With the region-based analysis approach described above, precision may still be lost as compared to full inlining. In the second pass when deriving the calling context for a procedure, the analysis must represent the conservative approximation of information contributed by all program paths to the procedure. Such approximations can affect the precision of analysis if a procedure is invoked along paths that contribute very different information. To avoid this loss of precision, we incorporate into the calling context analysis a technique called selective procedure cloning, where the compiler replicates analysis results for a procedure to determine its data-flow information along paths in the program that contribute significantly different calling contexts . Because the replication is done selectively according to the unique data-flow information it exposes, we manage the analysis costs and can usually obtain the same precision as full inlining.