Hi Jeff, [...]
+ "#" + "&& 1" + [(const_int 0)] + "{ + /* If we do not have an RMW operand, then copy the input + to the output before this insn. Also modify the existing + insn in-place so we can have make_field_assignment actually + generate a suitable extraction. */ + if (!rtx_equal_p (operands[0], operands[1])) + { + emit_move_insn (operands[0], operands[1]); + XEXP (XEXP (SET_SRC (PATTERN (curr_insn)), 0), 0) = copy_rtx (operands[0]); + } + + rtx make_field_assignment (rtx); + rtx newpat = make_field_assignment (PATTERN (curr_insn)); + gcc_assert (newpat); + emit_insn (newpat); + DONE; It seems that make_field_assignment returns a new pattern only if it succeeds and returns the same pattern otherwise. So I am wondering if it is worth simplifying the above. Like removing the assert and checking/inserting move only when new pattern is returned? Thanks, Kugan > > Jeff