72 lines
2.3 KiB
Diff
72 lines
2.3 KiB
Diff
From 0369836718ffb25ac64c135e748f409302068a56 Mon Sep 17 00:00:00 2001
|
|
From: Lulu Cheng <chenglulu@loongson.cn>
|
|
Date: Mon, 28 Aug 2023 11:30:21 +0800
|
|
Subject: [PATCH 052/124] LoongArch: Enable '-free' starting at -O2.
|
|
|
|
gcc/ChangeLog:
|
|
|
|
* common/config/loongarch/loongarch-common.cc:
|
|
Enable '-free' on O2 and above.
|
|
* doc/invoke.texi: Modify the description information
|
|
of the '-free' compilation option and add the LoongArch
|
|
description.
|
|
|
|
gcc/testsuite/ChangeLog:
|
|
|
|
* gcc.target/loongarch/sign-extend.c: New test.
|
|
|
|
Signed-off-by: Peng Fan <fanpeng@loongson.cn>
|
|
Signed-off-by: ticat_fp <fanpeng@loongson.cn>
|
|
---
|
|
.../config/loongarch/loongarch-common.cc | 1 +
|
|
.../gcc.target/loongarch/sign-extend.c | 25 +++++++++++++++++++
|
|
2 files changed, 26 insertions(+)
|
|
create mode 100644 gcc/testsuite/gcc.target/loongarch/sign-extend.c
|
|
|
|
diff --git a/gcc/common/config/loongarch/loongarch-common.cc b/gcc/common/config/loongarch/loongarch-common.cc
|
|
index f8b4660fa..309fcb280 100644
|
|
--- a/gcc/common/config/loongarch/loongarch-common.cc
|
|
+++ b/gcc/common/config/loongarch/loongarch-common.cc
|
|
@@ -35,6 +35,7 @@ static const struct default_options loongarch_option_optimization_table[] =
|
|
{
|
|
{ OPT_LEVELS_ALL, OPT_fasynchronous_unwind_tables, NULL, 1 },
|
|
{ OPT_LEVELS_1_PLUS, OPT_fsection_anchors, NULL, 1 },
|
|
+ { OPT_LEVELS_2_PLUS, OPT_free, NULL, 1 },
|
|
{ OPT_LEVELS_NONE, 0, NULL, 0 }
|
|
};
|
|
|
|
diff --git a/gcc/testsuite/gcc.target/loongarch/sign-extend.c b/gcc/testsuite/gcc.target/loongarch/sign-extend.c
|
|
new file mode 100644
|
|
index 000000000..3f339d06b
|
|
--- /dev/null
|
|
+++ b/gcc/testsuite/gcc.target/loongarch/sign-extend.c
|
|
@@ -0,0 +1,25 @@
|
|
+/* { dg-do compile } */
|
|
+/* { dg-options "-mabi=lp64d -O2" } */
|
|
+/* { dg-final { scan-assembler-times "slli.w" 1 } } */
|
|
+
|
|
+extern int PL_savestack_ix;
|
|
+extern int PL_regsize;
|
|
+extern int PL_savestack_max;
|
|
+void Perl_savestack_grow_cnt (int need);
|
|
+extern void Perl_croak (char *);
|
|
+
|
|
+int
|
|
+S_regcppush(int parenfloor)
|
|
+{
|
|
+ int retval = PL_savestack_ix;
|
|
+ int paren_elems_to_push = (PL_regsize - parenfloor) * 4;
|
|
+ int p;
|
|
+
|
|
+ if (paren_elems_to_push < 0)
|
|
+ Perl_croak ("panic: paren_elems_to_push < 0");
|
|
+
|
|
+ if (PL_savestack_ix + (paren_elems_to_push + 6) > PL_savestack_max)
|
|
+ Perl_savestack_grow_cnt (paren_elems_to_push + 6);
|
|
+
|
|
+ return retval;
|
|
+}
|
|
--
|
|
2.33.0
|
|
|