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)