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: [PATCH][AArch64] Fix ILP32 memory access


On 27/06/17 14:39, Wilco Dijkstra wrote:
> This patch fixes a failure in gcc.target/aarch64/reload-valid-spoff.c 
> triggered by https://gcc.gnu.org/ml/gcc-patches/2017-06/msg01367.html -
> it supersedes https://gcc.gnu.org/ml/gcc-patches/2017-06/msg01907.html
> as this fixes the root cause of the failure.
> 
> In ILP32 all memory accesses must have Pmode as the base address, but
> aarch64_expand_mov_immediate wasn't emitting a conversion in one case.
> Besides fixing this add an assert that flags any MEM operands that are
> not Pmode.
> 
> Passes regress (with/without ilp32). OK for commit?
> 
> ChangeLog:
> 2017-06-27  Wilco Dijkstra  <wdijkstr@arm.com>
> 
> 	* config/aarch64/aarch64 (aarch64_expand_mov_immediate):
> 	Convert memory address to Pmode.

Missing ChangeLog entry for the new assert.

> --
> diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
> index 329d244e9cf16dbdf849e5dd02b3999caf0cd5a7..9038748ba049ba589f067f3f04c31704fe673d2c 100644
> --- a/gcc/config/aarch64/aarch64.c
> +++ b/gcc/config/aarch64/aarch64.c
> @@ -1958,6 +1958,8 @@ aarch64_expand_mov_immediate (rtx dest, rtx imm)
>  	      gcc_assert (can_create_pseudo_p ());
>  	      base = gen_reg_rtx (ptr_mode);
>  	      aarch64_expand_mov_immediate (base, XEXP (mem, 0));
> +	      if (ptr_mode != Pmode)
> +		base = convert_memory_address (Pmode, base);
>  	      mem = gen_rtx_MEM (ptr_mode, base);
>  	    }
>  
> @@ -5207,6 +5209,7 @@ aarch64_print_operand (FILE *f, rtx x, int code)
>  
>  	case MEM:
>  	  output_address (GET_MODE (x), XEXP (x, 0));
> +	  gcc_assert (GET_MODE (XEXP (x, 0)) == Pmode);
>  	  break;

This is worthy of a comment.  Something like "All memory references must
be in Pmode, which is the natural mode of the machine.  This remains the
case even if ptr_mode is different, as for ILP32."

Ok with those changes.

R.
>  
>  	case CONST:
> 


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