[aarch64][RFA][rtl-optimization/87763] Fix insv_1 and insv_2 for aarch64

Kugan Vivekanandarajah kugan.vivekanandarajah@linaro.org
Tue Apr 23 01:42:00 GMT 2019


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



More information about the Gcc-patches mailing list