I can probably rattle off the design of a full adder off the top of my head, as a network of gates. And given a few minutes, I can probably give circuit diagrams for all the gates involved.
But is this really how building blocks of larger designs are put together? As a programmer, I spend most of my time in a high-level language, but I've been known to drop down to assembly for tight inner loops, simply because the abstractions cost a little bit of efficiency and in some areas every cycle counts.
So similarly, I could imagine a situation where an adder would be designed not out of discrete and separable gates, but as a more complex amalgamation of individual transistors, to improve power consumption/latency/whatever.
Is it potentially worthwhile, and is it done in practice, to design modules such as adders on a transistor level, or is everything just gates?