[LLVMdev] 2-address and 3-address instructions

bagel
Fri, 17 Jul 2015 20:34:01 -0000

I am writing a backend for an experimental machine that has both 2-address and
3-address versions of some instructions.  The 2-address versions are more
compact and thus preferred when applicable.  How does one go about generating
the most compact version?

1. At instruction selection, is there a predicate that can test whether one of
the input sources is dead, thus allowing the selection of the 2-address version?

2. Or do I generate 2-address and have to have a custom pass that peepholes to
see if a mov reg-to-reg proceeds or follows a 2-address instruction and turn
it into a 3-address version?

3. Or do I generate 3-address and have a custom pass that checks if a source
and destination register in a 3-address is the same and turn it into a
2-address?

Anybody done this already?

Thanks,
Bagel