On 05/01/18 22:14, Steve Ellcey wrote: > This is a fix for PR target/83335. We are asserting in > aarch64_print_address_internal because we have a non Pmode > address coming from an asm instruction. My fix is to > just allow this by checking this_is_asm_operands. This is > what it was doing before the assert was added that caused > the ICE. > > Verified that it fixed gcc.target/aarch64/asm-2.c in ILP32 > mode and that it caused no regressions. > > Steve Ellcey > sell...@cavium.com > > > 2018-01-05 Steve Ellcey <sell...@cavium.com> > > PR target/83335 > * config/aarch64/aarch64.c (aarch64_print_address_internal): > Allow non Pmode address in asm statements. > > > diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c > index a189605..af74212 100644 > --- a/gcc/config/aarch64/aarch64.c > +++ b/gcc/config/aarch64/aarch64.c > @@ -5670,8 +5670,9 @@ aarch64_print_address_internal (FILE *f, machine_mode > mode, rtx x, > { > struct aarch64_address_info addr; > > - /* Check all addresses are Pmode - including ILP32. */ > - gcc_assert (GET_MODE (x) == Pmode); > + /* Check all addresses are Pmode - including ILP32, > + unless this is coming from an asm statement. */ > + gcc_assert (GET_MODE (x) == Pmode || this_is_asm_operands); > > if (aarch64_classify_address (&addr, x, mode, true, type)) > switch (addr.type) >
Wouldn't it be better to call output_operand_lossage() with a suitable diagnostic message? If the operand isn't in Pmode assembly will (should) fail anyway. R.