aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2018-12-06 13:20:09 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2018-12-06 13:20:09 +0100
commit31460ed2cbcd66d080b7100655ee821384b7a884 (patch)
treee7fad33a3c51c11873521a2e121b37d0e1f22af1
parentc0d105c63d97a76ac9847b82cc658b330961182d (diff)
downloadgcc-31460ed2cbcd66d080b7100655ee821384b7a884.zip
gcc-31460ed2cbcd66d080b7100655ee821384b7a884.tar.gz
gcc-31460ed2cbcd66d080b7100655ee821384b7a884.tar.bz2
re PR target/87598 (Rejects "%a0" with constant)
PR target/87598 * config/aarch64/aarch64.c (aarch64_print_address_internal): Don't call output_operand_lossage on VOIDmode CONST_INTs. After output_operand_lossage do return false. * gcc.target/aarch64/asm-5.c: New test. From-SVN: r266852
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/aarch64/aarch64.c9
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/gcc.target/aarch64/asm-5.c8
4 files changed, 25 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1689291..cded91e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2018-12-06 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/87598
+ * config/aarch64/aarch64.c (aarch64_print_address_internal): Don't
+ call output_operand_lossage on VOIDmode CONST_INTs. After
+ output_operand_lossage do return false.
+
2018-12-06 Richard Biener <rguenther@suse.de>
* df-problems.c (df_rd_local_compute): Use bitmap_release.
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index 3d597ca..490a203 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -7635,8 +7635,13 @@ aarch64_print_address_internal (FILE *f, machine_mode mode, rtx x,
unsigned int size;
/* Check all addresses are Pmode - including ILP32. */
- if (GET_MODE (x) != Pmode)
- output_operand_lossage ("invalid address mode");
+ if (GET_MODE (x) != Pmode
+ && (!CONST_INT_P (x)
+ || trunc_int_for_mode (INTVAL (x), Pmode) != INTVAL (x)))
+ {
+ output_operand_lossage ("invalid address mode");
+ return false;
+ }
if (aarch64_classify_address (&addr, x, mode, true, type))
switch (addr.type)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 13d2e25..bda8476 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2018-12-06 Jakub Jelinek <jakub@redhat.com>
+ PR target/87598
+ * gcc.target/aarch64/asm-5.c: New test.
+
PR tree-optimization/85726
* gcc.dg/tree-ssa/pr85726-1.c: New test.
* gcc.dg/tree-ssa/pr85726-2.c: New test.
diff --git a/gcc/testsuite/gcc.target/aarch64/asm-5.c b/gcc/testsuite/gcc.target/aarch64/asm-5.c
new file mode 100644
index 0000000..1a5ebdc
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/asm-5.c
@@ -0,0 +1,8 @@
+/* PR target/87598 */
+/* { dg-do compile } */
+
+void
+foo (void)
+{
+ __asm__ ("# %a0" : : "i" (0));
+}