diff options
author | Jakub Jelinek <jakub@redhat.com> | 2022-04-06 17:36:54 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2022-04-06 17:42:07 +0200 |
commit | 6283d5ad4779d3e5b7b2a93e76de03264a7c7cc6 (patch) | |
tree | ecea188ab4fd78de18f3e49248b5041efb0d2ede | |
parent | 717b2d4191e80dc8aae3847675de73ed3f611fb7 (diff) | |
download | gcc-6283d5ad4779d3e5b7b2a93e76de03264a7c7cc6.zip gcc-6283d5ad4779d3e5b7b2a93e76de03264a7c7cc6.tar.gz gcc-6283d5ad4779d3e5b7b2a93e76de03264a7c7cc6.tar.bz2 |
sh: Fix up __attribute__((optimize ("Os"))) handling on SH [PR105069]
As mentioned in the PR, various tests on sh-elf ICE like:
make check-gcc RUNTESTFLAGS="compile.exp='pr104327.c pr58332.c pr81360.c pr84425.c'"
FAIL: gcc.c-torture/compile/pr104327.c -O0 (internal compiler error: 'global_options' are modified in local context)
FAIL: gcc.c-torture/compile/pr104327.c -O0 (test for excess errors)
FAIL: gcc.c-torture/compile/pr104327.c -O1 (internal compiler error: 'global_options' are modified in local context)
FAIL: gcc.c-torture/compile/pr104327.c -O1 (test for excess errors)
FAIL: gcc.c-torture/compile/pr104327.c -O2 (internal compiler error: 'global_options' are modified in local context)
FAIL: gcc.c-torture/compile/pr104327.c -O2 (test for excess errors)
FAIL: gcc.c-torture/compile/pr104327.c -O3 -g (internal compiler error: 'global_options' are modified in local context)
FAIL: gcc.c-torture/compile/pr104327.c -O3 -g (test for excess errors)
FAIL: gcc.c-torture/compile/pr104327.c -Os (test for excess errors)
FAIL: gcc.c-torture/compile/pr58332.c -O0 (test for excess errors)
FAIL: gcc.c-torture/compile/pr58332.c -O1 (internal compiler error: 'global_options' are modified in local context)
FAIL: gcc.c-torture/compile/pr58332.c -O1 (test for excess errors)
FAIL: gcc.c-torture/compile/pr58332.c -O2 (internal compiler error: 'global_options' are modified in local context)
FAIL: gcc.c-torture/compile/pr58332.c -O2 (test for excess errors)
FAIL: gcc.c-torture/compile/pr58332.c -O3 -g (internal compiler error: 'global_options' are modified in local context)
FAIL: gcc.c-torture/compile/pr58332.c -O3 -g (test for excess errors)
FAIL: gcc.c-torture/compile/pr58332.c -Os (internal compiler error: 'global_options' are modified in local context)
FAIL: gcc.c-torture/compile/pr58332.c -Os (test for excess errors)
FAIL: gcc.c-torture/compile/pr81360.c -O0 (test for excess errors)
FAIL: gcc.c-torture/compile/pr81360.c -O1 (internal compiler error: 'global_options' are modified in local context)
FAIL: gcc.c-torture/compile/pr81360.c -O1 (test for excess errors)
FAIL: gcc.c-torture/compile/pr81360.c -O2 (internal compiler error: 'global_options' are modified in local context)
FAIL: gcc.c-torture/compile/pr81360.c -O2 (test for excess errors)
FAIL: gcc.c-torture/compile/pr81360.c -O3 -g (internal compiler error: 'global_options' are modified in local context)
FAIL: gcc.c-torture/compile/pr81360.c -O3 -g (test for excess errors)
FAIL: gcc.c-torture/compile/pr81360.c -Os (internal compiler error: 'global_options' are modified in local context)
FAIL: gcc.c-torture/compile/pr81360.c -Os (test for excess errors)
FAIL: gcc.c-torture/compile/pr84425.c -O0 (test for excess errors)
FAIL: gcc.c-torture/compile/pr84425.c -O1 (internal compiler error: 'global_options' are modified in local context)
FAIL: gcc.c-torture/compile/pr84425.c -O1 (test for excess errors)
FAIL: gcc.c-torture/compile/pr84425.c -O2 (internal compiler error: 'global_options' are modified in local context)
FAIL: gcc.c-torture/compile/pr84425.c -O2 (test for excess errors)
FAIL: gcc.c-torture/compile/pr84425.c -O3 -g (internal compiler error: 'global_options' are modified in local context)
FAIL: gcc.c-torture/compile/pr84425.c -O3 -g (test for excess errors)
FAIL: gcc.c-torture/compile/pr84425.c -Os (internal compiler error: 'global_options' are modified in local context)
FAIL: gcc.c-torture/compile/pr84425.c -Os (test for excess errors)
With the following patch, none of those tests ICE anymore, though
pr104327.c still FAILs with:
Excess errors:
/usr/src/gcc/gcc/testsuite/gcc.c-torture/compile/pr104327.c:6:1: error: inlining failed in call to 'always_inline' 'bar': target specific option mismatch
I think that would be fixable by overriding TARGET_CAN_INLINE_P
hook and allowing at least for always_inline changes in sh_div_str.
2022-04-06 Jakub Jelinek <jakub@redhat.com>
PR target/105069
* config/sh/sh.opt (mdiv=): Add Save.
-rw-r--r-- | gcc/config/sh/sh.opt | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/gcc/config/sh/sh.opt b/gcc/config/sh/sh.opt index 8618e78..f494ab8 100644 --- a/gcc/config/sh/sh.opt +++ b/gcc/config/sh/sh.opt @@ -207,7 +207,7 @@ Target RejectNegative Mask(ALIGN_DOUBLE) Align doubles at 64-bit boundaries. mdiv= -Target RejectNegative Joined Var(sh_div_str) Init("") +Target Save RejectNegative Joined Var(sh_div_str) Init("") Division strategy, one of: call-div1, call-fp, call-table. mdivsi3_libfunc= |