[ARC] Update legitimate constant hook.
authorClaudiu Zissulescu <claziss@synopsys.com>
Mon, 18 Dec 2017 15:26:35 +0000 (16:26 +0100)
committerClaudiu Zissulescu <claziss@gcc.gnu.org>
Mon, 18 Dec 2017 15:26:35 +0000 (16:26 +0100)
Make sure we check the constants in all cases.

gcc/
2017-10-14  Claudiu Zissulescu  <claziss@synopsys.com>

* config/arc/arc.c (arc_legitimate_constant_p): Always check all
constants.

testsuite/
2017-10-14  Claudiu Zissulescu  <claziss@synopsys.com>

* gcc.target/arc/tls-1.c: New test.

From-SVN: r255778

gcc/ChangeLog
gcc/config/arc/arc.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/arc/tls-1.c [new file with mode: 0644]

index 128374c1287a2608c77b4e3ca55e733dd3dbc1c9..84046fffb175ddad19da6ef5716159ff274a69a3 100644 (file)
@@ -1,3 +1,8 @@
+2017-12-18  Claudiu Zissulescu  <claziss@synopsys.com>
+
+       * config/arc/arc.c (arc_legitimate_constant_p): Always check all
+       constants.
+
 2017-12-18  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
 
        PR target/83420
index d1d0d727df142aeb7b90ae9905185b477c9f2559..29c2a0f53146d5827d0d28d1a25091abc658870a 100644 (file)
@@ -5999,12 +5999,6 @@ arc_return_addr_rtx (int count, ATTRIBUTE_UNUSED rtx frame)
 bool
 arc_legitimate_constant_p (machine_mode mode, rtx x)
 {
-  if (GET_CODE (x) == SYMBOL_REF && SYMBOL_REF_TLS_MODEL (x))
-    return false;
-
-  if (!flag_pic && mode != Pmode)
-    return true;
-
   switch (GET_CODE (x))
     {
     case CONST:
index afcdd206d5fb827907fdd813678c50a22a3a520e..844fc960f7ded45f03c0bf576e98749eea13a6bf 100644 (file)
@@ -1,3 +1,7 @@
+2017-12-18  Claudiu Zissulescu  <claziss@synopsys.com>
+
+       * gcc.target/arc/tls-1.c: New test.
+
 2017-12-18  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/81877
diff --git a/gcc/testsuite/gcc.target/arc/tls-1.c b/gcc/testsuite/gcc.target/arc/tls-1.c
new file mode 100644 (file)
index 0000000..3f7a6d4
--- /dev/null
@@ -0,0 +1,26 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target tls } */
+/* { dg-options "-O3 -std=gnu99" } */
+
+/* Check if addressing the `pos` member of struct is done via tls
+   mechanism.  */
+
+struct callchain_cursor {
+  int last;
+  long long pos;
+} __thread a;
+void fn1(struct callchain_cursor *p1)
+{
+  p1->pos++;
+}
+
+extern void fn3 (void);
+
+void fn2(void) {
+  struct callchain_cursor *b = &a;
+  while (1) {
+    fn3();
+    fn1(b);
+  }
+}
+/* { dg-final { scan-assembler "r25,@a@tpoff" } } */