diff options
author | Dimitar Dimitrov <dimitar@dinux.eu> | 2024-07-14 19:45:09 +0300 |
---|---|---|
committer | Dimitar Dimitrov <dimitar@dinux.eu> | 2024-07-31 19:45:05 +0300 |
commit | dcdefe47e18fabc340f9862a27ebd521dfa3d38c (patch) | |
tree | bb1da7458a62d22b23e961dc1079e74b42c072f9 /gcc | |
parent | f2fac502097f75e4a098a3321f216523b59030be (diff) | |
download | gcc-dcdefe47e18fabc340f9862a27ebd521dfa3d38c.zip gcc-dcdefe47e18fabc340f9862a27ebd521dfa3d38c.tar.gz gcc-dcdefe47e18fabc340f9862a27ebd521dfa3d38c.tar.bz2 |
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>
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/common/config/pru/pru-common.cc | 12 | ||||
-rw-r--r-- | gcc/config/pru/pru.cc | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/pru/section-anchors-1.c | 14 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/pru/section-anchors-2.c | 14 |
4 files changed, 46 insertions, 0 deletions
diff --git a/gcc/common/config/pru/pru-common.cc b/gcc/common/config/pru/pru-common.cc index e8dbf28..cdc3178 100644 --- a/gcc/common/config/pru/pru-common.cc +++ b/gcc/common/config/pru/pru-common.cc @@ -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; diff --git a/gcc/config/pru/pru.cc b/gcc/config/pru/pru.cc index 491f664..d070007 100644 --- a/gcc/config/pru/pru.cc +++ b/gcc/config/pru/pru.cc @@ -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 diff --git a/gcc/testsuite/gcc.target/pru/section-anchors-1.c b/gcc/testsuite/gcc.target/pru/section-anchors-1.c new file mode 100644 index 0000000..4c8da51 --- /dev/null +++ b/gcc/testsuite/gcc.target/pru/section-anchors-1.c @@ -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; +} diff --git a/gcc/testsuite/gcc.target/pru/section-anchors-2.c b/gcc/testsuite/gcc.target/pru/section-anchors-2.c new file mode 100644 index 0000000..bd5467e --- /dev/null +++ b/gcc/testsuite/gcc.target/pru/section-anchors-2.c @@ -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+} } } */ +} |