Commit 974e8240 by Ramana Radhakrishnan

[Patch ARM] Fix PR target/81863

This has been in my patch stack for quite some time. The problem here
was that we weren't handling arm_word_relocations in
arm_valid_symbolic_address and is the surest fix for this
for GCC8 and GCC7.

Regression tested on arm-none-linux-gnueabihf . Applying to
trunk and backporting to GCC-7 in a day or so.

regards
Ramana

2018-03-27  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>

	PR target/81863
	* config/arm/arm.c (arm_valid_symbolic_address): Handle arm_word_relocations


2018-03-27  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>

	PR target/81863
	* gcc.target/arm/pr81863.c: New test.

From-SVN: r258886
parent 59d2d238
2018-03-27 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
PR target/81863
* config/arm/arm.c (arm_valid_symbolic_address): Handle arm_word_relocations
2018-03-27 Cesar Philippidis <cesar@codesourcery.com>
PR target/85056
......@@ -6,7 +11,7 @@
2018-03-27 Richard Biener <rguenther@suse.de>
PR middle-ed/84067
PR middle-end/84067
* match.pd ((A * C) +- (B * C) -> (A+-B) * C): Guard with
explicit single_use checks.
......
......@@ -29787,6 +29787,9 @@ arm_valid_symbolic_address_p (rtx addr)
rtx xop0, xop1 = NULL_RTX;
rtx tmp = addr;
if (target_word_relocations)
return false;
if (GET_CODE (tmp) == SYMBOL_REF || GET_CODE (tmp) == LABEL_REF)
return true;
......
2018-03-27 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
PR target/81863
* gcc.target/arm/pr81863.c: New test.
2018-03-27 Cesar Philippidis <cesar@codesourcery.com>
PR target/85056
......
/* testsuite/gcc.target/arm/pr48183.c */
/* { dg-do compile } */
/* { dg-options "-O2 -mword-relocations -march=armv7-a -marm" } */
/* { dg-final { scan-assembler-not "\[\\t \]+movw" } } */
int a, d, f;
long b;
struct ww_class {
int stamp;
} c;
struct stress {
int locks;
int nlocks;
};
void *e;
int atomic_add_return_relaxed(int *p1) {
__builtin_prefetch(p1);
return a;
}
void atomic_long_inc_return_relaxed(int *p1) {
int *v = p1;
atomic_add_return_relaxed(v);
}
void ww_acquire_init(struct ww_class *p1) {
atomic_long_inc_return_relaxed(&p1->stamp);
}
void ww_mutex_lock();
int *get_random_order();
void stress_inorder_work() {
struct stress *g = e;
int h = g->nlocks;
int *i = &g->locks, *j = get_random_order();
do {
int n;
ww_acquire_init(&c);
retry:
for (n = 0; n < h; n++)
ww_mutex_lock(i[j[n]]);
f = n;
if (d)
goto retry;
} while (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