  Processors with extensible instruction sets are often used today as
programmable hardware accelerators for various domains. When extending RISC-V
and other similar extensible processor architectures, the task of designing
specialized instructions arises. This task can be solved automatically by using
instruction synthesis algorithms. In this paper, we consider algorithms that
can be used in addition to the known approaches and improve the synthesized
instruction sets by recomputing common operations (the result of which is
consumed by multiple operations) of a program inside clustered synthesized
instructions (common operations clustering algorithm), and by identifying
redundant (which have equivalents among the other instructions) synthesized
instructions (subsuming functions algorithm).
  Experimental evaluations of the developed algorithms are presented for the
tests from the domains of cryptography and three-dimensional graphics. For
Magma cipher test, the common operations clustering algorithm allows reducing
the size of the compiled code by 9%, and the subsuming functions algorithm
allows reducing the synthesized instruction set extension size by 2 times. For
AES cipher test, the common operations clustering algorithm allows reducing the
size of the compiled code by 10%, and the subsuming functions algorithm allows
reducing the synthesized instruction set extension size by 2.5 times. Finally,
for the instruction set extension from Volume Ray-Casting test, the additional
use of subsuming functions algorithm allows reducing problem-specific
instruction extension set size from 5 to only 2 instructions without losing its
functionality.
