Minor optimisation in Module::wire() and Module::cell()
authorRupert Swarbrick <rswarbrick@gmail.com>
Tue, 26 May 2020 14:19:39 +0000 (15:19 +0100)
committerRupert Swarbrick <rswarbrick@gmail.com>
Tue, 26 May 2020 15:07:36 +0000 (16:07 +0100)
commit7ff306ccdb47415e3a483adad87076327399434f
treeae3cf4771f7ba9174e48e0978fcedd36c1dff814
parenta7f2ef6d34c4b336a910b3c6f3d2cc11da8a82b4
Minor optimisation in Module::wire() and Module::cell()

The existing code does a search to figure out whether id is in the
dict (with the call to count()), and then looks it up again to get the
result (with the call to at()). This version calls find() instead,
avoiding the double lookup.

Code size increases slightly (6kb). I think this is because the
contents of find() are getting inlined, and then inlined into lots of
the callsites for cell() and wire().

Looking at the compiled code before this patch, you just get
a (non-inlined) call to count() followed by a call to at(). After the
patch, the contents of find() have been inlined (so you see do_hash,
then do_lookup). The result for each function is about 30 bytes / 40%
bigger, which presumably also enlarges call-sites that inline it.
kernel/rtlil.h