[ARC] Use TARGET_CANNOT_SUBSTITUTE_MEM_EQUIV.
Sometimes the memory equivalent is not valid due to a large offset. For example replacing the ap register with its fp/sp-equivalent during LRA step. To solve this we introduced TARGET_CANNOT_SUBSTITUTE_MEM_EQUIV. gcc/ 2017-08-08 Claudiu Zissulescu <claziss@synopsys.com> * config/arc/arc.c (arc_cannot_substitute_mem_equiv_p): New function. (TARGET_CANNOT_SUBSTITUTE_MEM_EQUIV_P): Define. gcc/testsuite 2017-08-08 Claudiu Zissulescu <claziss@synopsys.com> * gcc.target/arc/lra-1.c: New test. From-SVN: r255273
This commit is contained in:
parent
e47b37ca82
commit
31e72f4f37
@ -1,3 +1,9 @@
|
||||
2017-11-30 Claudiu Zissulescu <claziss@synopsys.com>
|
||||
|
||||
* config/arc/arc.c (arc_cannot_substitue_mem_equiv_p): New
|
||||
function.
|
||||
(TARGET_CANNOT_SUBSTITUTE_MEM_EQUIV_P): Define.
|
||||
|
||||
2017-11-30 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR target/83210
|
||||
|
@ -10805,12 +10805,24 @@ arc_use_anchors_for_symbol_p (const_rtx symbol)
|
||||
return default_use_anchors_for_symbol_p (symbol);
|
||||
}
|
||||
|
||||
/* Return true if SUBST can't safely replace its equivalent during RA. */
|
||||
static bool
|
||||
arc_cannot_substitute_mem_equiv_p (rtx)
|
||||
{
|
||||
/* If SUBST is mem[base+index], the address may not fit ISA,
|
||||
thus return true. */
|
||||
return true;
|
||||
}
|
||||
|
||||
#undef TARGET_USE_ANCHORS_FOR_SYMBOL_P
|
||||
#define TARGET_USE_ANCHORS_FOR_SYMBOL_P arc_use_anchors_for_symbol_p
|
||||
|
||||
#undef TARGET_CONSTANT_ALIGNMENT
|
||||
#define TARGET_CONSTANT_ALIGNMENT constant_alignment_word_strings
|
||||
|
||||
#undef TARGET_CANNOT_SUBSTITUTE_MEM_EQUIV_P
|
||||
#define TARGET_CANNOT_SUBSTITUTE_MEM_EQUIV_P arc_cannot_substitute_mem_equiv_p
|
||||
|
||||
struct gcc_target targetm = TARGET_INITIALIZER;
|
||||
|
||||
#include "gt-arc.h"
|
||||
|
@ -1,3 +1,7 @@
|
||||
2017-11-30 Claudiu Zissulescu <claziss@synopsys.com>
|
||||
|
||||
* gcc.target/arc/lra-1.c: New test.
|
||||
|
||||
2017-11-30 Will Schmidt <will_schmidt@vnet.ibm.com>
|
||||
|
||||
* gcc.target/powerpc/fold-vec-abs-char-fwrapv.c: Add xxspltib insn
|
||||
|
17
gcc/testsuite/gcc.target/arc/lra-1.c
Normal file
17
gcc/testsuite/gcc.target/arc/lra-1.c
Normal file
@ -0,0 +1,17 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-Os -w -mlra" } */
|
||||
|
||||
/* ap is replaced with an address like base+offset by lra,
|
||||
where offset is larger than s9, resulting into an ICE. */
|
||||
|
||||
typedef struct { char a[500] } b;
|
||||
c;
|
||||
struct d {
|
||||
short e;
|
||||
b f
|
||||
} g(int h, int i, int j, int k, char l, int m, int n, char *p) {
|
||||
again:;
|
||||
struct d o;
|
||||
*p = c = ({ q(o); });
|
||||
goto again;
|
||||
}
|
Loading…
Reference in New Issue
Block a user