Hi,
My architecture supports instructions with two parallel side effects.
For example, addition and subtraction can be done in parallel:
(define_insn "assi6"
[(parallel [
(set (match_operand:SI 0 "register_operand" "=r")
(minus:SI (match_operand:SI 1 "register_operand" "r")
(match_operand:SI 2 "register_operand" "r")))
(set (match_operand:SI 3 "register_operand" "=r")
(plus:SI (match_operand:SI 4 "register_operand" "r")
(match_operand:SI 5 "register_operand" "r")))
])]
""
"as\t%5, %4, %3, %2, %1, %0 %!"
)
This instruction is not chosen at ‘combine’ time even if ‘plus’ and
‘minus’ instructions are located one after other. That it is,
probably, there is no data dependency between them.