> -----Original Message-----
> From: Michael Eager [mailto:ea...@eagercon.com]
> Sent: Thursday, 28 February 2013 3:06 am
> To: David Holsgrove
> Cc: Michael Eager; gcc-patches@gcc.gnu.org; John Williams; Edgar E. Iglesias
> (edgar.igles...@gmail.com); Vinod Kathail; Vidhumouli Hunsigida; Nagaraju
> Mekala; Tom Shui
> Subject: Re: [Patch, microblaze]: Add support for swap instructions and 
> reorder
> option
> 
> The purpose is to avoid issuing a warning for processors before 8.30.a
> unless the user explicitly specifies -mxl-reorder.
> 

Warning the user who explicitly specifies -mxl-reorder with cpu before v8.30.a
is the first goal, but we also need to prevent the usage of swap instructions by
default if they are not possible to use.

> I think that the code can be reordered to make it clearer.
> 
> Replace this
> 
> +  /* TARGET_REORDER initialised as 2 in microblaze.opt,
> +     passing -mxl-reorder sets TARGET_REORDER to 1,
> +     and passing -mno-xl-reorder sets TARGET_REORDER to 0.  */
> +  ver = MICROBLAZE_VERSION_COMPARE (microblaze_select_cpu, "v8.30.a");
> +  if (ver < 0)
> +    {
> +        /* MicroBlaze prior to 8.30a didn't have swapb or swaph insns,
> +           so if -mxl-reorder passed, warn and clear TARGET_REORDER.  */
> +        if (TARGET_REORDER == 1)
> +          warning (0,
> +          "-mxl-reorder can be used only with -mcpu=v8.30.a or greater");
> +        TARGET_REORDER = 0;
> +    }
> +  else if (ver == 0)
> +    {
> +        /* MicroBlaze v8.30a requires pattern compare for
> +           swapb / swaph insns.  */
> +        if (!TARGET_PATTERN_COMPARE)
> +          TARGET_REORDER = 0;
> +    }
> 
> With this:
> 
> /* TARGET_REORDER defaults to 2 if -mxl-reorder not specified.  */
> if (TARGET_REORDER == 1)
> {
>    ver = MICROBLAZE_VERSION_COMPARE (microblaze_select_cpu, "v8.30.a");
>    if (ver < 0)
>    {
>      warning (0, "-mxl-reorder can be used only with -mcpu=v8.30.a or 
> greater");
>      TARGET_REORDER = 0;
>    }
>    else if ((ver == 0) && !TARGET_PATTERN_COMPARE)
>    {
>      warning (0, "-mxl-reorder requires -mxl-pattern-compare for 
> -mcpu=v8.30.a");
>      TARGET_REORDER = 0;
>    }
> }

So if we switch to your alternative, the default case (TARGET_REORDER=2) will 
not
be checked for cpu version, or use of TARGET_PATTERN_COMPARE, meaning we
emit swap instructions which aren’t valid for these situations.

Adjusting your if statement to be;

if (TARGET_REORDER)

would catch the default case along with explicit use of -mxl-reorder, but then 
we
would also be issuing the warnings for every compilation where cpu is less than
v8.30.a, or the user hasn’t passed -mxl-pattern-compare.

My attached patch will warn the user if they've explicitly used -mxl-reorder and
don’t meet the requirements, and will adjust the default case silently if 
required.

> +mxl-reorder
> +Target Var(TARGET_REORDER) Init(2)
> +Use reorder instructions (default)
> 
> Change to
> +Use reorder instructions (swap and byte reversed load/store) (default)
> 

Yes thanks, this is a clearer definition of the intent behind the option.

> 
> I'll check in the patch with these changes unless you have objections.
> 

thanks again for the review, please let me know if this patch is acceptable.
David

> 
> --
> Michael Eager  ea...@eagercon.com
> 1960 Park Blvd., Palo Alto, CA 94306  650-325-8077



Attachment: 0001-microblaze-add-support-for-swap-instructions-and-reo.patch
Description: 0001-microblaze-add-support-for-swap-instructions-and-reo.patch

Reply via email to