[PATCH, ARM] PR47855 Compute attr "length" for some thumb2 insns

Richard Sandiford richard.sandiford@linaro.org
Thu Apr 7 09:32:00 GMT 2011


Hi Carrot,

Sorry if this has already been reported, but the patch breaks bootstrap
of arm-linux-gnueabi (or cross builds with --enable-werror).  The problem
is that this...

Carrot Wei <carrot@google.com> writes:
> @@ -10256,7 +10281,29 @@
>
>      return \"\";
>    }"
> -  [(set_attr "type" "store4")]
> +  [(set_attr "type" "store4")
> +   (set (attr "length")
> +	(if_then_else
> +	   (and (ne (symbol_ref "TARGET_THUMB2") (const_int 0))
> +		(ne (symbol_ref "{
> +		    /* Check if there are any high register (except lr)
> +		       references in the list. KEEP the following iteration
> +		       in sync with the template above.  */
> +		    int i, regno, hi_reg;
> +		    int num_saves = XVECLEN (operands[2], 0);
> +		    regno = REGNO (operands[1]);
> +		    hi_reg = (REGNO_REG_CLASS (regno) == HI_REGS)
> +			     && (regno != LR_REGNUM);
> +		    for (i = 1; i < num_saves && !hi_reg; i++)
> +		      {
> +			regno = REGNO (XEXP (XVECEXP (operands[2], 0, i), 0));
> +			hi_reg |= (REGNO_REG_CLASS (regno) == HI_REGS)
> +				  && (regno != LR_REGNUM);
> +		      }
> +		    !hi_reg;    }")
> +		  (const_int 0)))
> +	   (const_int 2)
> +	   (const_int 4)))]

uses a statement expression -- i.e. ({ code; result; }) -- which is
a GNU extension.

I suppose a simple fix would be to put the code into an arm.c function.

Richard



More information about the Gcc-patches mailing list