re PR target/81422 ([aarch64] internal compiler error: in update_equiv_regs, at ira...
authorQing Zhao <qing.zhao@oracle.com>
Wed, 11 Oct 2017 19:43:54 +0000 (19:43 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Wed, 11 Oct 2017 19:43:54 +0000 (19:43 +0000)
/gcc
2017-10-11  Qing Zhao  <qing.zhao@oracle.com>

PR target/81422
* config/aarch64/aarch64.c (aarch64_load_symref_appropriately):
Check whether the dest is REG before adding REG_EQUIV note.

/gcc/testsuite
2017-10-11  Qing Zhao  <qing.zhao@oracle.com>

PR target/81422
       * gcc.target/aarch64/pr81422.C: New test.

From-SVN: r253657

gcc/ChangeLog
gcc/config/aarch64/aarch64.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/aarch64/pr81422.C [new file with mode: 0644]

index c3d95d9ba5b2c979b3b16beeb471fe2c29f3d675..deda4e554acd40b8d0c2c64d90c5228c4bb5b3ac 100644 (file)
@@ -1,3 +1,9 @@
+2017-10-11  Qing Zhao  <qing.zhao@oracle.com>
+
+       PR target/81422
+       * config/aarch64/aarch64.c (aarch64_load_symref_appropriately):
+       Check whether the dest is REG before adding REG_EQUIV note.
+
 2017-10-11  Vladimir Makarov  <vmakarov@redhat.com>
 
        PR sanitizer/82353
index 6b3a7566bc1e32f71cdf0bed9f05296771581293..ec055876a744d8693741a9d716cd1f60c423f3cd 100644 (file)
@@ -1490,7 +1490,8 @@ aarch64_load_symref_appropriately (rtx dest, rtx imm,
          tp = gen_lowpart (mode, tp);
 
        emit_insn (gen_rtx_SET (dest, gen_rtx_PLUS (mode, tp, x0)));
-       set_unique_reg_note (get_last_insn (), REG_EQUIV, imm);
+       if (REG_P (dest))
+         set_unique_reg_note (get_last_insn (), REG_EQUIV, imm);
        return;
       }
 
@@ -1524,7 +1525,8 @@ aarch64_load_symref_appropriately (rtx dest, rtx imm,
          }
 
        emit_insn (gen_rtx_SET (dest, gen_rtx_PLUS (mode, tp, tmp_reg)));
-       set_unique_reg_note (get_last_insn (), REG_EQUIV, imm);
+       if (REG_P (dest))
+         set_unique_reg_note (get_last_insn (), REG_EQUIV, imm);
        return;
       }
 
@@ -1565,7 +1567,8 @@ aarch64_load_symref_appropriately (rtx dest, rtx imm,
            gcc_unreachable ();
          }
 
-       set_unique_reg_note (get_last_insn (), REG_EQUIV, imm);
+       if (REG_P (dest))
+         set_unique_reg_note (get_last_insn (), REG_EQUIV, imm);
        return;
       }
 
@@ -1594,7 +1597,8 @@ aarch64_load_symref_appropriately (rtx dest, rtx imm,
            emit_insn (gen_tlsie_tiny_sidi (dest, imm, tp));
          }
 
-       set_unique_reg_note (get_last_insn (), REG_EQUIV, imm);
+       if (REG_P (dest))
+         set_unique_reg_note (get_last_insn (), REG_EQUIV, imm);
        return;
       }
 
index 740454058d32807682b92e72c742b968fbefc551..71647a87b7a909edebfb5ab3e7c7f24d5b5bbf8e 100644 (file)
@@ -1,3 +1,8 @@
+2017-10-11  Qing Zhao  <qing.zhao@oracle.com>
+
+       PR target/81422
+       * gcc.target/aarch64/pr81422.C: New test.
+
 2017-10-11  Vladimir Makarov  <vmakarov@redhat.com>
 
        PR sanitizer/82353
diff --git a/gcc/testsuite/gcc.target/aarch64/pr81422.C b/gcc/testsuite/gcc.target/aarch64/pr81422.C
new file mode 100644 (file)
index 0000000..5bcc948
--- /dev/null
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-O0" } */
+
+struct DArray
+{
+    __SIZE_TYPE__ length;
+    int* ptr;
+};
+
+void foo35(DArray)
+{
+    static __thread int x[5];
+    foo35({5, (int*)&x});
+}
+