]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/77991 (ICE on x32 in plus_constant, at explow.c:87)
authorUros Bizjak <ubizjak@gmail.com>
Wed, 19 Oct 2016 15:00:06 +0000 (17:00 +0200)
committerUros Bizjak <uros@gcc.gnu.org>
Wed, 19 Oct 2016 15:00:06 +0000 (17:00 +0200)
PR target/77991
* config/i386/i386.c (legitimize_tls_address)
<case TLS_MODEL_INITIAL_EXEC>: For TARGET_64BIT || TARGET_ANY_GNU_TLS
convert dest to Pmode if different than Pmode.

testsuite/ChangeLog:

PR target/77991
* gcc.target/i386/pr77991.c: New test.

From-SVN: r241346

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr77991.c [new file with mode: 0644]

index a99e9ad46ed1fc1e2fc7b72e0615f8969b83870b..880196d4bd193570b35d7fac968263b018afa5de 100644 (file)
@@ -1,3 +1,10 @@
+2016-10-19  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/77991
+       * config/i386/i386.c (legitimize_tls_address)
+       <case TLS_MODEL_INITIAL_EXEC>: For TARGET_64BIT || TARGET_ANY_GNU_TLS
+       convert dest to Pmode if different than Pmode.
+
 2016-10-18  Kugan Vivekanandarajah  <kuganv@linaro.org>
 
        Backport from mainline
index e032b388ac7d7d6931760792da706683588c6f11..10de2c9fdcdd50ffe4c1a2f3d129bb651c2df443 100644 (file)
@@ -14286,7 +14286,9 @@ legitimize_tls_address (rtx x, enum tls_model model, bool for_mov)
          base = get_thread_pointer (tp_mode,
                                     for_mov || !TARGET_TLS_DIRECT_SEG_REFS);
          off = force_reg (tp_mode, off);
-         return gen_rtx_PLUS (tp_mode, base, off);
+         dest = gen_rtx_PLUS (tp_mode, base, off);
+         if (tp_mode != Pmode)
+           dest = convert_to_mode (Pmode, dest, 1);
        }
       else
        {
index c7345038d9eb5aecdefde8b7cda961ff424aa494..020ee03d14d2d5679d48ae98e32935f9ae00c01f 100644 (file)
@@ -1,3 +1,8 @@
+2016-10-19  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/77991
+       * gcc.target/i386/pr77991.c: New test.
+
 2016-10-17  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        Backport from trunk
@@ -81,7 +86,7 @@
        subroutine as an actual argument when numeric argument is expected.
 
 2016-09-30  Steven G. Kargl  <kargl@gcc.gnu.org>
+
        Backport from trunk
 
        PR fortran/69867
 2016-09-30  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        Backport from trunk
+
        PR fortran/71799
        * gfortran.dg/pr71799.f90: New test.
 
 2016-09-30  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        Backport from trunk
+
        PR fortran/70006
        * gfortran.dg/pr70006.f90: New test.
 
diff --git a/gcc/testsuite/gcc.target/i386/pr77991.c b/gcc/testsuite/gcc.target/i386/pr77991.c
new file mode 100644 (file)
index 0000000..6784fbc
--- /dev/null
@@ -0,0 +1,19 @@
+/* { dg-do compile { target { ! ia32 } } } */
+/* { dg-require-effective-target maybe_x32 } */
+/* { dg-options "-O2 -mx32 -maddress-mode=short" } */
+
+struct rcu_reader_data
+{
+  unsigned ctr;
+  _Bool waiting;
+}
+
+extern __thread rcu_reader;
+
+void rcu_read_lock()
+{
+  struct rcu_reader_data *x = &rcu_reader;
+  _Bool val = 0;
+
+  __atomic_store(&x->waiting, &val, 0);
+}