mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-08 09:50:38 +08:00
[ARC] Use TARGET_USE_ANCHORS_FOR_SYMBOL_P.
We don't want to use anchors for small data: the GP register acts as an anchor in that case. We also don't want to use them for PC-relative accesses, where the PC acts as an anchor. TLS symbols require special accesses as well, don't use anchors for such symbols. gcc/ 2017-04-28 Claudiu Zissulescu <claziss@synopsys.com> * config/arc/arc.c (arc_use_anchors_for_symbol_p): New function. (TARGET_USE_ANCHORS_FOR_SYMBOL_P): Define. gcc/testsuite 2017-04-28 Claudiu Zissulescu <claziss@synopsys.com> * gcc.target/arc/pr9001184797.c: New test. From-SVN: r251586
This commit is contained in:
parent
d2e05fcbda
commit
7cfbf676bd
@ -1,3 +1,8 @@
|
||||
2017-09-01 Claudiu Zissulescu <claziss@synopsys.com>
|
||||
|
||||
* config/arc/arc.c (arc_use_anchors_for_symbol_p): New function.
|
||||
(TARGET_USE_ANCHORS_FOR_SYMBOL_P): Define.
|
||||
|
||||
2017-08-31 Olivier Hainque <hainque@adacore.com>
|
||||
|
||||
* config.gcc (powerpc-wrs-vxworks|vxworksae|vxworksmils): Now
|
||||
|
@ -10566,6 +10566,30 @@ compact_memory_operand_p (rtx op, machine_mode mode,
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Implement TARGET_USE_ANCHORS_FOR_SYMBOL_P. We don't want to use
|
||||
anchors for small data: the GP register acts as an anchor in that
|
||||
case. We also don't want to use them for PC-relative accesses,
|
||||
where the PC acts as an anchor. Prohibit also TLS symbols to use
|
||||
anchors. */
|
||||
|
||||
static bool
|
||||
arc_use_anchors_for_symbol_p (const_rtx symbol)
|
||||
{
|
||||
if (SYMBOL_REF_TLS_MODEL (symbol))
|
||||
return false;
|
||||
|
||||
if (flag_pic)
|
||||
return false;
|
||||
|
||||
if (SYMBOL_REF_SMALL_P (symbol))
|
||||
return false;
|
||||
|
||||
return default_use_anchors_for_symbol_p (symbol);
|
||||
}
|
||||
|
||||
#undef TARGET_USE_ANCHORS_FOR_SYMBOL_P
|
||||
#define TARGET_USE_ANCHORS_FOR_SYMBOL_P arc_use_anchors_for_symbol_p
|
||||
|
||||
struct gcc_target targetm = TARGET_INITIALIZER;
|
||||
|
||||
#include "gt-arc.h"
|
||||
|
@ -1,3 +1,7 @@
|
||||
2017-09-01 Claudiu Zissulescu <claziss@synopsys.com>
|
||||
|
||||
* gcc.target/arc/pr9001184797.c: New test.
|
||||
|
||||
2017-09-01 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c/81887
|
||||
|
19
gcc/testsuite/gcc.target/arc/pr9001184797.c
Normal file
19
gcc/testsuite/gcc.target/arc/pr9001184797.c
Normal file
@ -0,0 +1,19 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-require-effective-target tls } */
|
||||
/* { dg-options "-Os -w -mno-ll64" } */
|
||||
|
||||
/* This test studies the use of anchors and tls symbols. */
|
||||
|
||||
struct a b;
|
||||
struct a {
|
||||
long c;
|
||||
long d
|
||||
} e() {
|
||||
static __thread struct a f;
|
||||
static __thread g;
|
||||
g = 5;
|
||||
h();
|
||||
if (f.c)
|
||||
g = g & 5;
|
||||
f = b;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user