Liu Haibin wrote:
to "c". However, it seems very difficult here. The old insn patterns are all general registers, but the new insn patterns are defined as custom registers.
The peephole pass does not do register allocation. So you can't use it to magically change "r" registers to "c" registers. What you are trying to do here won't work.
Can I use something like operands[0] = gen_rtx_REG (DImode, REGNO(operands[0])); here to force all the operands to be a different kind? Or how can I define the peephole?
If you are willing and able to do your own register allocation, then you might be able to get this to work, but this is very unlikely to be a good solution.
You probably shouldn't be using peepholes here. You probably should be generating the insns you want during initial RTL generation.
-- Jim Wilson, GNU Tools Support, http://www.specifix.com