There are two obvious costs of object inlining: the extra sensitivity required by the analysis and the accretion of extra generated code from cloning. While the analysis does require a good deal of extra sensitivity, and produces many more clones than without it, this does not translate into more generated code.
The Concert Compiler generates C++ code as a portable assembly language; for this reason, among others, our code is much larger than that of G++, but object inlining does not increase the size of the code, but rather the opposite, as Figure 15 shows. This table measures the size in kilobytes of stripped object files generated by G++.
Figure 15: Object Inlining Code Expansion
The reason is twofold: by removing object allocations and heap references, object inlining shrinks the size of specialized methods compared to the original program. Furthermore, most of the specialized methods are inlined, so the cloned methods are not generated by themselves anyway.
We present analysis sensitivity required as a metric of our analysis' cost. As our analysis works by creating different contours for uses of object fields, a good measure of its cost is a count of the number of contours created with and without object inlining. Our compiler performs other analyses, so more contours than methods are needed even without object inlining. Figure 16, presents the number of method contours required per method in the program as a measure of precision required.
Figure 16: Method Contours Required
Our analysis framework also creates object contours for handling data flow thru state; the object inlining analyses did not, for these programs, require additional object contours. Even polygon overlay does not generate more object contours, despite requiring analysis through object fields, because the fields used contain differing types, so the type inference mechanism splits the relevant object contours even when object inlining does not. The polygon overlay code also causes the largest increase in required sensitivity, mostly because essentially all the data structures in this program are transformed.