On 19-06-14 05:59, Richard Henderson wrote:
On 06/01/2014 04:27 AM, Tom de Vries wrote:
+  if (TARGET_AAPCS_BASED)
+    {
+      /* For AAPCS, IP and CC can be clobbered by veneers inserted by the
+        linker.  We need to add these to allow
+        arm_call_fusage_contains_non_callee_clobbers to return true.  */
+      rtx *fusage = &CALL_INSN_FUNCTION_USAGE (insn);
+      clobber_reg (fusage, gen_rtx_REG (word_mode, IP_REGNUM));
+      clobber_reg (fusage, gen_rtx_REG (word_mode, CC_REGNUM));

Why are you adding CC_REGNUM if fixed registers are automatically included?


Richard,

You're right, setting a fixed register here is not required for fuse-caller-save to work safely.

But it fits the definition of the hook TARGET_CALL_FUSAGE_CONTAINS_NON_CALLEE_CLOBBERS:
...
Set to true if all the calls in the current function contain clobbers in CALL_INSN_FUNCTION_USAGE for the registers that are clobbered by the call rather than by the callee, and are not already set or clobbered in the call pattern.
...

We can adapt the definition to not include fixed registers. I can make a patch for that, if you like.

Thanks,
- Tom

Reply via email to