This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFC][PATCH LRA] WIP patch to fix one part of PR87507


Hi peter,

On Mon, Oct 22, 2018 at 06:40:58PM -0500, Peter Bergner wrote:
> --- gcc/function.c	(revision 265399)
> +++ gcc/function.c	(working copy)
> @@ -6453,6 +6453,13 @@ match_asm_constraints_1 (rtx_insn *insn,
>  	  || !general_operand (input, GET_MODE (output)))
>  	continue;
>  
> +      /* If we have a matching constraint and both operands are hard registers,
> +	 then they must be the same hard register.  */
> +      if (HARD_REGISTER_P (output)
> +	  && HARD_REGISTER_P (input)
> +	  && REGNO (output) != REGNO (input))

You need to test for REG_P (input) before you can HARD_REGISTER_P (input)
or REGNO (input).

> +	fatal_insn ("unable to fixup asm constraints for:", insn);

"impossible constraints"?  There are some more of those already.  Or you
could describe the actual problem even?

> +			/* Operands don't match.  Make sure the two operands
> +			   are not two different explicit hard registers.  */
> +			if (HARD_REGISTER_P (*curr_id->operand_loc[nop])
> +			    && HARD_REGISTER_P (*curr_id->operand_loc[m]))
> +			  fatal_insn ("unable to generate reloads for:",
> +				      curr_insn);

Same here (and below) :-)


Segher


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]