On Mon, Dec 03, 2018 at 01:26:48AM +0000, Iain Sandoe wrote:
> Hi,
> 
> Recent changes to the lowerings for call handling in rs6000 have broken 
> bootstrap for powerpc-darwin.
> 
> I’m proposing two patches;
> 1. the minimal fix to bootstrap - which I believe also fixes some possible 
> typos in the patterns for sysv.

Sorry for the breakage..

> 2. a second patch that brings Darwin into line with Alan’s recent change, and 
> makes it hopefully clearer what can be done if/when we retire the mlongcall 
> optimisation that is used for older Darwin versions.
> 
> ===
> 
> The first patch makes Darwin share the sysv lowering, up until late in the 
> process when we still use the macho_call_template.  This means we need to 
> preserve the CALL_LONG flag for Darwin.
> 
> In order to match this for Darwin64, the sysv patterns needed the clobber 
> mode to follow that of the pattern.  It seems that this might be a typo - 
> since it’s not obvious how it would work for powerpc64 sysv as things stand 
> (AIX and ELFv2 already follow the mode).

Hmm, yes, and I think there may be some more modes to fix.
call_local64, call_value_local64, call_nonlocal_sysv splitter,
call_value_nonlocal_sysv splitter, call_value_nonlocal_sysv_secure.

>  ;; Call and call_value insns
> +;; For the purposes of expanding calls, Darwin is very similar to SYSV.
>  (define_expand "call"
>    [(parallel [(call (mem:SI (match_operand 0 "address_operand"))
>                   (match_operand 1 ""))
> @@ -10288,7 +10289,7 @@
>        DONE;
>      }
>  
> -  if (DEFAULT_ABI == ABI_V4)
> +  if (DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_DARWIN)

Better yet, replace this line with "else" and tidy a little.  There's
some dead code and the "DONE" can move out of the conditional blocks.

>      {
>        rs6000_call_sysv (NULL_RTX, operands[0], operands[1], operands[2]);
>        DONE;


> @@ -10321,7 +10322,7 @@
>        DONE;
>      }
>  
> -  if (DEFAULT_ABI == ABI_V4)
> +  if (DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_DARWIN)

Similarly here,

> @@ -10765,7 +10766,7 @@
>        DONE;
>      }
>  
> -  if (DEFAULT_ABI == ABI_V4)
> +  if (DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_DARWIN)

and here,

>      {
>        rs6000_sibcall_sysv (NULL_RTX, operands[0], operands[1], operands[2]);
>        DONE;
> @@ -10796,7 +10797,7 @@
>        DONE;
>      }
>  
> -  if (DEFAULT_ABI == ABI_V4)
> +  if (DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_DARWIN)

and here.

>      {
>        rs6000_sibcall_sysv (operands[0], operands[1], operands[2], 
> operands[3]);
>        DONE;
> -- 
> 2.17.1
> 

-- 
Alan Modra
Australia Development Lab, IBM

Reply via email to