Interprocedural analysis (IPA) is a form of dataflow analysis between functions. Dataflow analysis within a single function is calledintraproceduralanalysis. Note *inter* vs. *intra*.
Techniques to do intraprocedural analysis efficiently have been available for such a long time that production compilers could use these even in the 1960s.
Interprocedural analysis is sligtly more difficult because involves flow analysis between function calls and ideas such as function cloning, constant propagation between functions, and side effects analysis. This typically requires that the entire program, or at least substantial parts of it, are available to the compiler for analysis, or IPA will not help very much in improving the generated code.
Some commercial compilers have had forms of IPA for many years now. GCC is only just beginning to implement interprocedural optimizations.