aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hongjiu.lu@intel.com>2012-09-12 18:08:59 +0000
committerH.J. Lu <hjl@gcc.gnu.org>2012-09-12 11:08:59 -0700
commit9691b9a7d3a49a601a826f8a07b86f83e94b065a (patch)
tree93cf04b81049674bdcf74bcd715060ddfc1b4e59
parentc3c445e1cfe4184c0d3537f87e8e5bd3f9974646 (diff)
downloadgcc-9691b9a7d3a49a601a826f8a07b86f83e94b065a.zip
gcc-9691b9a7d3a49a601a826f8a07b86f83e94b065a.tar.gz
gcc-9691b9a7d3a49a601a826f8a07b86f83e94b065a.tar.bz2
Allow negative offset for UNSPEC_DTPOFF/UNSPEC_NTPOFF
gcc/ PR target/54445 * config/i386/predicates.md (x86_64_immediate_operand): Allow negative offset for UNSPEC_DTPOFF/UNSPEC_NTPOFF. gcc/testsuite/ PR target/54445 * gcc.target/i386/pr54445-1.c: New file. * gcc.target/i386/pr54445-2.c: Likewise. From-SVN: r191230
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/i386/predicates.md3
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.target/i386/pr54445-1.c24
-rw-r--r--gcc/testsuite/gcc.target/i386/pr54445-2.c11
5 files changed, 48 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3fb65fe..a7b950a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2012-09-12 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/54445
+ * config/i386/predicates.md (x86_64_immediate_operand): Allow
+ negative offset for UNSPEC_DTPOFF/UNSPEC_NTPOFF.
+
2012-09-12 Jan Hubicka <jh@suse.cz>
* common.opt (flto-partition): Add "max".
diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md
index d4f40b1..5234dec 100644
--- a/gcc/config/i386/predicates.md
+++ b/gcc/config/i386/predicates.md
@@ -201,8 +201,7 @@
{
case UNSPEC_DTPOFF:
case UNSPEC_NTPOFF:
- if (offset > 0
- && trunc_int_for_mode (offset, SImode) == offset)
+ if (trunc_int_for_mode (offset, SImode) == offset)
return true;
}
break;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index a72e8ef..62f96b5 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2012-09-12 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/54445
+ * gcc.target/i386/pr54445-1.c: New file.
+ * gcc.target/i386/pr54445-2.c: Likewise.
+
2012-09-12 Tobias Burnus <burnus@net-b.de>
PR fortran/54225
diff --git a/gcc/testsuite/gcc.target/i386/pr54445-1.c b/gcc/testsuite/gcc.target/i386/pr54445-1.c
new file mode 100644
index 0000000..72ef84e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr54445-1.c
@@ -0,0 +1,24 @@
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+
+__thread unsigned char tls_array[64];
+
+unsigned char
+__attribute__ ((noinline))
+tls_array_lookup_with_negative_constant(long long int position) {
+ return tls_array[position - 1];
+}
+
+int
+main ()
+{
+ int i;
+
+ for (i = 0; i < sizeof (tls_array) / sizeof (tls_array[0]); i++)
+ tls_array[i] = i;
+
+ for (i = 0; i < sizeof (tls_array) / sizeof (tls_array[0]); i++)
+ if (i != tls_array_lookup_with_negative_constant (i + 1))
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr54445-2.c b/gcc/testsuite/gcc.target/i386/pr54445-2.c
new file mode 100644
index 0000000..5151c13
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr54445-2.c
@@ -0,0 +1,11 @@
+/* { dg-do compile { target { *-*-linux* && { ! { ia32 } } } } } */
+/* { dg-options "-O2 -fno-pic" } */
+
+__thread unsigned char tls_array[64];
+
+unsigned char
+tls_array_lookup_with_negative_constant(long long int position) {
+ return tls_array[position - 1];
+}
+
+/* { dg-final { scan-assembler "mov(b|zbl)\[ \t\](%fs:)?tls_array@tpoff-1\\(%" } } */