pru: Enable section anchoring by default

Loading an arbitrary constant address in a register is expensive for
PRU.  So enable section anchoring by default to utilize the unsigned
byte constant offset operand of load/store instructions.

gcc/ChangeLog:

	* common/config/pru/pru-common.cc
	(TARGET_OPTION_OPTIMIZATION_TABLE): New definition.
	* config/pru/pru.cc (TARGET_MIN_ANCHOR_OFFSET): Set minimal
	anchor offset.
	(TARGET_MAX_ANCHOR_OFFSET): Set maximum anchor offset.

gcc/testsuite/ChangeLog:

	* gcc.target/pru/section-anchors-1.c: New test.
	* gcc.target/pru/section-anchors-2.c: New test.

Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
This commit is contained in:
Dimitar Dimitrov 2024-07-14 19:45:09 +03:00
parent f2fac50209
commit dcdefe47e1
4 changed files with 46 additions and 0 deletions

View File

@ -33,4 +33,16 @@ along with GCC; see the file COPYING3. If not see
#undef TARGET_EXCEPT_UNWIND_INFO
#define TARGET_EXCEPT_UNWIND_INFO sjlj_except_unwind_info
#undef TARGET_OPTION_OPTIMIZATION_TABLE
#define TARGET_OPTION_OPTIMIZATION_TABLE pru_option_optimization_table
/* Set default optimization options. */
static const struct default_options pru_option_optimization_table[] =
{
/* Enable section anchors by default at -O1 or higher. */
{ OPT_LEVELS_1_PLUS, OPT_fsection_anchors, NULL, 1 },
{ OPT_LEVELS_NONE, 0, NULL, 0 }
};
struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER;

View File

@ -3249,6 +3249,12 @@ pru_unwind_word_mode (void)
#undef TARGET_PRINT_OPERAND_ADDRESS
#define TARGET_PRINT_OPERAND_ADDRESS pru_print_operand_address
#undef TARGET_MIN_ANCHOR_OFFSET
#define TARGET_MIN_ANCHOR_OFFSET 0
#undef TARGET_MAX_ANCHOR_OFFSET
#define TARGET_MAX_ANCHOR_OFFSET 255
#undef TARGET_OPTION_OVERRIDE
#define TARGET_OPTION_OVERRIDE pru_option_override

View File

@ -0,0 +1,14 @@
/* Ensure section anchors are enabled by default. */
/* { dg-do assemble } */
/* { dg-options "-O1" } */
/* { dg-final { object-size text == 24 } } */
int aa;
int bb;
int
test (void)
{
return aa + bb;
}

View File

@ -0,0 +1,14 @@
/* Ensure section anchors are enabled by default. */
/* { dg-do compile } */
/* { dg-options "-O1" } */
int aa;
int bb;
int
test (void)
{
return aa + bb;
/* { dg-final { scan-assembler {\n\tldi32\tr\d+, \.LANCHOR\d+} } } */
}