structures are not infered by simple expresion lookup in most synthesis tools hence something like
a = b && c;
will not always map to
AND2X1 (a, b, c)
and could just as easily be
NOR2X1(a_int, b, c)
BUFX1 (a, a_int)
if such structure offers any advantages (i.e better for congestion, faster, smaller, better power, etc.)
Not only that but many times, a change in one structure enables better optimization which is a common occurrance for arithmetic operations in building better CSA trees, etc.
Long and short of it is that if you want a specific implementation in gates, you might as well hand-instantiate it and preserve/dont_touch but if you are hand-instantiating everything then why use a synthesis tool?
Maybe you can share the rational behind your question
hope this helps,