aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDimitar Dimitrov <dimitar@dinux.eu>2024-07-14 19:45:09 +0300
committerDimitar Dimitrov <dimitar@dinux.eu>2024-07-31 19:45:05 +0300
commitdcdefe47e18fabc340f9862a27ebd521dfa3d38c (patch)
treebb1da7458a62d22b23e961dc1079e74b42c072f9 /gcc
parentf2fac502097f75e4a098a3321f216523b59030be (diff)
downloadgcc-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.cc12
-rw-r--r--gcc/config/pru/pru.cc6
-rw-r--r--gcc/testsuite/gcc.target/pru/section-anchors-1.c14
-rw-r--r--gcc/testsuite/gcc.target/pru/section-anchors-2.c14
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+} } } */
+}