Commit 7cfbf676 by Claudiu Zissulescu Committed by Claudiu Zissulescu

[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
parent d2e05fcb
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"
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
......
/* { 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;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment